1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,知识管理,引言,高并发高负载系统架构,二,OO,九,年 十一月,1,目录,1,、为什么要进行高并发和高负载的研究,2,、高并发和高负载的约束条件,3,、解决之道,硬件篇,4,、解决之道,部署篇,5,、解决之道,环境篇,6,、解决之道,SiteEngine,篇,7,、解决之道,测试篇,8,、结尾,2,为什么要进行高并发和高负载的研究,1,、产品发展的需要,2,、公司发展的需要,3,、当前形式决定的,3,高并发和高负载的约束条件,1,、硬件,2,、部署,3,、操作系统,4,、,Web,服务器,5,、,PHP,
2、6,、,MySQL,7,、测试,4,解决之道,硬件篇,处理能力的提升:,部署多颗,CPU,,选择多核心、具备更高运算频率、更大高速缓存的,CPU,;,处理能力的提升最直接的反应在于,Web,请求的处理效率和,PHP,程序的执行效率。,内存带宽与容量,:更大的内存带宽和容量;,内存带宽与容量的提升最直接的反应在于应对数据库大量的数据交换。,磁盘搜索与,I/O,能力,:选择更高的转速、更大的硬盘缓存、组件磁盘阵列(,RAID,);,磁盘搜索与,I/O,能力的提升最直接反应在于数据库大量的查询和读写以及文件的读写。,网络带宽的提升可考虑的因素包括:,更大带宽、多线路接入、独享带宽;,服务器在大负载的
3、情况下,对网络带宽的占用是十分可观的。,策略,:硬件设施是应对大负载的基础,硬件设施的投入可根据实际压力和预算量力而行。,5,解决之道,部署篇,1,、服务器,分离,2,、,数据库集群和库表散列,3,、,镜像,4,、负载均衡,分类:,1),、,DNS,轮循,2,)代理服务器负载均衡,3,)地址转换网关负载均衡,4,),NAT,负载均衡,5,)反向代理负载均衡,6,)混合型负载均衡,策略,:,根据硬件投入和业务需求,选择合理的部署方案。,6,解决之道,部署篇,方案一,适用范围:,静态内容为主体的网站和应用系统;,对系统安全要求较高的网站和应用系统。,Main Server,:主服务器,承载程序的主
4、体运行压力,处理网站或应用系统中的动态请求;,将静态页面推送至多个发布服务器;,将附件文件推送至文件服务器;,安全要求较高,以静态为主的网站,可将服务器置于内网屏蔽外网的访问。,DB Server,:数据库服务器,承载数据库读写压力;,只与主服务器进行数据量交换,屏蔽外网访问。,File/Video Server,:文件,/,视频服务器,承载系统中占用系统资源和带宽资源较大的数据流;,作为大附件的存储和读写仓库;,作为视频服务器将具备视频自动处理能力。,发布服务器组:,只负责静态页面的发布,承载绝大多数的,Web,请求;,通过,Nginx,进行负载均衡部署。,7,解决之道,部署篇,方案二,适用
5、范围:,以动态交互内容为主体的网站或应用系统;,负载压力较大,且预算比较充足的网站或应用系统;,Web,服务器组:,Web,服务无主从关系,属平行冗余设计;,通过前端负载均衡设备或,Nginx,反向代理实现负载均衡;,划分专用文件服务器,/,视频服务器有效分离轻,/,重总线;,每台,Web,服务器可通过,DEC,可实现连接所有数据库,同时划分主从。,数据库服务器组:,相对均衡的承载数据库读写压力;,通过数据库物理文件的映射实现多数据库的数据同步。,共享磁盘,/,磁盘阵列,将用于数据物理文件的统一读写,用于大型附件的存储仓库,通过自身物理磁盘的均衡和冗余,确保整体系统的,IO,效率和数据安全;,
6、方案特性:,通过前端负载均衡,合理分配,Web,压力;,通过文件,/,视频服务器与常规,Web,服务器的分离,合理分配轻重数据流;,通过数据库服务器组,合理分配数据库,IO,压力;,每台,Web,服务器通常只连接一台数据库服务器,通过,DEC,的心跳检测,可在极短时间内自动切换至冗余数据库服务器;,磁盘阵列的引入,大幅提升系统,IO,效率的同时,极大增强了数据安全性。,8,解决之道,环境篇,1,、操作系统,2,、,Web,服务器,3,、,Mysql,4,、,PHP,5,、代理服务器(缓存服务器),9,解决之道,环境篇,操作系统,操作系统的选择,关注点在于,是否适应于搭建,SiteEngine,
7、所需要的环境程序?,系统本身占用的资源比;,系统安全性;,系统是否易于操作?,策略,:我们选择,FreeBSD,,而且是最小化安装以后的,FreeBSD,。,10,解决之道,环境篇,Web,服务器,Web,服务器很大一部分资源占用来自于处理,Web,请求,通常情况下这也就是,Apache,产生的压力,,Apache,是世界使用排名第一的,Web,服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。,在高并发连接的情况下,,Nginx,是,Apache,服务器不错的替代品。,Nginx(,“,engine x,”,),是俄罗斯人编写的一款高性能的,HTTP,和反向代理服务器。在国内,已经有新
8、浪、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、,YUPOO,相册、豆瓣、迅雷看看等多家网站、频道使用,Nginx,服务器。,Nginx,的优势:,高并发连接,:官方测试能够支撑,5,万并发连接,在实际生产环境中跑到,2,3,万并发连接数。,内存消耗少,:在,3,万并发连接下,开启的,10,个,Nginx,进程才消耗,150M,内存(,15M*10=150M,)。,内置的健康检查功能,:如果,Nginx Proxy,后端的某台,Web,服务器宕机了,不会影响前端访问。,策略:,相对于老牌的,Apache,,,我们选择,Lighttpd,和,Nginx,这些,具有更小的资源占
9、用率和更高的负载能力,的,web,服务器,。,11,解决之道,环境篇,Mysql,MySQL,本身具备了很强的负载能力,,MySQL,优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解。大家都知道数据库工作就是大量的、短时的查询和读写,除了程序开发时需要注意建立索引、提高查询效率等软件开发技巧之外,从硬件设施的角度影响,MySQL,执行效率最主要来自于磁盘搜索、磁盘,IO,水平、,CPU,周期、内存带宽。,根据服务器上的硬件和,软件,条件进行,MySQl,优化,。,MySQL,优化的核心在于系统资源的分配,这不等于无限制的给,MySQL,分配更多的资源。在,MySQL,配置文件中我们介
10、绍几个最值得关注的参数:,改变索引缓冲区长度,(key_buffer),改变表长,(read_buffer_size),设定打开表的数目的最大值,(table_cache),对缓长查询设定一个时间限制,(long_query_time),如果条件允许,一般,MySQL,服务器最好安装在,Linux,操作系统中,而不是安装在,FreeBSD,中。,策略:,MySQL,优化需要根据业务系统的数据库读写特性和服务器硬件配置,制定不同的优化方案,,并且可以根据需要部署,MySQL,的主从结构。,12,解决之道,环境篇,PHP,1,、加载尽可能少的模块;,2,、如果是在,windows,平台下,尽可能使
11、用,IIS,或者,Nginx,来替代我们平常用的,Apache,;,3,、安装加速器(都是通过缓存,php,代码预编译的结果和数据库结果来提高,php,代码的执行速度),eAccelerator,eAccelerator,是一个自由开放源码,php,加速器,优化和动态内容缓存,提高了性能,php,脚本的缓存性能,使得,PHP,脚本在编译的状态下,对服务器的开销几乎完全消除。,Apc,Alternative PHP Cache,(,APC,)是,PHP,的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化,PHP,的中间代码。,memcache,memcache,是由,D
12、anga Interactive,开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。主要机制是通过在内存里维护一个统一的巨大的,hash,表,,Memcache,能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等,Xcache,国人开发的缓存器,,策略:,为,PHP,安装加速器。,13,解决之道,环境篇,代理服务器,Squid Cache,(简称为,Squid,)是一个流行的自由软件(,GNU,通用公共许可证)的代理服务器和,Web,缓存服务器。,Squid,有广泛的用途,从作为网页服务器的前置,cache,服务器缓存相关请求来提高,
13、Web,服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。,Squid,主要设计用于在,Unix,一类系统运行。,策略:,安装,Squid,反向代理服务器,能够大幅度提高服务器效率,。,14,解决之道,环境篇,总结,推荐的服务器环境配置:,操作系统:,FreeBSD web,服务器:,Nginx,程序语言:,PHP+Zend Optimizer+eAccelerator,数据库:,MySQL,15,解决之道,SiteEngine,篇,SiteEngine,历史上为了解决高并发高负载做了那些工作:,1,、,静态化;,2,、
14、缓存;,3,、,内存表;,4,、,定长表;,5,、尽可能,少用,join,还有,IN,。,16,解决之道,SiteEngine,篇,SiteEngine,在实施高并发高负载中出现的问题:,SiteEngine,在前期的发展中,一直是,面向通用型的,中小,网站来设计的,。从底层上就有不适应高并发高负载的机制存在。,具体表现在:,1,、,原有缓存功能,,特别是类别的缓存,无用武之地,;,2,、,无用的,sql,查询和,sql,查询的效率问题,;,3,、多语言设计导致很多查询都变得复杂,导致效率低下;,4,、,Mysql,中的查询方法太多;,5,、前台的动态交互太少。,17,解决之道,SiteEn
15、gine,篇,为了让,SiteEngine,更好的适应高并发高负载的环境。主要从以下几个方面进行改进:,1,、加入,Memcache,缓存技术;,2,、,开发一套精简版高效率的,SiteEngine,开发框架,专门应对系统开发,;,3,、,MySQL,数据库考虑转为,innodb,数据引擎,;,4,、前台更大量的加入,Ajax,元素;,5,、改变类别模式或者改变类别算法,取消类别缓存机制;,6,、成立专门的研发部门,将项目开发和软件研发分开;,7,、加强测试和,团队合作,。,18,解决之道,测试篇,1,、测试方法,2,、测试用例,3,、压力测试,压力测试是一种基本的质量保证行为,它是每个重要软
16、件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数 量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、,CPU,可用性、磁盘空间和网络带宽等。一般用并发来做压力测试。,压力测试工具:,webbench,,,ApacheBench,等,3,、,漏洞测试,在我们的系统中漏洞主要包括:,sql,注入漏洞,,xss,跨站脚本攻击等。安全方面还包括系统软件,如操作系统漏洞,,mysql,、,apache,等的漏洞,一般可以通过升级来解决。,漏洞测试工具:,Acunetix Web Vulnerability Scanner,19,结尾,在系统的开发过程中和项目实施过程中,大家肯定能够得到很大程度的提升,但是要真正解决高并发和高负载的问题,并不能立竿见影,还需要大家真真正正一点一滴的去了解问题,思考解决方法,不断尝试,不断创新,这个过程是漫长而又艰苦的。还希望我们全体公司成员团结一致、群策群力,为实现我们的目标艰苦奋斗,去开创属于我们大家更美好的明天。,谢谢!,20,






