1.3.1 可扩展性
云原生应用是可扩展的,这意味着如果提供额外的资源,它们能够支持增加工作负载。根据这些额外资源的特点,我们可以将其划分为垂直可扩展性和水平可扩展性。
■ 垂直可扩展性:垂直扩展,或者称为向上/向下扩展,意味着在计算节点添加/移除硬件资源,如CPU或内存。这种方式是有限制的,因为我们不能无限地增加硬件资源。另外,应用不需要按照特定的方式进行设计,就能实现向上或向下扩展。
■ 水平可扩展性:水平扩展,或者称为向外/向内扩展,意味着向系统中添加或移除计算节点或容器。这种方式没有垂直扩展那样的限制,但它需要应用具有可扩展性。
传统系统在面临工作负载增加的时候通常会采用垂直可扩展方式。对于要支持更多用户的应用来说,添加CPU和内存是一种常见的方式,不需要针对可扩展性进行重新设计。在特定的场景中,这依然是一个很好的选择,但是对于云环境来说,我们需要一些其他东西。
在云中,所有的内容都是动态和不断变化的,水平可扩展是首选方案。借助云计算模型所提供的抽象等级,为应用补充新的实例是非常简单的,而不应该为已经处于运行状态的机器增加计算能力。因为云是有弹性的,我们可以在很短的时间内动态地扩展和收缩应用的实例。我之前已经讨论过,弹性是云的主要特征之一:计算资源可以根据需要主动提供和释放。可扩展性是实现弹性的先决条件。
图1.5展示了垂直可扩展性和水平可扩展性之间的差异。在垂直可扩展性中,我们通过向现有的虚拟机添加更多的资源来进行扩展。在水平可扩展性中,我们添加了另外一个虚拟机,它会帮助现有的虚拟机处理额外的工作负载。
图1.5 当需要支持不断增加的工作负载时,垂直可扩展性模型会向计算节点中增加硬件资源,
而水平可扩展性模型则会增加更多的计算节点
当讨论Kubernetes的时候,你将会看到,平台(可以是CaaS、PaaS或其他类型的平台)会根据上文所述的定义动态地扩展和收缩应用。作为开发人员,你有责任设计可扩展的应用。可扩展性的最大障碍是应用的状态,这将决定应用最终是有状态的还是无状态的。在本书中,我将介绍构建无状态应用的技术,并让它们没有任何问题地进行扩展。除此之外,我将会展示如何将应用的状态从Spring推送到像PostgreSQL和Redis这样的数据存储中。