上QQ阅读APP看书,第一时间看更新
3.1 可伸缩性和弹性
可伸缩性一直以来都是设计解决方案时的主要考虑因素。当你向一个企业了解其现有解决方案和新的设计时,大多数时候它们都会在可伸缩性方面提前做好规划。可伸缩性意味着系统能够处理不断增长的工作负载,并且可以应用于架构的不同层次,例如应用服务器、Web应用程序和数据库。
由于当今主流的应用程序都是基于Web的,因此我们先来探讨弹性。弹性并不仅仅意味着通过增加更多的功能来扩展系统,同时还涉及缩减系统功能以节省成本。尤其是随着公有云的采用,企业可以轻松快速地增加和减少工作负载,因此弹性正在取代“可伸缩性”一词。
传统的伸缩模式分为以下两种:
□水平伸缩:在过去的十年中,随着计算机产品价格的指数级下降,水平伸缩变得越来越流行。在这种模式下,团队通过添加更多实例来处理不断增加的工作负载。
如图3-1所示,假设应用程序有2个实例,每秒能够处理1000个请求。随着用户群的增长,应用程序开始每秒接收2000个请求,这意味着要将应用程序的实例数增加一倍,即增加到4个,以处理增加的工作负载。
图3-1 水平伸缩
图3-2 垂直伸缩
□垂直伸缩:垂直伸缩已经存在很长时间了。在这种模式下,团队可以为同一实例添加额外的计算存储和内存能力,以处理不断增加的工作负载。如图3-2所示,通过垂直伸缩,可以获得更大的实例,而不是添加更多新实例来处理增加的工作负载。
垂直伸缩模型可能不具备成本效益。当购买具有更多计算和内存容量的硬件时,成本也将成倍地增加。除非必要,否则要避免在达到某个阈值后进行垂直伸缩。垂直伸缩最常用于扩展关系数据库服务器。尽管如此,仍然需要考虑数据库分片。当单个服务器的性能达到了垂直伸缩的极限,额外的计算和内存容量也不能让它的性能得到提升。