垂直扩展&水平扩展,如何选择?

系统
本文分析了垂直扩展和水平扩展以及他们的优缺点和使用场景,垂直扩展更加关注的是机器硬件配置的提升,而水平扩展关注更多的是机器数量,在系统设计中,这是最常见的 2种扩展方式。

在系统设计时,我们需要预估系统的容量,但是,随着系统流量的增大,我们会通过扩容来应对流量,常见的扩容方式是垂直扩展和水平扩展,因此,这本文章,我们将深入探讨这两种扩展策略的优缺点以及该如何选择?

一、垂直扩展

1.定义

垂直扩展(Vertical Scaling),也称为纵向扩展或向上扩展(Scale Up),是指通过增加单个服务器的资源来提高系统性能和处理能力。具体来说,垂直扩展涉及到增加服务器的 CPU、内存、存储等硬件资源,使其能够处理更多的负载和更高的工作量。

如下图,展示了 CPU、内存、存储的扩展:

  • 升级 CPU:将服务器的处理器更换为功能更强大的处理器。
  • 增加 RAM:添加更多内存以处理更大的数据集并减少对较慢存储的依赖。
  • 增强存储:切换到更快的存储(如 SSD)或增加整体存储容量。

比如:CPU: 4核 内存: 16GB 存储: 500GB 升级成 CPU: 16核 内存: 64GB 存储: 2TB

2.优点

垂直扩展的优点主要包含以下几点:

  • 简单:垂直扩展的实现相对简单,因为它不需要更改应用程序体系结构。
  • 更低的延迟:由于所有资源都位于一台机器上,因此垂直扩展可以消除对服务器间通信的需求,从而降低延迟。
  • 降低软件成本:在初始阶段,垂直扩展可能比水平扩展更具成本效益,尤其是在处理需求适度增长时。
  • 无需重大代码更改:通常几乎不需要对应用程序的代码库进行调整。

3.缺点

垂直扩展的缺点主要包含以下几点:

  • 硬件限制:单台服务器的硬件资源有上限,最终会达到物理扩展的极限。
  • 单点故障:由于所有资源都在一台服务器上,任何硬件故障都可能使整个系统瘫痪。
  • 停机时间:升级硬件通常需要使服务器脱机,这可能是一个明显的缺点。
  • 成本增加:随着规模的扩展,具有强大 CPU和大量 RAM的高端服务器可能会变得非常昂贵。

二、水平扩展

1.定义

水平扩展(Horizontal Scaling),也称为横向扩展或向外扩展(Scale Out),是指通过增加更多的服务器或节点来提高系统性能和处理能力,而不是通过增加单个服务器的硬件资源来提升性能。水平扩展通常用于分布式系统和云计算环境中,通过增加服务器数量来分散负载,从而提高系统的整体处理能力和可靠性。

如下图,展示了水平扩展:

2.优点

水平扩展的优点主要包含以下几点:

  • 近乎无限的可扩展性:只要您的架构支持,您就可以继续添加节点,从而能够处理更大的负载。
  • 改进的容错能力:一个节点的故障不会导致整个系统瘫痪,从而最大限度地减少停机时间。
  • 成本效益:水平扩展可能更具成本效益,因为它使用商用硬件而不是昂贵的高端服务器。

3.缺点

水平扩展的缺点主要包含以下几点:

  • 复杂性:将应用程序分布在多个服务器上会带来数据一致性、负载平衡和服务器间通信方面的复杂性。
  • 延迟增加:与单台计算机相比,服务器之间的通信可能会引入额外的延迟。
  • 成本:由于基础设施的复杂性,初始设置和维护成本可能会更高。
  • 应用程序兼容性:应用程序的代码可能需要调整才能在分布式环境中有效工作。

三、如何选择?

1.考虑因素

在垂直扩展和水平扩展之间做出选择时,我们通常需要考虑以下事项:

  • 成本:分析初始硬件成本与长期运营费用。
  • 工作负载:分析应用程序是受 CPU限制、内存受限,还是其他因素限制?
  • 复杂性:在进行扩展时,需要考虑扩展的复杂度,是否牵涉到应用程序代码的改动等?
  • 未来增长:扩展预计会达到多大的规模?

2.何时选择垂直扩展

一般来说,垂直扩展非常适合以下方案:

  • 有限的可扩展性:增长预测有限的中小型应用程序,您的需求可以通过硬件升级轻松满足。
  • 遗留应用程序:当组件之间存在紧密耦合时,很难在多个服务器之间分发。
  • 低延迟:当低延迟是一项关键要求,并且服务器间通信开销是不可接受的。
  • 成本敏感型项目:当预算不允许复杂的基础设施,并且横向扩展的成本超过收益时,例如在昂贵的软件许可证的情况下。

3.何时选择水平扩展

一般来说,水平扩展非常适合以下情况:

  • 快速增长:当经历快速增长并需要处理不断增长的流量的能力时。
  • 高可用性需求:当应用程序需要高可用性和节点故障复原能力时。
  • 易于分发:当应用程序可以轻松地分布在多个服务器上而无需进行重大修改时。
  • 微服务体系结构:当应用程序围绕微服务进行设计时,微服务自然适合水平扩展。
  • 成本效益:当成本效益是优先事项时,首选使用商品硬件。

四、总结

本文分析了垂直扩展和水平扩展以及他们的优缺点和使用场景,垂直扩展更加关注的是机器硬件配置的提升,而水平扩展关注更多的是机器数量,在系统设计中,这是最常见的 2种扩展方式。

垂直扩展和水平扩展,如何选择?在很大程度上取决于应用程序的特定需求、预期的增长规模、预算以及正常运行时间对业务的重要性,不过,在实际情况下,通常都会使用两者的组合来优化系统性能和成本效益。

通过本文,我们需要掌握在系统流量增加时,如何通过扩展来应对流量,同时也需要掌握在系统流量不高时,如何动态缩减以减少成本。

责任编辑:赵宁宁 来源: 猿java
相关推荐

2018-01-12 15:17:40

数据库水平分库数据迁移

2017-11-09 13:56:46

数据库MongoDB水平扩展

2015-03-23 16:32:20

2022-10-08 14:44:01

VSCode开源

2022-07-01 17:57:45

KubernetesAPI

2020-11-18 09:39:02

MySQL数据库SQL

2023-01-06 08:06:52

Groovy类型扩展

2011-12-26 10:49:27

JavaJUnitRunner

2009-08-27 18:04:01

c#扩展方法string

2017-09-15 08:22:17

磁盘备份设备

2016-07-06 11:13:02

云计算

2023-09-07 13:01:24

Java计算

2023-01-05 08:09:27

GroovyDSL​

2020-07-30 17:59:34

分库分表SQL数据库

2024-08-07 08:14:26

2010-06-30 17:15:39

向外扩展SQL Ser

2009-08-31 14:45:10

C#扩展方法

2009-03-16 09:16:13

行为扩展WCF.NET

2021-05-06 09:33:32

OperatorKubernetes开源

2009-07-24 16:15:00

扩展ASP.NET G
点赞
收藏

51CTO技术栈公众号