• 1. xizhu 2010年3月LAMP架构简介
  • 2. 目录LAMP概述 基于B/S的Web系统三层体系 什么是LAMP LAMP的组成体系 System: Linux/Unix Server: Apache Storage: MySQL+Memcached Script: PHP/Perl/Python 经典LAMP架构网站分析 几种网站架构比较 PHP简介 PHP的发展历程 PHP的企业级应用 全球使用PHP的网站 PHP的运行环境 PHP的开发环境 PHP的生产管理系统 PHP的缺点和前瞻 参考资料
  • 3. 基于B/S的Web系统三层体系软件开发 C/S or B/S C/S:Client/Server B/S:Browser/Server B/S架构的特点 客户端要求低 可维护性很高 数据安全性高 实时交互性好 B/S架构的三层体系 分层式设计:分散关注、松散耦合、逻辑复用、标准定义 界面表现层 业务逻辑层 数据存储层
  • 4. LAMP:LAMP是什么?LAMP是什么? 基于开源产品的Web架构:1998年,Michael Kunze为德国计算机杂志c‘t写了一篇关于Free软件如何成为商业软件替代品的文章时,创建了LAMP这个名词 LAMP由Linux 操作系统、Apache Web服务器、MySQL数据库和PHP(Perl或Python)脚本语言四种技术的开头字母组成 根据PHPChina资料统计在Alexa排名中国前200名的网站中有61%的采用了LAMP架构,包括腾讯、百度、雅虎、新浪、搜狐、Tom等一大批网站 LAMP架构已成为互联网行业的一盏真正的明灯
  • 5. LAMP的组成体系:SystemSystem L: Linux,包括但不限于Linux,我们认为可以泛指各种Linux/Unix系统,RedHat、Suse、Debian、Turbo、FreeBSD、Solaris…甚至包括了PS3的Yellow Dog Linux和Apple的Mac OS 10.5 Leopard 我们公司主要使用的系统:Suse Linux和Slackware Linux
  • 6. LAMP的组成体系:ServerServer A: Apache,一种占有全球72%市场的开源的Web Server,官方网站 http://www.apache.org 最新版本 2.2.8/2.0.63/1.3.41 最近Pingdom的统计表明,Apache仍然主导全美100大网站(Alexa的排名),占据了49%的市场份额 我们公司主要使用自己研发的Web Server,包括Qhttpd、TWS、QZ_Http、httpsrv等,部分业务使用Apache、Lighttpd、TomCat
  • 7. LAMP的组成体系:ServerServer Web Server软件的使用比例分布
  • 8. LAMP的组成体系:StorageStorage M: MySQL,一种开源的关系型数据库,被下载上千万次,2008年2月26日为Sun收购。我们公司绝大部分数据库都是使用MySQL M: 可以将M的概念扩展到Memcached: Memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。 M: 从Memcache扩展到,还有一系列产品,包括MySQL的memcache_engine/memcachedb_engine、MemcacheQ、Sharedance(http://sharedance.pureftpd.org) M: 可以将M的概念再扩展到Table cache:TencentTableCache ,是一个我司互联网系统平台架构组,提供高速数据访问服务的数据库cache server
  • 9. LAMP的组成体系:Storage :MemcachedMemcached 由Danga Interactive开发 http://www.danga.com/memcached/ 使用libevent进行网络IO处理,libevent作为一种新的非阻塞网络IO方式以高效的方法(epoll/kqueue)组织IO,分布式散列对象到不同的服务器,查询复杂度是O(1)。 性能特别高,支持多进程和多线程,支持TCP和UDP协议,支持C、C#、PHP、Perl、Python、Ruby、Java客户端,支持短连接和持久连接。 内存占用少,每个单位的slab和chunk可定制大小 由第三方开发的PHP客户端,和PHP紧密结合,PHP的数组、对象可直接存储,取出时自动还原,数据支持Gzip压缩和二进制传输,并发读写支持CAS(Compare-and-Swap) 大部分PHP的大型站点都在使用:Facebook、Sina、Sohu、Tom、Yahoo、51.com、wikipedia、sourceforge等等, Facebook参与了PHP官方的Memcache扩展函数库开发维护和版本更新 我们现在Qzone门户、活动、城市达人、校园以及QQ会员等项目广泛使用,自行开发了数据管理、数据恢复、状态监控和报警系统,并实现了无缝扩容,无需数据迁移
  • 10. LAMP的组成体系:Storage :TencentTableCacheTencentTableCache TencentTableCache:是由腾讯互联网业务系统平台架构部主持开发的基于Table结构进行内存存储、以MYSQL作为最终存储的持久数据层系统,以此作为MYSQL cache组件.其性能卓越超群,数据安全可靠。被广泛应用在包括Qzone平台,校友平台等项目上。 该软件使用epoll来管理网络连接。这时当前效率最高的事件通知机制,在大连接情况下尤其能够发挥威力。 该软件架构设计中,后端数据处理模块是独立的进程(helper进程),这些进程负责存取数据,由watchdog进程来进行监控,可以通过插件支持多种数据源(DB、文件、网络数据源等)。。 TTC 3.0的内存分配算法采用glibc的ptmalloc算法。TTC在ptmalloc基础上稍作修改,譬如内存只在共享内存块内部分配,不会额外mmap;内部只能用偏移量而不是指针等。 该软件使用异步处理机制,多状态的task,Task处理模型就像有穷状态机,不需要大量的进程同步等待回应,所以降低了在进程/线程上下文切换上的开销。
  • 11. LAMP的组成体系:ScriptScript P: PHP,也可以泛指PHP、Perl、Python等解释型脚本语言。截至2008年1月全球有33.24%的网站使用PHP,据统计在Alexa排名中国TOP200的网站中,使用PHP的网站有121个,占60%。在按照行业分类的网站统计中,25个行业的每个行业前10名,共计250个网站中,有102个使用PHP技术,占40% Apache平台上使用的语言比例分布
  • 12. 主流语言增长速度比较LAMP的组成体系:Script
  • 13. 经典LAMP网站架构分析SystemServerStorageScriptYahooFreeBSD + LinuxApacheMySQLPHPFacebookFreeBSDApacheMySQL + MemcachedPHPWikimediaLinuxApache + LighttpdMySQL + MemcachedPHPFlickrRedhat LinuxApacheMySQL + MemcachedPHP + PerlSinaFreeBSD + SolarisApache + NginxMySQL + MemcachedbPHPAudiogalaxyLinuxApacheMySQLPHPFriendsterLinuxApacheMySQLPHP + PerlYouTubeSuse LinuxApache + LighttpdMySQLPythonMixi.jpLinuxApacheMySQL + MemcachedPerlTypePadLinuxApacheMySQL + MemcachedPerlliveJournalLinuxApacheMySQL + MemcachedPerl
  • 14. 几种网站架构的比较MS .NETSUN J2EELAMPTencentSystemWindows 2008/2003跨平台跨平台LinuxServerIIS 6.0+Tomcat/JBOSS/Resein/WebLogic/WebSphereApache/IIS/Lighttpd/ZWS/NginxApache/Httpsrv/TWS/QZHttpScriptC#/VB.netJSPPHP/Perl/PythonC/C++运行模式ISAPIApache Module/CGI/FastCGI/ISAPI/CGI/FastCGI进程/线程模型多线程多线程多进程/内核支持多线程多进程/多线程源代码编译编译解释/编译成OPCODE编译Framework.Net FrameworkStruts/EJB/Webwork2/Tapstry/JSFZend Framework/Cake PHP/ThinkPHP/CacheEhCache/OSCache/JBossCacheMemcachedTTCDBSQLServer /AccessOracleMySQL/PostgreSQL/Oracle/SQLiteMySQL
  • 15. PHP Internet Domains20M15M10M5MRasmus Lerdorf Introduces PHP/FIZeev Suraski, Andi Gutmans develop PHP 3PHP 4 Released1M Internet domains Zend Engine Zend FoundedYahoo! Standardizes on PHPPHP 5.0 XML, SOAP, OOPIBM, Oracle Endorse PHP1995199719992000200220042005PHP的发展历程和使用PHP的网站数量图示PHP:PHP发展历程
  • 16. PHP: 填补了企业WEB应用的需求Simple, but RigidPowerful, but ComplexPortal FrameworksJava/J2EE Application FrameworkPHP Fills the Gap: Balancing Power, Flexibility, SimplicityService-Oriented Architecture (SOA)Gap
  • 17. PHP: 全球使用PHP的网站
  • 18. PHP: 运行环境关于PHP的运行环境,主要有以下五种Web Server,包括Apache、IIS、Lighttpd、Zeus、Nginx Apache Apache 2.x版本下提供了Prefork模式和Worker模式,鉴于PHP的第三方扩展函数库很多都是不支持多线程的,所以PHP官方和Zend官方强烈推荐不要使用Worker模式,而是要么继续使用Apache 1.3.x,要么使用Apache 2.x的Prefork模式 在Apache下,可以使用CGI方式、Apache模块方式(mod_php)、FastCGI方式(mod_fastcgi和mod_fcgd)三种方式来运行PHP,其中mod_php最稳定,mod_fcgd性能最高,需要说明的是FastCGI方式运行PHP存在一定风险,经常性会宕掉,无论是mod_fcgd还是mod_fastcgi。目前Linux/FreeBSD/Solaris绝大部分PHP网站使用Apache+Prefork+Mod_PHP方式,包括我们Qzone和QQ会员的所有PHP项目。
  • 19. IIS IIS 5/6/7下,主要有三种方式:CGI方式(php.exe)、ISAPI方式(Windows下)和FastCGI方式,而Windows下目前Zend和微软联合开发推出的基于IIS的PHP FastCGI加载方式是性能最高的,稳定性也很不错。 Lighttpd Lighttpd下主要使用FastCGI方式(Spawn-FCG)运行PHP,网站部(www.qq.com)一直在使用这个,缺点是稳定性较差,经常挂掉。 Zeus Zeus是商业软件,使用自带的FastCGI方式来运行PHP,性能是所有运行PHP的服务器当中最高的,远超过Apache和Lighttpd,但稳定性还待提升。 Nginx Nginx是一款纯静态服务器,需要通过转发的形式,使用Lighttpd的Spawn-FCG或者PHP Build FastCGI来以FastCGI方式运行PHP,这种方式性能很高但是稳定性较差,目前有很多新的项目采用这一方式,包括新浪的一些新业务和51.com的很多服务器。PHP: 运行环境
  • 20. PHP: 运行环境PHP WEB SERVER 使用PHP 做开发语言,通过底层PHP扩展的支持.直接运行PHP代码的WEB SERVER select /epoll两种接入模型。 提供多worker+监控进程方式.支持,runtimes,动态进程调度等相关机制. Qzone校友,第三方应用项目使用. facebook等项目开发过类型组件.
  • 21. PHP: 加速器PHP的加速器: 在Linux下的加速器包括PHP官方的APC、第三方的eAccelerator(基于MMCache)和XCache(以上三款都是免费的)、商业的Zend Platform(基于Zend Perormance Suite / Zend WinEnabler,PHP代码加速和缓存结合了Zend Accelerator和Zend Cache)和ionCube Accelerator。 其中官方的APC稳定性和功能都还不错,目前在Qzone校友等项目中使用,eAccelerator在sina很多项目和QQ会员中使用,Zend Platform在百度。 PHP的加速主要包括: PHP文件的编译,这个过程中把PHP程序中include/require的程序连接进来、常量/宏替换、代码优化合并等等,最后编译成二进制中间码opcode PHP opcode的Cache,这里大部分加速器都可以支持,将内容Cache到物理内存,超过限额也会cache到服务器本地文件。 PHP程序动态内容输出的Cache,这个功能仅在Zend Platform里支持,可以单独设置对某个目录/文件的内容输出进行Cache(请求的方式GET/POST等以及Cache时间、扫描文件变更时间都可以设置)
  • 22. PHP: 高级优化PHP的FATMM: 改造了PHP Zend MM 内存管理机制,将小块内存申请调用,变为初始化申请大块内存,在使用时,直接从预先申请的内存里分配空间。大块内存不够时,可动态申请,并动态管理大块内存. 其中需要改造PHP源码,使用补丁方式,替换ZEND API里, _emalloc, _free等函数,改补丁由Facebook开发维护. 目前在Qzone校友等项目中使用。 HipHop for PHP: 实现了将PHP代码转换为高品质C++代码,然后用G++编译成可执行的二进制文件,从而大幅减少服务器CPU和内存消耗 实现了PHP的跨请求持久化对象,将进程内存变为多线程共享内存,极大减少了内存占用。 采用了类似FatMM的机制,避免了频繁的malloc和free,可设置固定大小的set Facebook已经有90%的项目使用,同等流量下Web服务器的CPU消耗减少50%、API服务器的CPU消耗减少60%
  • 23. PHP: 其他高级优化PHC PHP Open Source Compile: 2005年爱尔兰Trinity College of Dublin的Edsko de Vries和John Gilbert创立,随后同学Paul Biggar加入 RoadSand PHP Compiler (pcc): 支持将PHP代码编译成独立运行的二进制文件,可以将PHP编译成Fast/CGI形式的Web程序、内嵌web server (MicroServer)形式的离线Web应用、使用PHP-GTK的桌面图形界面应用、以及控制台应用软件 RoadSand Raven (rphp): 功能要点:高度优化、JIT或静态编译原生二进制 (通过LLVM)、PHP 代码分级分析和优化、高级诊断和错误信息、模块化设计、干净简洁的runtime和扩展API、完整的unicode支持、可移植性、高速和安全
  • 24. PHP: 开发环境完善的开发环境:ZendStudio调试编写代码性能分析 语法高亮 先进的代码补全功能 支持Web Services 代码折叠 文档引擎 CVS/SVN 客户端支持 数据库访问支持 快速的定位、解决问题 调试时具备断点、监视点设置,察看输出缓冲数据等功能。 客户端/服务器端双重调试 调试简单 快速定位性能问题 记录每一行、每一个函数和每一个文件所占用的时间。 通过统计分析,找到最为耗时的部分。Supports Windows, Linux & Mac OSX
  • 25. PHP: 生产管理系统Web服务器生产管理系统: ZendPlatform扩展性能稳定 实时代码优化 代码加速与预编译 完善的缓存解决方案 下载优化与加速 自带性能测试及分析系统 支持Session数据跨服务器 中心控制台与生产节点相结合的管理模式 事件聚合功能 PHP配置的克隆 基于Web页面的管理平台 实时的监控系统,PHP智能组件 实时的脚本效率与运行性能监控 报告并跟踪实时错误 保存数据现场 (重现错误并保留完整的错误文档) 在线调试
  • 26. PHP的缺点和前瞻PHP的缺点: 第三方库的多线程支持 Apache多线程模式下运行的稳定性 不支持mmap(目前我们已经实现) 不支持epoll/kqueue(目前我们已经实现) 文件锁机制大并发下有缺陷 面向对象还不够全面(不支持命名空间、方法重载、操作符重载、多重继承) PHP的前瞻: PHP的编译:通过Roadsend PHP Compiler(http://www.roadsend.com)将PHP编译CGI/FastCGI、Server、桌面应用 PHP 6.0:Unicode支持 更完善的多线程支持
  • 27. 参考资源System相关 http://www.suse.com SUSE Linux http://www.slackware.com SlackWare Linux http://www.redhat.com RedHat Linux http://www.debian.com Debian Linux http://www.ubuntu.com Ubuntu Linux http://www.freebsd.org FreeBSD http://www.solaris.com Solaris Server相关 http://www.apache.org/ Apache http://www.nginx.net/ Nginx http://www.lighttpd.net/ Lighttpd http://yaws.hyber.org/ YAWS http://www.iis.net/php IIS for PHP http://www.zeus.com/ Zeus
  • 28. 参考资源PHP相关 http://www.php.net PHP官方网站 http://pecl.php.net PHP的第三方扩展函数库 http://www.zend.com PHP的官方商业支持 http://www.phpdoc.org PHP的注释文档 http://www.phpunit.de PHP的单元测试 http://www.xdebug.org PHP的Debug工具 http://www.eaccelerator.net EA PHP代码加速器 http://xcache.lighttpd.net XCache PHP代码加速器 http://framework.zend.com ZF PHP框架 Memcache相关 http://www.danga.com/memcached/ Memcached http://memcachedb.org/memcacheq/ MemcacheQ http://sourceforge.net/projects/repcached/ Repcached http://pecl.php.net/package/memcache PHP Client
  • 29. Thank you!谢谢大家!