可伸缩性:通过增加(减少)系统成本来处理增加(或减少)的工作负载的系统属性。
以下是一些可能类型:
- 应用程序的可伸缩性
- 数据可伸缩性
- 基础设施的可伸缩性
评估系统是否具有可伸缩性:
- 系统是否能够应对超出预期100%的意外交易量增长?
- 即使系统不能扩展,它失败时能优雅降级吗?
- 该系统是否能够在不进行任何重大的架构变更的情况下,支持初始客户之外的大量客户呢?
- 如果有必要,团队是否能够以合理的成本快速地添加计算资源?
软件架构师和工程师通常根据垂直可伸缩性和水平可伸缩性来评估系统响应工作负载增加的能力。
-
垂直可伸缩性,通过让应用程序运行在更大、更强的基础设施资源上来应对容量的增加。
-
水平可伸缩性,通过将应用程序分布到多个计算节点来扩展应用程序。目前容器和基于云 的数据库提供了具有额外灵活性的新替代方法:
- 最简单的选择包括通过某种分区来隔离传入流量,通过工作负载的特征,或通过分组;
- 克隆计算服务器和复制数据库。传入的流量通过负载均衡器分布在各个服务器上。这种方法仍存在与数据相关的挑战。所有数据更新通常是对其中一个数据库(主数据库)进行的,然后使用数据复制机制级联到所有其它的数据库。
- 将应用程序的功能拆分成服务,并在独立的基础设施资源集(如容器)上分发服务及其相关数据。这对于领域驱动设计方法是有效的。因为它是基于一组围绕业务领域组织的服务,且数据与服务相关联。