所谓网站的伸缩性是指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力。
大型网站的“大型”,在用户层面可以理解为大量用户及大量访问,如Facebook有超过10亿用户;
在功能方面可以理解为功能庞杂、产品众多,如腾讯有超过1600种产品;
在技术方面可以理解为网站需要部署大量的服务器,如Google有近100万台服务器。
大型网站不是一开始就是大型网站的,而是从小型网站逐步演化而来,Google诞生的时候也只有一台服务器。
设计一个大型网站和设计一个大型软件系统,和将一个小网站逐渐演化成一个大网站,其技术方案是完全不同的。
前者如银行系统在设计之初就决定了银行的规模,如要服务的用户数,要处理的交易数等,
然后采购大型计算机等昂贵的设备,将软件系统部署在上面,即成为一个大型系统,
如果有一天这个系统不能满足需要求,那就打造一个更大规模的系统。
而网站不可能一开始就规划出自己的规模,也不可能有如此多的资金去开发一个大型系统,
更不可能到了某个阶段再重新打造一个系统,只能摸着石头过河,从一台廉价的PC服务器开始自己的大型系统演化之路。
在这个渐进式的演化过程中,最重要的技术手段就是使用服务器集群,通过不断的向集群中添加服务器来增强整个集群的处理能力。
这就是网站系统的伸缩性架构,只要技术上能做到向集群中加入服务器的数量和集群的处理能力呈线性关系,
那么网站就可以以此手段不断的提升自己的规模,从一个服务十几人的小网站到服务几亿人的大网站。
这个演化过程整体来说是渐进式的,而且总是在“伸”,也就是说网站的规模和服务器的规模总是在不断的扩大。
但是这个过程中也可能因为运营上的需要而出现脉冲,比如说一个电商网站在进行促销活动时,
网站的访问量和交易量爆炸增长,之后又回到正常状态。
这时就需要网站的技术架构有极好的伸缩性,活动开始时增加服务器满足需求,活动结束时将服务器顺利下线。
后面我们会从应用服务器集群的伸缩性设计、分布式缓存集群的伸缩性设计、数据存储服务器的伸缩性设计这个单个方面来说明。