Comparthing Logo
云计算可扩展性基础设施DevOps建筑学表现

水平缩放与垂直缩放

水平扩展通过增加机器数量来分散工作负载,而垂直扩展则提升现有服务器的性能。两种方法都能解决性能瓶颈,但在架构、成本模式和运维复杂性方面存在根本差异。

亮点

  • 水平扩展通过设计消除了单点故障,而垂直扩展则将风险集中在一台机器上。
  • 数据库工作负载通常难以横向扩展,因此对于许多团队来说,纵向扩展往往是实际可行的默认选择。
  • 自动伸缩组使水平扩展感觉像是瞬间完成的,但需要前期对应用程序架构进行投资。
  • 垂直扩展在达到可用服务器的最强性能时会遇到瓶颈,而水平扩展理论上永远不会遇到瓶颈。

水平缩放是什么?

增加服务器或实例以应对不断增长的需求并分配工作负载。

  • 这种方法也称为横向扩展,它使用负载均衡器将流量分配到多台机器上。
  • 像 AWS、Azure 和 GCP 这样的云提供商利用自动扩展组,几乎可以瞬间实现水平扩展。
  • 为了使这种方法有效,应用程序必须设计成无状态的,或者使用共享存储。
  • 水平扩展提供了内置冗余,因为如果一台服务器发生故障,流量可以重新路由。
  • 这种方法通常采用按需付费模式,使成本与实际使用量直接挂钩。

垂直缩放是什么?

升级现有服务器资源,例如 CPU、内存或存储,以提高性能。

  • 通常称为纵向扩展,这涉及用更强大的机器替换服务器或升级组件。
  • 垂直扩展适用于那些并非设计用于跨多个服务器运行的单体应用程序。
  • 单台机器的性能通常存在上限,这就造成了可扩展性的瓶颈。
  • 数据库服务器通常采用垂直扩展,因为分布式关系数据库会引入显著的复杂性。
  • 除非在虚拟化环境中使用实时迁移技术,否则这种方法在硬件升级期间需要停机。

比较表

功能 水平缩放 垂直缩放
建筑学 分布在多个节点上 单台强大的机器
最大容量 只要节点足够多,几乎是无限的 受硬件天花板限制
扩展期间的停机时间 通常零停机时间 通常需要重启或迁移
成本模式 按实例付费,线性增长 大额前期费用或阶梯式成本增加
复杂 更高,需要负载均衡和分布式设计 成本更低,实施起来更简单
容错性 内置冗余 单点故障
典型用例 Web应用程序、微服务 数据库,遗留单体架构

详细对比

每种方法如何应对增长

当流量激增时,横向扩展会启动额外的服务器来分担负载。这就像在超市增设收银通道一样。相比之下,纵向扩展则是更换收银员,换成速度更快的收银员,或者升级收银机。两者都能提高吞吐量,但其运行机制却截然不同。

应用设计要求

水平扩展要求应用程序在构建时就考虑到分布式特性。会话数据不能存储在单个服务器上,请求必须独立处理。垂直扩展对传统架构的容错性要高得多。传统的三层应用程序通常无需修改代码即可受益于更强大的底层服务器。

随时间推移的成本影响

水平扩展将支出分散到许多较小的采购项目中,这可以平滑预算,但在大规模部署时可能会累积更高的总成本。垂直扩展则将投资集中到更少、更昂贵的机器上。在极高的性能需求下,一台高端服务器的成本效益实际上可能高于协调数百台小型服务器。

失败韧性

水平扩展的一个不易察觉的优势在于其天然的容错能力。即使一个节点发生故障,其他节点也能继续处理请求。而垂直扩展则会对单个机器产生关键依赖。一旦该机器宕机,除非部署了昂贵的备用系统,否则所有服务都会停止。

现实世界的混合方法

成熟的组织很少会做出绝对的选择。他们可能会垂直扩展数据库主服务器,同时水平扩展无状态 Web 服务器。这种务实的混合方式允许每个组件使用最符合自身约束和访问模式的扩展模型。

优点与缺点

水平缩放

优点

  • + 极佳的容错能力
  • + 弹性、按需增长
  • + 无硬件天花板
  • + 使成本与使用量相匹配
  • + 实现地理分布

继续

  • 更高的架构复杂性
  • 需要无状态设计
  • 节点间的网络延迟
  • 更具挑战性的调试
  • 潜在的数据一致性问题

垂直缩放

优点

  • + 更易于实施
  • + 没有分布式系统方面的烦恼
  • + 可与旧代码兼容
  • + 降低网络开销
  • + 更易于保障和审计

继续

  • 单点故障
  • 硬件升级限制
  • 通常需要停机
  • 对于不稳定的工作负荷来说,更难证明其合理性。
  • 地理集中度

常见误解

神话

垂直扩展总是更便宜,因为购买的机器数量更少。

现实

虽然账单清单较短,但企业级服务器的价格却高得惊人。大规模部署时,数百台配置一般的服务器实例就能在性能上超越一台超级计算机,而且价格更低。实际的计算取决于您的具体工作负载模式以及每项资源的利用效率。

神话

水平扩展意味着您的应用程序会自动变得更加可靠。

现实

只有设计得当,分布式架构才能提高可靠性。如果所有节点都共享同一个数据库瓶颈,或者负载均衡器本身成为安全漏洞,那么架构不良的横向扩展系统可能会发生灾难性故障。

神话

你必须选择一种方法并始终坚持下去。

现实

大多数生产环境会动态地混合使用这两种策略。无状态组件可以水平扩展,而持久化数据存储可以垂直扩展,直到需要分片为止。随着系统的演进,这种边界也会发生变化。

神话

在云计算时代,垂直扩展已经过时了。

现实

云服务提供商大力推广横向扩展,但纵向扩展仍然至关重要。许多托管数据库服务仍然优先考虑纵向扩展而非横向扩展,而且某些计算工作负载由于通信开销较小,在数量更少、性能更强的实例上表现更佳。

神话

水平扩展可以立即解决所有性能问题。

现实

只有当瓶颈在于计算能力时,增加服务器才有帮助。如果应用程序运行缓慢是由于低效查询、内存泄漏或阻塞操作造成的,那么增加服务器只会加剧问题。性能分析和优化必须先于扩展决策。

常见问题解答

简单来说,什么是水平缩放和垂直缩放?
横向扩展是指通过增加计算机数量来处理更多工作,就像工厂雇佣更多工人一样。纵向扩展是指提升现有计算机的性能,就像给工人配备更好的工具和兴奋剂一样。两者都能提高处理能力,但在实施和维护方面却截然不同。
什么时候应该使用垂直缩放而不是水平缩放?
垂直扩展对于那些并非为分布式环境设计的有状态应用程序(例如传统关系数据库或遗留企业软件)来说优势显著。此外,当节点间的网络通信会造成不可接受的延迟,或者团队缺乏管理分布式系统复杂性的专业知识时,垂直扩展也是更佳选择。
水平扩展是否需要特殊的应用设计?
一般来说是的。你的应用程序需要处理请求,而无需依赖本地服务器状态。用户会话应该存储在像 Redis 这样的共享缓存中,文件上传需要像 S3 这样的集中式存储,而你的数据库必须能够处理来自多个应用服务器的连接。这些要求并非不可能实现,但需要在开发初期就进行规划。
我可以同时进行水平缩放和垂直缩放吗?
没错,大多数组织正是这么做的。一种常见的模式是,Web 服务器进行水平扩展,数据库进行垂直扩展,直到绝对需要分片为止。这种混合方法允许每一层根据自身的约束和访问模式使用最合适的扩展模型。
哪种扩展方式更具成本效益?
这完全取决于您的工作负载特性和增长轨迹。稳定、可预测的增长可能更适合垂直扩展的简便性。而对于波动性大或快速增长的工作负载,水平扩展的精细成本控制通常更具成本效益。在做出决定之前,请务必对您的实际资源使用模式进行详细分析。
自动缩放如何与水平缩放协同工作?
自动扩展功能会监控 CPU 利用率、请求队列深度或自定义业务指标等指标。当超出阈值时,它会自动配置新实例并将其添加到负载均衡器中。当需求下降时,它会移除实例以节省成本。这种弹性是云环境中水平扩展的关键特性。
垂直扩张的主要风险是什么?
最大的风险在于硬件性能达到极限。一旦你购买了性能最强的服务器,就无法再进行升级了。此外,升级需要停机,风险集中在一台机器上,而且难以证明为不可预测的工作负载高峰购买昂贵硬件的合理性。
横向扩展是否仅适用于大型企业?
现在情况不同了。云计算让横向扩展变得触手可及。初创公司可以像财富 500 强企业一样轻松地在基础设施即代码 (IaC) 中配置自动扩展。真正的障碍在于架构专业知识,而非预算或组织规模。
负载均衡器如何融入水平扩展?
负载均衡器是实现横向扩展的流量调度器。它们将传入的请求分配到服务器池中的各个服务器,监控服务器运行状况,并自动移除故障节点。如果没有负载均衡器,用户将直接访问各个服务器,从而失去了部署多台服务器的意义。
当我进行水平缩放时,我的数据会发生什么变化?
这是关键问题。数据库中的应用程序数据需要能够从所有节点访问,通常是通过集中式数据库或数据库集群实现。用户上传的文件会迁移到共享存储。会话数据会转移到 Redis 或类似存储介质。您的应用程序代码将变为无状态,而数据则存储在专用的、通常垂直扩展的数据层中。
垂直扩展性能能否达到水平扩展性能?
对于某些工作负载,答案是肯定的。一台配备海量 CPU、内存和高速本地存储的机器,在需要大量进程间通信或频繁数据本地化的任务中,性能可以优于分布式系统。科学计算、视频渲染和某些数据库分析有时即使在大规模应用场景下,也更倾向于垂直扩展。
我该如何决定从哪种扩展策略入手?
首先要明确自身限制。如果你的应用是遗留系统,且开发时间有限,那么垂直扩展是最快捷的方案。如果你正在构建全新的云原生软件,那么从一开始就应该考虑水平扩展。最重要的是,要对所有组件进行监控,并让实际的性能数据指导你的开发,而不是依赖理论预测。

裁决

构建需要弹性增长和高可用性的现代云原生应用时,应选择水平扩展。处理遗留系统、复杂的有状态工作负载(例如传统数据库)或当简洁性比无限扩展更重要时,则应选择垂直扩展。大多数成熟的架构最终都会融合这两种方法。

相关比较