对互联网云服务而言,访问量和数据量随时都可能呈几何级增长,在架构设计中,需要考虑以最简单的方式来应对这些变化,这就是高伸缩性。表3-7所示为垂直扩展与水平扩展两种扩展方式的比较。
表3-7 垂直扩展与水平扩展的比较
由于云服务扩张较企业服务要快,在架构时,尽量坚持“无状态”和“就地失败”原则,只有这样,才能适应系统伸缩性的要求。
架构的另一个原则是针对系统瓶颈,在设计时就要有针对性地设计,如Web层采用Apache集群,集群能力取决于负载均衡器能力,加入采用LVS,可以支持百万人访问,这是系统集群的最大能力,在架构时,要考虑在能力不足时,采用多个Linux虚拟服务器(LVS)一起工作的模式,如采用域名系统(DNS)将不同区域访问指向不同的LVS地址,一般认为可以将系统能力扩展到无限制。
因此,在高伸缩性设计时首先要遵守云计算访问设计基本准则,还要识别系统性能瓶颈点,有针对性地进行设计,确保在系统用户急剧增加时能够快速增加部署,确保业务稳定及性能。
水平伸缩存在无限扩展的可能,为了支撑大的访问量,目前大型的互联网服务在架构设计上做了很多努力,实现了在系统用量增加的情况下,仅需增加硬件设备,无须调整架构。
为了做到水平伸缩,应用应该是无状态的,架构设计上通常将有状态的信息集中存入缓存或者数据库中,业界也称为SNA(Share Nothing Architecture)架构。比较常用的方案是分布式缓存,比如开源的Memcached方案。
访问量的增加会提升对数据库的访问频率,而数据量的增加会直接导致数据库读写性能的下降,互联网服务瓶颈很大一部分来自数据库。垂直伸缩能起到一定的缓解作用。通过增加机器,进行水平扩展,能有效地提升数据库读写数据的能力。表3-8所示为几种常用数据库扩展方式的比较。
表3-8 几种常用数据库扩展方式的比较