天才教育网合作机构 > 培训机构 >

广州电脑操作培训网

欢迎您!
朋友圈

400-850-8622

全国统一学习专线 9:00-21:00

位置:培训资讯 > Internet-也谈大型高负载的网站的体系结构

Internet-也谈大型高负载的网站的体系结构

日期:2009-12-24 17:07:10     浏览:146    来源:广州电脑操作培训网
  Q:也谈大型高负载的网站的体系结构
  A:从事发布系统(web publish system)的研究和开发快两年了,从小型应用到中型应用,基本上没有参与大型应用(千万pv/day)的部署,网络上这种技术的探讨都不是特别全面,有的提及发布系统对分布式部署,以及海量负载,有的干脆只从网络层面进行讲解,我感觉这是个系统工程,不仅要考虑到应用层面(user layer or app layer),也要考虑到系统层面(kernel layer or system layer),还要考虑到数据库层面(database layer),否则可能有失偏颇。

    我现在从三个层面就我的理解说一些我的一些看法,碍于知识和实践的局限性,也会相当有限。

    所谓应用层面指的是前端应用,因为对网站来说,网友接触最多的就是前端页面,影响负载的很大程度上也是每天上千万的page view带来的visit,对web1.0的网站来说,前端页面往往都是静态化的,即html化的,这也是为了降低负载,因为web应用服务器解析html页面的速度是最快的,而页面的静态化一般都是由web级的(主要)和桌面局域网级别的(很少)发布平台发布的,基于分布式的考虑,发布系统*能够分发产生的html页,分发到光纤或者高速局域网中的不同host上,以便分散访问压力。当然也可以使用系统层的同步工具完成这个工作,注意要对页面的域名对应信息进行保存,防止产生404 error。我个人比较喜欢系统层的网络同步,速度比较快,稳定性也比较高。应用层的分发一般借助ftp的方式,速度不是特别快,容易产生拥塞,稳定性自然下降。

    如果分布式的分发静态页面仍然存在瓶颈,怎么办?国内大型的门户网站往往采取可缓存的反向代理方式部署的负载均衡技术来解决,一般都是squid做前端cache和反向代理。负载均衡也有软件级的(dns 轮询)负载均衡和硬件上的负载均衡甚至两者的结合进行实现,具体实施细则将在下一篇中进行阐述。说到静态化,也不只是web1.0的传统新闻门户采用,web2.0的应用前端也可静态化,或者部分静态化,比如:社区型门户,帖子就可以静态化,可以采取即时静态或者异步静态的方式,也可以触发静态化。这种静态化可以降低数据库层的压力,数据库服务器如果始终工作在大负载的访问压力下,很容易崩溃,尽可能的将经常用到的数据静态化,缓存起来会极大的降低压力。(猫扑、网易、搜狐等社区都是采用的这种方式)

    上文提到了静态化能减轻数据库服务器的压力,可是却影响了更新的即时性,有些应用需要数据的即时显示,不允许缓存或者静态化,这就需要对数据库服务器的结构进行合理部署。除了要在设计应用之初,很好的设计数据库结构,使用好的模式之外,还要对数据库服务器进行分布式部署甚至库表散列。在数据库集群(database culuster)方面,很多数据库都有不错的解决方案,包括Oracle、Sybase甚至mysql,只不过mysql采用的是master+slave的结构,选用了何种数据库,就参照相应的解决方案进行部署。除了在数据库选择上进行负载均衡之外,也可以在单数据库本身进行考虑,比如库表的散列,根据应用的特点,将大的、影响性能的数据库或者数据库的单表进行散列、拆分。比如:按用户id进行散列,按分类进行散列,或者按地区进行散列。

    说到系统层,可能就是OS和Web Server了,大型应用的OS基本都是Unix(包括freebsd或者HP Unix等)或者类Unix(各种linux版本,redhat居多),这不是说Microsoft的OS就不合理了,合理的应用也可部署大型应用,只不过效能会很受限制。Web Server层面,还是apache当家,尤其是静态页和图片,当然也可以根据具体的需求,根据内容的特殊性选择Lighttpd(比较适合做纯静态、图片服务器、视频服务器等)、甚至iis(windows下用的居多),系统层的web服务器的配置还是很有讲究的,比如对cache的配置,反向代理的配置等。比较好的web加速和代理服务器有:Squid、Nginx、HAProxy、Lighttpd,这四个可能是用的比较多的了。其中业内比较出名的Flickr、tudou用的是lighttpd,sina和51.com使用了,至少部分使用了Nginx。

    缓存系统对高负载的重要性是不言而喻的,前面提到的静态化,需要进行有效缓存,经常用到的查询和结果需要进行缓存,只要设定好更新缓存的规则,对性能的提升是n个数量级的。Linux下,有内存级别的缓存,高速缓存,很多应用都是用tmpfs来进行数据中转,php上用的最多的是memcached,apache有文件系统级别的cache,squid也是做前端cache的主要手段。腾讯、网易等都是用了squid做前端cache server。

    前面提到的负载均衡,有软件级别的,比如LVS、HAProxy、Linux-HA项目等,硬件层面的诸如:f5的BigIp、3DNS,alton的解决方案,北电的方案等,都是比较成熟的,不过都需要付出相当可观的¥。
如果本页不是您要找的课程,您也可以百度查找一下:
相关文章