版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大型网站架构不得不考虑的10个问题大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以实现的架构了,我们以高负载高数据交换高数据流动性的网站为例,比如海内,开心网等类似的web2.0系列架构。我们这里不讨论是PHP还是JSP或者.NET环境,我们从架构的方面去看问题,实现语言方面并不是问题,语言的优势在于实现而不是好坏,不论你选择任何语言,架构都是必须要面对的。 这里讨论一一下大型网站站需要注意和和考虑的问题题。1、海量数数据的处理众所周知,对对于一些相对对小的站点来来说,数据量量并不是很大大,seleect和uppdate
2、就就可以解决我我们面对的问问题,本身负负载量不是很很大,最多再再加几个索引引就可以搞定定。对于大型型网站,每天天的数据量可可能就上百万万,如果一个个设计不好的的多对多关系系,在前期是是没有任何问问题的,但是是随着用户的的增长,数据据量会是几何何级的增长的的。在这个时时候我们对于于一个表的sselectt和updaate的时候候(还不说多多表联合查询询)的成本的的非常高的。2、数据并并发的处理在一些时候候,2.0的的CTO都有有个尚方宝剑剑,就是缓存存。对于缓存存,在高并发发高处理的时时候也是个大大问题。在整整个应用程序序下,缓存是是全局共享的的,然而在我我们进行修改改的时候就,如如果两个或者者
3、多个请求同同时对缓存有有更新的要求求的情况下,应应用程序会直直接的死掉。这这个时候,就就需要一个好好的数据并发发处理策略以以及缓存策略略。另外,就是是数据库的死死锁问题,也也许平时我们们感觉不到,死死锁在高并发发的情况下的的出现的概率率是非常高的的,磁盘缓存存就是一个大大问题。3、文件存存贮的问题对于一些支支持文件上传传的2.0的的站点,在庆庆幸硬盘容量量越来越大的的时候我们更更多的应该考考虑的是文件件应该如何被被存储并且被被有效的索引引。常见的方方案是对文件件按照日期和和类型进行存存贮。但是当当文件量是海海量的数据的的情况下,如如果一块硬盘盘存贮了5000个G的琐琐碎文件,那那么维护的时时候
4、和使用的的时候磁盘的的Io就是一一个巨大的问问题,哪怕你你的带宽足够够,但是你的的磁盘也未必必响应过来。如如果这个时候候还涉及上传传,磁盘很容容易就oveer了。也许用raaid和专用用存贮服务器器能解决眼下下的问题,但但是还有个问问题就是各地地的访问问题题,也许我们们的服务器在在北京,可能能在云南或者者新疆的访问问速度如何解解决?如果做做分布式,那那么我们的文文件索引以及及架构该如何何规划。所以我们不不得不承认,文文件存贮是个个很不容易的的问题4、数据关关系的处理我们可以很很容易的规划划出一个符合合第三范式的的数据库,里里面布满了多多对多关系,还还能用GUIID来替换IINDENTTIFY
5、CCOLUMNN 但是,多多对多关系充充斥的2.00时代,第三三范式是第一一个应该被抛抛弃的。必须须有效的把多多表联合查询询降到最低。5、数据索索引的问题众所周知,索索引是提高数数据库效率查查询的最方面面最廉价最容容易实现的方方案。但是,在在高UPDAATE的情况况下,upddate和ddeletee付出的成本本会高的无法法想想,笔者者遇到过一个个情况,在更更新一个聚焦焦索引的时候候需要10分分钟来完成,那那么对于站点点来说,这些些基本上是不不可忍受的。索引和更新新是一对天生生的冤家,问问题A,D,EE这些是我们们在做架构的的时候不得不不考虑的问题题,并且也可可能是花费时时间最多的问问题。6、
6、分布式式处理对于2.00网站由于其其高互动性,CCDN实现的的效果基本上上为0,内容容是实时更新新的,我们常常规的处理。为为了保证各地地的访问速度度,我们就需需要面对一个个绝大的问题题,就是如何何有效的实现现数据同步和和更新,实现现各地服务器器的实时通讯讯有是一个不不得不需要考考虑的问题。7、Ajaax的利弊分分析成也AJAAX,败也AAJAX,AAJAX成为为了主流趋势势,突然发现现基于XMLLHTTP的的post和和get是如如此的容易。客客户端gett或者posst 到服务务器数据,服服务器接到数数据请求之后后返回来,这这是一个很正正常的AJAAX请求。但但是在AJAAX处理的时时候,如
7、果我我们使用一个个抓包工具的的话,对数据据返回和处理理是一目了然然。对于一些些计算量大的的AJAX请请求的话,我我们可以构造造一个发包机机,很容易就就可以把一个个webseerver干干掉。8、数据安安全性的分析析对于HTTTP协议来说说,数据包都都是明文传输输的,也许我我们可以说我我们可以用加加密啊,但是是对于G问题题来说的话,加加密的过程就就可能是明文文了(比如我我们知道的QQQ,可以很很容易的判断断他的加密,并并有效的写一一个跟他一样样的加密和解解密方法出来来的)。当你你站点流量不不是很大的时时候没有人会会在乎你,但但是当你流量量上来之后,那那么所谓的外外挂,所谓的的群发就会接接踵而来(
8、从从qq一开始始的群发可见见端倪)。也也许我们可以以很的意的说说,我们可以以采用更高级级别的判断甚甚至HTTPPS来实现,注注意,当你做做这些处理的的时候付出的的将是海量的的databbase,iio以及CPPU的成本。对对于一些群发发,基本上是是不可能的。笔笔者已经可以以实现对于百百度空间和qqq空间的群群发了。大家家愿意试试,实实际上并不是是很难。9、数据同同步和集群的的处理的问题题当我们的一一台dataabasesserverr不堪重负的的时候,这个个时候我们就就需要做基于于数据库的负负载和集群了了。而这个时时候可能是最最让人困扰的的的问题了,数数据基于网络络传输根据数数据库的设计计的不
9、同,数数据延迟是很很可怕的问题题,也是不可可避免的问题题,这样的话话,我们就需需要通过另外外的手段来保保证在这延迟迟的几秒或者者更长的几分分钟时间内,实实现有效的交交互。比如数数据散列,分分割,内容处处理等等问题题。10、数据据共享的渠道道以及OPEENAPI趋趋势Openaapi已经成成为一个不可可避免的趋势势,从gooogle,ffaceboook,myyspacee到21,都都在考虑这个个问题,它可可以更有效的的留住用户并并激发用户的的更多的兴趣趣以及让更多多的人帮助你你做最有效的的开发。这个个时候一个有有效的数据共共享平台,数数据开放平台台就成为必不不可少的途径径了,而在开开放的接口的
10、的情况保证数数据的安全性性和性能,又又是一个我们们必须要认真真思考的问题题了。大型网站数据库库优化千万人同时访问问的网站,一一般是有很多多个数据库同同时工作,说说明白一点就就是数据库集集群和并发控控制,这样的的网站实时性性也是相对的的。这些网站站都有一些共共同的特点:数据量大,在在线人数多,并并发请求多,ppageviiew高,响响应速度快。总总结了一下各各个大网站的的架构,主要要提高效率及及稳定性的几几个地方包括括:1、程序 程序开发是一方方面,系统架架构设计(硬硬件+网络+软件)是另另一方面。软件架构方面,做做网站首先需需要很多weeb服务器存存储静态资源源,比如图片片、视频、静静态页等,
11、千千万不要把静静态资源和应应用服务器放放在一起。一个好的程序员员写出来的程程序会非常简简洁、性能很很好,一个初初级程序员可可能会犯很多多低级错误,这这也是影响网网站性能的原原因之一。网站要做到效率率高,不光是是程序员的事事情,数据库库优化、程序序优化这是必必须的,在性性能优化上要要数据库和程程序齐头并进进!缓存也是是两方面同时时入手。第一一,数据库缓缓存和数据库库优化,这个个由dba完完成(而且这这个有非常大大的潜力可挖挖,只是由于于我们都是程程序员而忽略略了他而已)。第第二,程序上上的优化,这这个非常的有有讲究,比如如说重要一点点就是要规范范语句句,少用inn 多用orr,多用prrepar
12、eestateement,另另外避免程序序冗余如查找找数据少用双双重循环等。另另外选用优秀秀的开源框架架加以支持,我我个人认为中中后台的支持持是最最重要要的,可以选选取spriingibbatis。因因为ibattis直接操操作SQL并并有缓存机制制。spriing的好处处就不用我多多说了,的机制可可以避免neew对象,这这样也节省开开销。据我分分析,绝大部部分的开销就就是在NEWW的时候和连连接数据库时时候产生的,请请尽量避免。另另外可以用一一些内存测试试工具来做一一个 demmo说明hiibernaate和ibbatis谁谁更快!前台台你想用什么么就用什么,sstrutss,webwwor
13、k都成成,如果觉得得自己挺牛XX可以试试用用 tapeestry。用数据库也未必必不能解决访访问量巨大所所带来的问题题,作成静态态文件硬盘的的寻址时间也也未必少于数数据库的搜索索时间,当然然对资料的索索引要下一翻翻工夫。我自自己觉得门户户往往也就是是当天、热门门的资料点击击率较高,将将其做缓存最最多也不过112G的数据量量吧,举个例例子: 拿网易新闻闻来说htttp:/nnews.1163.coom/07/0606/09/3GGA0D100N000111229.html格式化一下,方方便理解:hhttp:/域名/年年/月日/新新闻所属分类类/新闻IDD.htmll可以把当天发布布的、热门的的、
14、流揽量大大的作个缓寸寸,用hasshtablle(keyy:年-月-日-分类-ID,vaalue:新新闻对象),静静态将其放到到内存(速度度绝对快过硬硬盘寻址静态态页面)。通常是采用orracle存存储过程22个webllogic,更更新机制也几几乎一样每签签发一条新闻闻,就会生成成静态页面,然然后发往前端端的web服服务器,前端端的web都都是做负载均均衡的。另外外还有定时的的程序,每55-15分钟钟自动生成一一次。在发布布新闻的同时时将数据缓存存。当然缓存存也不会越来来越大,在个个特定的时间间段(如凌晨晨)剔除过期期的数据。做做一个大的网网站远没有想想象中那么简简单,服务器器基本就要百百十
15、个的。这样可以大大增增加一台计算算机的处理速速度,如果一一台机器处理理不了,可以以用httppserveer集群来解解决问题了。2、网络 中国的网络分分南北电信和和网通,访问问的ip就要要区分南北进进入不同的网网络。3、集群 通常会使用CDDN与GSBBL与DNSS负载均衡技技术,每个地地区一组前台台服务器群,例例如:网易,百百度使用了DDNS负载均均衡技术,每每个频道一组组前台服务器器,一搜使用用了DNS负负载技术,所所有频道共用用一组前台服服务器集群。网站使用基于LLinux集集群的负载均均衡,失败恢恢复,包括应应用服务器和和数据库服务务器,基于llinux-ha的服务务状态检测及及高可用
16、化。应用服务器集群群可以采用aapachee+tomccat集群和和webloogic集群群等;webb服务器集群群可以用反向向代理,也可可以用NATT的方式,或或者多域名解解析都可以;Squidd也可以,方方法很多,可可以根据情况况选择。4、数据库 因为是千万人同同时访问的网网站,所以一一般是有很多多个数据库同同时工作的,说说明白一点就就是数据库集集群和并发控控制,数据分分布到地理位位置不同的数数据中心,以以免发生断电电事故。另外外还有一点的的是,那些网网站的静态化化网页并不是是真的,而是是通过动态网网页与静态网网页网址交换换做出现的假假象,这可以以用urlrrewritte这样的开开源网址
17、映射射器实现。这这样的网站实实时性也是相相对的,因为为在数据库复复制数据的时时候有一个过过程,一般在在技术上可以以用到hibbernatte和ecaache,但但是如果要使使网站工作地地更好,可以以使用EJBB和websspheree,webllogic这这样大型的服服务器来支持持,并且要用用oraclle这样的大大型数据库。大型门户网站不不建议使用MMysql数数据库,除非非你对Myssql数据的的优化非常熟熟悉。Myssql数据库库服务器的mmasterr-slavve模式,利利用数据库服服务器在主从从服务器间进进行同步,应应用只把数据据写到主服务务器,而读数数据时则根据据负载选择一一台从
18、服务器器或者主服务务器来读取,将将数据按不同同策略划分到到不同的服务务器(组)上上,分散数据据库压力。大型网站要用ooraclee,数据方面面操作尽量多多用存储过程程,绝对提升升性能;同时时要让DBAA对数据库进进行优化,优优化后的数据据库与没优化化的有天壤之之别;同时还还可以扩展分分布式数据库库,以后这方方面的研究会会越来越多;5、页面 从开始就考虑使使用虚拟存储储/簇文件系系统。它能让让你大量并行行IO访问,而而且不需要任任何重组就能能够增加所需需要的磁盘。页面数据调用更更要认真设计计,一些数据据查询可以不不通过数据库库的方式,实实时性要求不不高的可以使使用luceene来实现现,即使有实
19、实时性的要求求也可以用llucenee,luceene+coompasss还是非常优优秀的。新闻类的网站可可以用静态页页存储,采用用定时更新机机制减轻服务务器负担;首首页每个小模模块可以使用用oscacche缓存,这这样不用每次次都拉数据。前端的基于静态态页面缓存的的web加速速器,主要应应用有squuid等。ssquid 将大部分静静态资源(图图片,js,ccss等)缓缓存起来,直直接返回给访访问者,减少少应用服务器器的负载网站的静态化网网页并不是真真的,而是通通过动态网页页与静态网页页网址交换做做出现的假象象,这可以用用urlreewritee这样的开源源网址映射器器实现,后缀缀名为htm
20、m或者htmml并不能说说明程序生成成了静态页面面,可能是通通过url重重写来实现的的,为的只不不过是在搜索索引擎中提升升自己网站的的覆盖面积罢罢了。生成静态页面的的服务器和wwww服务器器是两组不同同的服务器,页页面生成后才才会到wwww服务器,一一部分数据库库并不是关系系数据库,这这样更适合信信息衍生,wwww、maail服务器器、路由器多多,主要用负负载平衡解决决访问瓶颈。 静态页面的的缺点:1) 增加了程程序的复杂度度2) 不利于管管理资料3) 速度不是是最快4) 伤硬盘6、缓存 从一开始就应该该使用缓存,高高速缓存是一一个更好的地地方存储临时时数据,比如如Web站点点上跟踪一个个特定
21、用户的的会话产生的的临时文件,就就不再需要记记录到数据库库里。不能用luceene实现的的可以用缓存存,分布式缓缓存可以用mmemcacched,如如果有钱的话话用10来台台机器做缓存存, 100G的存储量量相信存什么么都够了;如如果没钱的话话可以在页面面缓存和数据据缓存上下功功夫,多用OOSCACHHE和EHCCACHE,SSWARMCCACHE也也可以,不过过据说同步性性不是很好;可以使用Memmcachee进行缓存,用用大内存把这这些不变的数数据全都缓存存起来,而当当修改时就通通知cachhe过期,mmemcacche是LJJ开发的一款款分布式缓存存产品,很多多大型网站在在应用,我们们可
22、以把Caache SServerr与App Serveer装在一起起。因为Caache SServerr对CPU消消耗不大,而而有了Cacche Seerver的的支援,Appp Serrver对内内存要求也不不是太高,所所以可以和平平共处,更有有效的利用资资源。以上一些不太成成熟的想法,可可以从某一个个层次开始,逐逐步细化,把把产品的性能能指标提高上上去。浅析大型网站的的架构一个小型的网站站,比如个人人网站,可以以使用最简单单的htmll静态页面就就实现了,配配合一些图片片达到美化效效果,所有的的页面均存放放在一个目录录下,这样的的网站对系统统架构、性能能的要求都很很简单,随着着互联网业务务
23、的不断丰富富,网站相关关的技术经过过这些年的发发展,已经细细分到很细的的方方面面,尤尤其对于大型型网站来说,所所采用的技术术更是涉及面面非常广,从从硬件到软件件、编程语言言、数据库、WWebSerrver、防防火墙等各个个领域都有了了很高的要求求,已经不是是原来简单的的html静静态网站所能能比拟的。大型网站,比如如门户网站。在在面对大量用用户访问、高高并发请求方方面,基本的的解决方案集集中在这样几几个环节:使使用高性能的的服务器、高高性能的数据据库、高效率率的编程语言言、还有高性性能的Webb容器。但是是除了这几个个方面,还没没法根本解决决大型网站面面临的高负载载和高并发问问题。上面提供的几
24、个个解决思路在在一定程度上上也意味着更更大的投入,并并且这样的解解决思路具备备瓶颈,没有有很好的扩展展性,下面我我从低成本、高高性能和高扩扩张性的角度度来说说我的的一些经验。 1、HTML静静态化 其实大家都知道道,效率最高高、消耗最小小的就是纯静静态化的httml页面,所所以我们尽可可能使我们的的网站上的页页面采用静态态页面来实现现,这个最简简单的方法其其实也是最有有效的方法。但但是对于大量量内容并且频频繁更新的网网站,我们无无法全部手动动去挨个实现现,于是出现现了我们常见见的信息发布布系统CMSS,像我们常常访问的各个个门户站点的的新闻频道,甚甚至他们的其其他频道,都都是通过信息息发布系统
25、来来管理和实现现的,信息发发布系统可以以实现最简单单的信息录入入自动生成静静态页面,还还能具备频道道管理、权限限管理、自动动抓取等功能能,对于一个个大型网站来来说,拥有一一套高效、可可管理的CMMS是必不可可少的。除了门户和信息息发布类型的的网站,对于于交互性要求求很高的社区区类型网站来来说,尽可能能的静态化也也是提高性能能的必要手段段,将社区内内的帖子、文文章进行实时时的静态化,有有更新的时候候再重新静态态化也是大量量使用的策略略,像Mopp的大杂烩就就是使用了这这样的策略,网网易社区等也也是如此。同时,htmll静态化也是是某些缓存策策略使用的手手段,对于系系统中频繁使使用数据库查查询但是
26、内容容更新很小的的应用,可以以考虑使用hhtml静态态化来实现,比比如论坛中论论坛的公用设设置信息,这这些信息目前前的主流论坛坛都可以进行行后台管理并并且存储再数数据库中,这这些信息其实实大量被前台台程序调用,但但是更新频率率很小,可以以考虑将这部部分内容进行行后台更新的的时候进行静静态化,这样样避免了大量量的数据库访访问请求。2、图片服务器器分离 大家知道,对对于Web服服务器来说,不不管是Apaache、IIIS还是其其他容器,图图片是最消耗耗资源的,于于是我们有必必要将图片与与页面进行分分离,这是基基本上大型网网站都会采用用的策略,他他们都有独立立的图片服务务器,甚至很很多台图片服服务器
27、。这样样的架构可以以降低提供页页面访问请求求的服务器系系统压力,并并且可以保证证系统不会因因为图片问题题而崩溃,在在应用服务器器和图片服务务器上,可以以进行不同的的配置优化,比比如apacche在配置置ConteentTyppe的时候可可以尽量少支支持,尽可能能少的 LooadModdule,保保证更高的系系统消耗和执执行效率。3、数据库集群群和库表散列列 大型网站都有复复杂的应用,这这些应用必须须使用数据库库,那么在面面对大量访问问的时候,数数据库的瓶颈颈很快就能显显现出来,这这时一台数据据库将很快无无法满足应用用,于是我们们需要使用数数据库集群或或者库表散列列。在数据库集群方方面,很多数数
28、据库都有自自己的解决方方案,Oraacle、SSybasee等都有很好好的方案,常常用的MySSQL提供的的Masteer/Slaave也是类类似的方案,您您使用了什么么样的DB,就就参考相应的的解决方案来来实施即可。上面提到的数据据库集群由于于在架构、成成本、扩张性性方面都会受受到所采用DDB类型的限限制,于是我我们需要从应应用程序的角角度来考虑改改善系统架构构,库表散列列是常用并且且最有效的解解决方案。我我们在应用程程序中安装业业务和应用或或者功能模块块将数据库进进行分离,不不同的模块对对应不同的数数据库或者表表,再按照一一定的策略对对某个页面或或者功能进行行更小的数据据库散列,比比如用户
29、表,按按照用户IDD进行表散列列,这样就能能够低成本的的提升系统的的性能并且有有很好的扩展展性。sohhu的论坛就就是采用了这这样的架构,将将论坛的用户户、设置、帖帖子等信息进进行数据库分分离,然后对对帖子、用户户按照板块和和ID进行散散列数据库和和表,最终可可以在配置文文件中进行简简单的配置便便能让系统随随时增加一台台低成本的数数据库进来补补充系统性能能。4、缓存 缓存一词搞技术术的都接触过过,很多地方方用到缓存。网网站架构和网网站开发中的的缓存也是非非常重要。这这里先讲述最最基本的两种种缓存。高级级和分布式的的缓存在后面面讲述。架构方面的缓存存,对Apaache比较较熟悉的人都都能知道Ap
30、pache提提供了自己的的缓存模块,也也可以使用外外加的Squuid模块进进行缓存,这这两种方式均均可以有效的的提高Apaache的访访问响应能力力。网站程序开发方方面的缓存,LLinux上上提供的Meemory Cachee是常用的缓缓存接口,可可以在webb开发中使用用,比如用JJava开发发的时候就可可以调用MeemoryCCache对对一些数据进进行缓存和通通讯共享,一一些大型社区区使用了这样样的架构。另另外,在使用用web语言言开发的时候候,各种语言言基本都有自自己的缓存模模块和方法,PPHP有Peear的Caache模块块,Javaa就更多了,.net不是是很熟悉,相相信也肯定有有
31、。5、镜像 镜像是大型网站站常采用的提提高性能和数数据安全性的的方式,镜像像的技术可以以解决不同网网络接入商和和地域带来的的用户访问速速度差异,比比如 ChiinaNett和EduNNet 之间间的差异就促促使了很多网网站在教育网网内搭建镜像像站点,数据据进行定时更更新或者实时时更新。在镜镜像的细节技技术方面,这这里不阐述太太深,有很多多专业的现成成的解决架构构和产品可选选。也有廉价价的通过软件件实现的思路路,比如Liinux上的的rsyncc等工具。6、负载均衡 负载均衡将是大大型网站解决决高负荷访问问和大量并发发请求采用的的终极解决办办法。负载均衡技术发发展了多年,有有很多专业的的服务提供
32、商商和产品可以以选择,我个个人接触过一一些解决方法法,其中有两两个架构可以以给大家做参参考。硬件四层交换第四层交换使用用第三层和第第四层信息包包的报头信息息,根据应用用区间识别业业务流,将整整个区间段的的业务流分配配到合适的应应用服务器进进行处理。第四层交换换功能就象是是虚 IP,指指向物理服务务器。它传输输的业务服从从的协议多种种多样,有HHTTP、FFTP、NFFS、Tellnet或其其他协议。这这些业务在物物理服务器基基础上,需要要复杂的载量量平衡算法。在在IP世界,业业务类型由终终端TCP或或UDP端口口地址来决定定,在第四层层交换中的应应用区间则由由源端和终端端IP地址、TTCP和U
33、DDP端口共同同决定。在硬件四层交换换产品领域,有有一些知名的的产品可以选选择,比如AAlteonn、F5等,这这些产品很昂昂贵,但是物物有所值,能能够提供非常常优秀的性能能和很灵活的的管理能力。YYahoo中中国当初接近近2000台台服务器使用用了三四台AAlteonn就搞定了。软件四层交换大家知道了硬件件四层交换机机的原理后,基基于OSI模模型来实现的的软件四层交交换也就应运运而生,这样样的解决方案案实现的原理理一致,不过过性能稍差。但但是满足一定定量的压力还还是游刃有余余的,有人说说软件实现方方式其实更灵灵活,处理能能力完全看你你配置的熟悉悉能力。软件四层交换我我们可以使用用Linuxx
34、上常用的LLVS来解决决,LVS就就是Linuux Virrtual Serveer,他提供供了基于心跳跳线hearrtbeatt的实时灾难难应对解决方方案,提高系系统的鲁棒性性,同时可供供了灵活的虚虚拟VIP配配置和管理功功能,可以同同时满足多种种应用需求,这这对于分布式式的系统来说说必不可少。一个典型的使用用负载均衡的的策略就是,在在软件或者硬硬件四层交换换的基础上搭搭建squiid集群,这这种思路在很很多大型网站站包括搜索引引擎上被采用用,这样的架架构低成本、高高性能还有很很强的扩张性性,随时往架架构里面增减减节点都非常常容易。这样样的架构我准准备空了专门门详细整理一一下和大家探探讨。对
35、于大型网站来来说,前面提提到的每个方方法可能都会会被同时使用用到,我这里里介绍得比较较浅显,具体体实现过程中中很多细节还还需要大家慢慢慢熟悉和体体会,有时一一个很小的ssquid参参数或者appache参参数设置,对对于系统性能能的影响就会会很大,希望望大家一起讨讨论,达到抛抛砖引玉之效效。浅谈大型网站动动态应用系统统架构动态应用,是相相对于网站静静态内容而言言,是指以cc/c+、pphp、Jaava、peerl、.nnet等服务务器端语言开开发的网络应应用软件,比比如论坛、网网络相册、交交友、BLOOG等常见应应用。动态应应用系统通常常与数据库系系统、缓存系系统、分布式式存储系统等等密不可分
36、。 大型动态应应用系统平台台主要是针对对于大流量、高高并发网站建建立的底层系系统架构。大大型网站的运运行需要一个个可靠、安全全、可扩展、易易维护的应用用系统平台做做为支撑,以以保证网站应应用的平稳运运行。大型动态应应用系统又可可分为几个子子系统:1)Webb前端系统2)负载均均衡系统3)数据库库集群系统4)缓存系系统5)分布式式存储系统6)分布式式服务器管理理系统7)代码分分发系统Web前端端系统 结构图:为了达到不不同应用的服服务器共享、避避免单点故障障、集中管理理、统一配置置等目的,不不以应用划分分服务器,而而是将所有服服务器做统一一使用,每台台服务器都可可以对多个应应用提供服务务,当某些
37、应应用访问量升升高时,通过过增加服务器器节点达到整整个服务器集集群的性能提提高,同时使使他应用也会会受益。该WWeb前端系系统基于 AApachee/Lighhttpd/Eginxx等的虚拟主主机平台,提提供PHP程程序运行环境境。服务器对对开发人员是是透明的,不不需要开发人人员介入服务务器管理 负载均衡系系统 负载均衡系系统分为硬件件和软件两种种。硬件负载载均衡效率高高,但是价格格贵,比如FF5等。软件件负载均衡系系统价格较低低或者免费,效效率较硬件负负载均衡系统统低,不过对对于流量一般般或稍大些网网站来讲也足足够使用,比比如lvs, nginnx。大多数数网站都是硬硬件、软件负负载均衡系统
38、统并用。数据库集群群系统 结构图:由于Webb前端采用了了负载均衡集集群结构提高高了服务的有有效性和扩展展性,因此数数据库必须也也是高可靠的的,才能保证证整个服务体体系的高可靠靠性,如何构构建一个高可可靠的、可以以提供大规模模并发处理的的数据库体系系?我们可以采采用如上图所所示的方案:1) 使用用 MySQQL 数据库库,考虑到WWeb应用的的数据库读多多写少的特点点,我们主要要对读数据库库做了优化,提提供专用的读读数据库和写写数据库,在在应用程序中中实现读操作作和写操作分分别访问不同同的数据库。2) 使用用 MySQQL Repplicattion 机机制实现快速速将主库(写写库)的数据据库
39、复制到从从库(读库)。一一个主库对应应多个从库,主主库数据实时时同步到从库库。 3) 写数数据库有多台台,每台都可可以提供多个个应用共同使使用,这样可可以解决写库库的性能瓶颈颈问题和单点点故障问题。 4) 读数数据库有多台台,通过负载载均衡设备实实现负载均衡衡,从而达到到读数据库的的高性能、高高可靠和高可可扩展性。5) 数据据库服务器和和应用服务器器分离。6) 从数数据库使用BBigIP做做负载均衡。缓存系统 缓存分为文文件缓存、内内存缓存、数数据库缓存。在在大型Webb应用中使用用最多且效率率最高的是内内存缓存。最最常用的内存存缓存工具是是Memcaached。使使用正确的缓缓存系统可以以达
40、到实现以以下目标:1、使用缓缓存系统可以以提高访问效效率,提高服服务器吞吐能能力,改善用用户体验。2、减轻对对数据库及存存储集服务器器的访问压力力。3、Memmcacheed服务器有有多台,避免免单点故障,提提供高可靠性性和可扩展性性,提高性能能。分布式存储储系统 结构图:Web系统统平台中的存存储需求有下下面两个特点点: 1) 存储储量很大,经经常会达到单单台服务器无无法提供的规规模,比如相相册、视频等等应用。因此此需要专业的的大规模存储储系统。 2) 负载载均衡cluuster中中的每个节点点都有可能访访问任何一个个数据对象,每每个节点对数数据的处理也也能被其他节节点共享,因因此这些节点点
41、要操作的数数据从逻辑上上看只能是一一个整体,不不是各自独立立的数据资源源。因此高性能能的分布式存存储系统对于于大型网站应应用来说是非非常重要的一一环。(这个个地方需要加加入对某个分分布式存储系系统的简单介介绍。)分布式服务务器管理系统统 结构图: 随着网站访访问流量的不不断增加,大大多的网络服服务都是以负负载均衡集群群的方式对外外提供服务,随随之集群规模模的扩大,原原来基于单机机的服务器管管理模式已经经不能够满足足我们的需求求,新的需求求必须能够集集中式的、分分组的、批量量的、自动化化的对服务器器进行管理,能能够批量化的的执行计划任任务。在分布式服服务器管理系系统软件中有有一些比较优优秀的软件
42、,其其中比较理想想的一个是CCfengiine。它可可以对服务器器进行分组,不不同的分组可可以分别定制制系统配置文文件、计划任任务等配置。它它是基于C/S 结构的的,所有的服服务器配置和和管理脚本程程序都保存在在Cfenggine SServerr上,而被管管理的服务器器运行着 CCfengiine Cllient 程序,Cffenginne Cliient通过过SSL加密密的连接定期期的向服务器器端发送请求求以获取最新新的配置文件件和管理命令令、脚本程序序、补丁安装装等任务。 有了Cfeenginee这种集中式式的服务器管管理工具,我我们就可以高高效的实现大大规模的服务务器集群管理理,被管理
43、服服务器和 CCfengiine Seerver 可以分布在在任何位置,只只要网络可以以连通就能实实现快速自动动化的管理。 代码发布系系统 结构图:随着网站访访问流量的不不断增加,大大多的网络服服务都是以负负载均衡集群群的方式对外外提供服务,随随之集群规模模的扩大,为为了满足集群群环境下程序序代码的批量量分发和更新新,我们还需需要一个程序序代码发布系系统。这个发布系系统可以帮我我们实现下面面的目标:1) 生产产环境的服务务器以虚拟主主机方式提供供服务,不需需要开发人员员介入维护和和直接操作,提提供发布系统统可以实现不不需要登陆服服务器就能把把程序分发到到目标服务器器。 2) 我们们要实现内部部
44、开发、内部部测试、生产产环境测试、生生产环境发布布的4个开发发阶段的管理理,发布系统统可以介入各各个阶段的代代码发布。 3) 我们们需要实现源源代码管理和和版本控制,SSVN可以实实现该需求。这里面可以以使用常用的的工具Rsyync,通过过开发相应的的脚本工具实实现服务器集集群间代码同同步分发。大型高性能网站站的十项规则则见 过多种不同同类型的网站站和系统,有有好也有差。其其中有些系统统拥有良好的的服务器/网网络架构,并并且进行了合合理的调整和和监控 ;然然而一般的系系统都会有安安全和性能上上的 问题,不不能良好运行行,也无法变变得更流行。在中国, 开源源的LAMPP栈是最流行行的网络架构构,
45、它使用PPHP开发,运运行在Apaache服务务器上,以MMySQL作作为数据库,所所有这些都运运行在Linnux上。它它是个可靠的的平台,运行行良好,是现现在全球最 流行的Innterneet系统架构构。然而,我我们很难对其其规模进行正正确的扩展并并保持安全性性,因为每个个应用层都有有其自身的问问题、缺陷和和最佳实践。我我们的工作就就是 帮助企企业用最低的的操作成本来来创建并运行行高性能的、可可伸缩的、安安全的系统,因因此对于这类类问题我们有有很丰富的经经验。当前的实际情况况是,很多网网站都是由开开发人员 快快速而廉价地地创建,通常常没有任何IIT人员或者者经理,只是是由程序员来来管理系统。
46、造造成的结果是是,虽然花费费很低的成本本网站就可以以开始运行,但但是当拥有大大量用户、 需要扩展规规模的时候,通通常就会面临临真正的问题题。毕竟,中中国拥有三亿亿八千万的IInternnet用户,如如果其中的00.01%访访问这个站点点,就很容易易引发25 万50万万的页面访问问量。这些问问题在各个级级别上都会产产生,下面总总结的规则是是对最一般的的问题进行概概述,并且说说明为什么这这些规则如此此重要,以及及最好采用什什么方 法来来修正它们。遵遵循这些建议议的站点会提提高它的可伸伸缩性、安全全性以及操作作上的稳定性性。使用合适的会话话管理第 一一个想到的扩扩展系统的方方法就是添加加更多硬件。例
47、例如,使用两两台服务器而而不是一台。这这听着合理,但但会产生潜在在问题:会话话管理。这对对Java程程序来说是很很严重的问题题,在PHPP中也会产生生可延展性问问题, 对于于数据库的负负载尤其如此此。会话被定义为单单独的最终用用户登录或者者连接一 段段时间,其中中通常会包含含多个TCPP/IP的HHTTP连接接、几个Weeb页面,通通常还包括几几十个甚至上上百个页面元元素,如框架架、菜单、AAjax更新新等。所有这这些 HTTTP请求都需需要知道用户户是谁,才能能满足安全的的要求,并向向用户传送适适当的内容,因因为这些都是是会话的组成成部分。通常常每个会话都都会包括相互互关联的会话话数据, 如
48、如用户名、用用户ID、历历史、购物车车、统计资料料等等信息。问题在 于,在在有两台Weeb服务器和和多个 HTTTP连接的的情况下,用用户流量会在在两台服务器器之间分配和和移动,服务务器很难知道道用户是谁,并并对所有数据据进行跟踪,因因为每个页面面或者页面的的组成部分都都可能来 自自不同的服务务器。在PHHP中,通常常是这样解决决的,在第一一次连接或登登录的时候就就创建一个会会话ID并将将其放在Coookie中中,然后这个个Cookiie会和每个个 HTTPP请求一起发发送。这样做带来一个个问题,接下下来每段PHHP脚本 都都需要基于IID来查找会会话数据。由由于PHP无无法在执行过过程之间保
49、持持状态(这与与Java不不同),这个个会话数据需需要存储在某某个地方,通通常是在数据据库中。但是是, 如果复复杂的页面需需要在每个页页面载入过程程中对其进行行十次查找(这这是经常要做做的),那就就意味着每个个页面都要执执行10次SSQL查询,这这会导致数据据库上很大的的负 载。在前面所举的中中国 Intternett用户 0.01%的例例子中,可能能很容易在每每秒内仅仅为为了管理会话话就生成上百百个查询。解解决方法是一一直使用位于于Cookiie中的会话话ID,并且且使用像 MMemcacched之类类的服务来缓缓存会话数据据以获得高性性能。还要注 意其中中存在安全性性的问题,因因为黑客可
50、以伪造另一一个用户的会会话ID,这这是很容易找找到或看到的的,特别是在在公用的Wii-Fi中。解解决方法是对对会话ID进进行恰当的加加密或者签名名,并将其与与时间区间、 IP地址以以及其他关键键信息 像浏浏览器或者其其他细节相绑绑定。在Innterneet上有很多多不错的关于于良好的会话话管理的例子子,你可以根根据需要找到到最适合的。总是要考虑安全全性尽管编写写像防止SQQL注入和登登录安全之类类的 代码涉涉及很多安全全问题,但不不幸的是,几几乎没有人考考虑过安全性性,而那些考考虑到的人也也没有对其进进行很好地理理解。而本文文要关注的是是操作性的系系统安全。对对于这类安 全,我们的的焦点集中在
51、在三个安全领领域:防火墙墙、运行的用用户以及文件件访问权限。除了配置专门的的硬件防火墙墙(像Cissco的 AASA)之外外,所有服务务器都还应该该运行像Ipptablees之类的防防火墙,它会会保护服务器器免受其他威威胁和攻击。这这些威胁和攻攻击可能来自自公共的 IInternnet、其他他服务器或本本地服务器,也也包括使用VVPN或者SSSH通道的的开发和操作作人员。我们们仅对指定的的IP开放确确实需要的端端口。Ipttabless 可能会很很复杂,但是是有很多不错错的模板,我我们通常可以以使用它们来来帮助客户创创建Iptaables。例例如,默认的的RedHaat或者CeentOS防防火
52、墙的配置置说明 只有有10行,显显然并不实用用。我们最佳佳实践的Ipptablees配置大概概有5页,这这其中包含了了Linuxx所能提供的的最高级的安安全防范。所有公用的服务务,都应该运运行在专门的的用户 下,如如Apachhe。切记永永远都不要使使用Roott用户运行,因因为这会让任任何闯入到AApachee的用户接管管整个服务器器。如果Appache只只是运行在 Apachhe用户下或或者运行在NNobodyy下,那么闯闯入Apacche就不是是一件容易的的事情了。Web服务器运运行或者服务务的文件 (像像.php和和.htmll文件)对于于Web服务务器的用户应应该是不可写写的。这意味
53、味着Apacche或者NNginx用用户不应该拥拥有Web目目录的写权限限。有很多方方 法都可以以做到这一点点,而最简单单的就是将这这些文件为其其他用户所有有,然后让AApachee/Nginnx等用户归归属于能够使使用640权权限读取文件件的组中。这这会防范 几几乎所有的黑黑客和针对页页面的攻击。此 外,永远不不要使用Fttp来上传文文件,特别 是在公用的的Wi-Fii环境中,因因为在其中黑黑客很容易盗盗取用户名和和密码。取而而代之的是使使用Sftpp会更加安全全。另外,每每个雇员都应应该拥有自己己的用户IDD和随 机密密码。使用标准的路径径和安装配置置一个令人讨厌的的部署问题是是,开发者很
54、很少考虑 他他们的软件会会被部署到生生产Web服服务器的什么么位置,以及及如何部署。我我们看到过许许多大型的系系统将它们的的PHP代码码部署在/hhome/xxiaofeeng或者 /web/code路路径下。事实实上,这两个个路径都是非非常不标准的的,并且会带带来操作和安安全性的问题题。当这些系系统从开发环环境转移到测测试环境再到到生产环境中中时, 因为为每个安装配配置都是非标标准的,所以以经常会出现现问题,这时时就需要开发发者调整才能能够正常工作作。你应该总是使用用标准的安装装包和二进制制文件来 安安装像Apaache之类类的服务器。不不要从源代码码编译或者安安装Tarbball,因因为这
55、会导致致长期稳定性性和管理上的的问题,另外外在服务器上上安装多个不不同的版本也也 会造成混混淆。Web 站点应应该总是在指指定的平台和和 Linuux发布的标标准路径下进进行测试和部部署 ,像 RedHaat 或者CCentOSS下的/vaar/wwww/htmll路径。这有有助于对系统统进行有效的的权限管 理理、备份、配配置、监控以以及其他操作作。Web 服务器器的日志应该该存放在/vvar /llogs或者者/var/logs/app_nname下,而而不应该位于于主代码区域域。这样做的的原因不仅仅仅是因为这些些标准的路径径很重要,更更应该关注的的是,恰当 地配置服务务器会将/vvar配置
56、为为分离的文件件系统。如果果应用程序突突然写入了大大量日志并占占用所有磁盘盘空间,由于于我们做了以以上的配置就就不会导致系系统崩溃,或或者其 他严严重的问题。如如果日志位于于其他位置,就就可能会产生生问题。总是使用日志在Web系统中中做多少日志志都不为过。所所有系 统都都应该将重要要的数据写入入到日志中,不不管是它们自自己的日志还还是系统的SSyslogg。Cronn的Job以以及其他Shhell脚本本或者C语言言的程序,对对日志都有 相应标准以以及简单的函函数。在Shhell脚本本中,只需要要使用 Loogger命命令就可以实实现日志的写写入。在脚本本启动/停止止、重要的脚脚本执行以及及实时
57、数据产产生的 情况况下都要执行行写入日志操操作。这样出出现问题的时时候,查看主主要的系统日日志就可以很很容易地看到到发生了什么么。大型系统经常会会使用专门的的工具如 LLocal55来记录日志志,并配置SSyslogg或者Sysslog-nng来将其存存放在单独的的文件中,这这样会更容易易使用。需要要注意的是,SSyslogg工具和 LLoggerr(以及任何何Sysloog调用)默默认优先使用用user.noticce,如有必必要,你可以以对其进行调调整。一个好的系统会会对程序进行行配置,用来来打开或 者者关闭日志,并并可以选择在在每模块或者者功能的级别别上应用不同同级别的日志志。这使得我我
58、们可以记录录非常详细和和强大的日志志,用来分析析和调试在生生产操作中所所发生的问 题。大型高性能网站站的十项规则则 使用良好的数据据库设计和SSQL在任何系统中,数数据库通常是是最大的性能能瓶 颈。而而影响数据库库性能的最大大两个问题是是数据库设计计和SQL代代码质量。很很多系统都拥拥有良好的或或者至少是可可用的数据库库设计,但由由于没有经过过适当的性能能测 试,SSQL代码质质量通常都会会很差。这样样的SQL代代码在开发环环境中可能运运行很快,因因为其中只有有小数据集和和最小的负载载。但是当成成千上万的用用户同时读取取数据库中 上百万条记记录的时候,它它就很可能会会崩溃。不幸的 是,这这些问
59、题一开开始并不明显显,直到系 统增大、突突然开始崩溃溃的时候才会会显现出来。在在增大的过程程中,数据库库系统看起来来运行得很快快(因为数据据都位于内存存中,而且很很少有并发的的查询),并并且对用户的的响 应也很很快,但实际际上它的内部部运行效率很很低。这并不不重要,我们们关注的是在在系统增大并并遇到性能问问题之前找到到这些问题并并加以解决。关于这个问题有有很多不错的的书和站点进进行了解 析析,其中的关关键工具包括括慢查询日志志、INNOODB状态系系统,以及描描述当前性能能的MySQQL统计信息息。我们见到到过很多系统统每秒会读取取500,0000条数据据, 这是出出现SQL问问题的明显预预兆,但公司司往往对其一一无所知直到到服务器开始始崩溃。MySQL系统统应该对所有有数据使用 INNODDB存储引擎擎,因为INN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力调度自动化维护员练习题含答案
- 安全生产责任险投保及理赔方案
- 农田灌溉渠系衬砌施工方案
- 2026年交通安全文明出行知识竞赛试题及答案
- 2026学年浙江省义乌市一年级语文期末高分黑金提分题(附答案)详细答案和解析
- OSSLT完整模拟考试题及详细答案解析
- OpenGL 高频面试题及详细答案(实战向)
- 货运车辆动态监控24小时值守方案
- 医疗纠纷预防前置管理中国专家共识(2026版)
- 保险代理从业人员资格考试模拟试题及解析
- 郑州宇通客车股份公司供应商管理手册
- GB/T 26071-2026太阳能电池用硅单晶及硅单晶片
- 《中国教育史》孙培青1
- 学堂在线 人工智能 章节测试答案
- 草原有害生物防治项目施工方案
- 透析患者病历汇报
- 退婚彩礼退还协议书
- 皮肤性病学 银屑病教案学习资料
- 《面神经炎》课件
- 互联网骨干直联点监测系统项目需求
- 社群健康助理员技能竞赛理论参考试题库(含答案)
评论
0/150
提交评论