互联网产品的一个特点是开始的时候规模都很小, 几个人的小团队,少量的启动资金,就开始运营了

刚开始的时候,用户也少,所以只要一台服务器就可以应付所有的用户访问,这时整个系统(数据库、Web应用、文件服务)都部署在一台服务器上


构建可伸缩的Web架构_java
如果产品很受用户欢迎,就会有更多用户来访问网站。这时,系统受计算资源不足影响,会出现响应延迟,或者打不开网站等情况

解决方法有两种,一种方法是使用更强大计算能力的计算机,另一种方法是使用更多的计算机

第一种方法的成本不是一般公司能承受的,所以几乎所有的互联网公司都选择了第二种方法,即构建一个弹性可伸缩的Web系统,通过逐步向系统中增加服务器从而提高整个系统的计算处理能力

增加服务器的一个基本方法是将不同的服务部署在不同的服务器上,应用服务器,数据库服务器,文件服务器独立部署


构建可伸缩的Web架构_java_02
此外,还可以将不同的模块拆分到不同的服务器,对业务逻辑比较独立的模块进行独立部署


构建可伸缩的Web架构_java_03
随着业务不断发展,网站需要使用更多的服务,缓存、消息队列、搜索、NoSQL、反向代理等,还需要将静态内容服务从应用服务器中分离出来,以及使用CDN(内容分发网络)进行静态内容访问加速,这些服务都应该部署在独立的服务器上,通过使用更多的服务器提高网站的整体处理能力

这些可以分拆的功能和服务虽然已经独立部署,但是每个功能或者服务如果只能部署在一台服务器上,能够提供的计算能力以及能够处理的并发访问依然有限

解决方法是通过集群的方式将单一服务部署在多台服务器上,从而提供更强大的处理能力


构建可伸缩的Web架构_java_04
总之,可伸缩网站架构的核心思路就是通过分拆集群等手段向Web系统中添加各种服务器,为系统提供更多计算、存储、传输能力,这些服务器能有效分担系统访问压力,使Web系统能够支撑更多用户访问、存储更多数据而不至于影响用户体验