Web 服务器的种类多种多样,本文提到的 Web 服务器都是通常意义上的 HTTP 服务器。高并发 Web 服务器的发展历程也是普通网站逐渐发展成大型网站的架构演变史。从构架的角度可以把 Web 服务器的发展分为几个阶段。
第一阶段
分离 Web 服务器和数据库。托管 Web 服务器之后,随着用户使用量的增加,系统的压力会越来越高,同时响应速度会越来越慢,这时 Web 服务器和数据库都很容易出问题,两者之间相互影响。为了提高系统的性能,把 Web 服务器和数据库从物理上分离,架设在不同的机器上,如图 1.1。
第二阶段
增加页面缓存和页面片段缓存。随着用户增多,访问数据库的操作太多,服务器响应速度又开始变慢了,于是开始做相对静态的页面的缓存,采用的是前端页面缓存技术,这样就能够在不用修改过多程序的情况下,减少对 Web 服务器的压力以及减少数据库连接资源的竞争。再接着就要做动态页面中相对静态的片段部分的缓存,即利用页面片段缓存技术,如图 1.2。
第三阶段
数据缓存。进行页面缓存之后如果仍不能解决数据库瓶颈问题,可能会发现系统中重复获取数据信息的地方,这时开始将这些数据缓存到本地内存,如图1.3。
第四阶段
增加 Web 服务器和数据库。数据库瓶颈解决后系统性能提高了,但是用户数量还会增加,单台服务器已经不能满足要求了,这时可以考虑增加 Web 服务器的数量,即采用 Web 服务器集群技术和负载均衡方案。接着可以注意系统的数据存储量,最简单的解决方案是增加数据库的数量,然后对增加的数据库进行数据库集群。许多大型网站都有自己的数据存储方式建立数据中心,如图 1.4。
第五阶段
分表、数据访问层和分布式缓存。接下来可以按照数据库集群的方案做分表工作。例如 eBay 服务器架构的数据访问层就增加了一个框架,从而实现了对分库分表的数据访问处理。当然这个框架可以等到分库分表完成后再搭建。在这个阶 段,数据量会增加很多,数据无法直接缓存在本地,于是这时只能采用分布式缓存方案,使用分布式缓存存储大量的数据缓存,如图 1.5。
第六阶段
继续增加 Web 服务器、进行数据读写分离和廉价存储。网站用户量继续增加时,可以不断增加 Web 服务器应对。如果不考虑增加硬件设备,就要从软件上优化服务器架构,如对系统做逻辑上的分类,进行负载集群。如果服务器集群中的主机数量过多导致数据库资源匮乏,通常会考虑数据读写分离的方案,同时选择一些更廉价的存储方案,例如 Google 设计的分布式数据存储系统 BigTable,如图 1.6。
第七阶段
大型分布式应用和廉价服务器群。完成以上升级后,Web 服务器会非常多,服务器架构开发部署时会进行一些重复性的工作,为了减少部署和维护的麻烦,需要将服务器框架根据各自功能进行细化,这样就完成了一个大型的分布式应用。这时服务器架构已经相对稳定了,下面可以再结合扩充主机数量和各种优化方法来处理高请求量和数据量问题,如图 1.7。
总结
大型高并发 Web 系统构架的演变主要有两个方向:一是充分利用内存缓存,如增加前端页面缓存、页面片段缓存和增加数据缓存等,迅速发展的内存数据库技术也把 对数据的处理逐渐从磁盘转向内存;二是增加硬件设备,从一台服务器到服务器集群、从一台数据库到建立数据中心,如何管理和维护这些设备成为提高服务器性能的关键。
参考文献
[1]杨小娇. 轻量级高并发Web服务器的研究与实现[D].南京邮电大学,2014.