摘要:文章研究了大型并发高负载网站的系统架构及服务器优化问题中的一些关键问题,具体包括服务器整体性能考虑、Socket优化、硬盘级缓存等,对于这些问题,我们给出了相应低成本的一些解决方案。
关键词:大型网站架构;服务器优化;高负载网站
中图分类号:TP315文献标识码:A
文章编号:1674-1145(2009)11-0143-02
一、概述
一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。
大型网站,比如甘肃联合大学网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。下面我们从小成本的角度考虑服务器优化措施,本文重点考虑大型高并发高负载网站的系统架构中的关键技术——服务器优化。
二、服务器优化
(一)服务器整体性能考虑
对于价值昂贵的服务器来说,怎样配置才能发挥它的最大功效,又不至于影响正常的服务,这是在设计网站架构的时候必须要考虑的。常见的影响服务器的处理速度的因素有:网络连接,硬盘读写,内存空间,CPU速度。如果服务器的某一个部件满负荷运转仍然低于需要,而其他部件仍有能力剩余,我们将之称为性能瓶颈。服务器想要发挥最大的功效,关键的是消除瓶颈,让所有的部件都被充分地利用起来。
(二)Socket优化
以标准的GNU/Linux 为例。GNU/Linux 发行版试图对各种部署情况都进行优化,这意味着对具体服务器的执行环境来说,标准的发行版可能并不是最优化的。GNU/Linux 提供了很多可调节的内核参数,可以使用这些参数为服务器进行动态配置,包括影响Socket 性能的一些重要的选项。这些选项包含在 /proc 虚拟文件系统中。这个文件系统中的每个文件都表示一个或多个参数,它们可以通过cat 工具进行读取,或使用echo 命令进行修改。
(三)硬盘级缓存
硬盘级别的缓存是指将需要动态生成的内容暂时缓存在硬盘上,在一个可接受的延迟时间范围内,同样的请求不再动态生成,以达到节约系统资源,提高网站承受能力的目的。Linux环境下硬盘级缓存一般使用Squid。
Squid是一个高性能的代理缓存服务器。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。它接受来自客户端对目标对象的请求并适当地处理这些请求。比如说,用户通过浏览器想下载(即浏览)一个web页面,浏览器请求Squid为它取得这个页面。Squid随之连接到页面所在的原始服务器并向服务器发出取得该页面的请求。取得页面后,Squid再将页面返回给用户端浏览器,并且同时在Squid本地缓存目录里保存一份副本。当下一次有用户需要同一页面时,Squid可以简单地从缓存中读取它的副本,直接返回给用户,而不用再次请求原始服务器。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。
Squid 运行的时候,默认会在硬盘上建两层hash目录,用来存储缓存的Object。它还会在内存中建立一个Hash Table,用来记录硬盘中Object分布的情况。如果Squid配置成为一个Squid集群中的一个的话,它还会建立一个Digest Table(摘要表),用来存储其他Squid 上的Object摘要。当用户端想要的资料本地硬盘上没有时,可以很快地知道应该去集群中的哪一台机器获得。在硬盘空间快要达到配置限额的时候,可以配置使用某种策略(默认使用LRU:Least Recently Used最近最少用)删除一些Object,从而腾出空间。
默认配置的Squid,没有经过任何优化的时候,一般可以达到50% 的命中率。如果需要,还可以通过参数优化,拆分业务,优化文件系统等办法,使得Squid达到90% 以上的缓存命中率。Squid处理TCP连接消耗的服务器资源比真正的HTTP服务器要小得多,当Squid分担了大部分连接,网站的承压能力就大大增强了。
(四)内存级缓存
内存级别的缓存是指将需要动态生成的内容暂时缓存在内存里,在一个可接受的延迟时间范围内,同样的请求不再动态生成,而是直接从内存中读取。Linux环境下内存级缓存Memcached是一个不错的选择。
(五)CPU与IO均衡
在一个网站提供的所有功能中,有的功能可能需要消耗大量的服务器端IO资源,像下载,视频播放等,而有的功能则可能需要消耗大量的服务器CPU资源,像视频格式转换,LOG统计等。在一个服务器集群中,当我们发现某些机器上CPU和IO的利用率相差很大的时候,例如CPU负载很高而IO负责很低,我们可以考虑将该服务器上的某些耗CPU资源的进程换成耗IO的进程,以达到均衡的目的。均衡每一台机器的CPU和IO消耗,不仅可以获得更充分的服务器资源利用,而且还能够支持暂时的过载,遇到突发事件,访问流量剧增的时候,实现得体的性能下降(Graceful performance degradation),而不是立即崩溃。如果有必要,可以通过选择文件系统,以及修改文件系统的配置参数来达到对特定文件的读或写的效率最大化。
三、结语
本文对大型高并发高负载网站的服务器优化进行了详细的研究。对于一个高并发高流量的网站来说,任何一个环节的瓶颈都会造成网站性能的下降,影响用户体验,进而造成巨大的经济损失。大型网站的架构是一个非常有挑战性的工作,本文中,我们列举了服务器部分优化方案,然而更全面的考虑是需要的。因而,这个领域需要更多的研究。
参考文献
[1]Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides,李英军等(译).设计模式:可复用面向对象软件的基础[M].机械工业出版社,2004.
[2]Alan Shalloway,James R.Trott,徐言声译.设计模式解析[M].人民邮电出版社,2006.
[3]白金鹏,谢晓竹.WINDOWS NT通用网站架构实例[M].国防工业出版社,2002.
作者简介:赵中锋(1979- ),男,甘肃白银人,甘肃联合大学国资与后勤管理处助工,研究方向:资产管理及设备管理。