跳至内容
云计算

负载均衡:现代系统如何在压力下保持可用

负载均衡通过在服务器间分摊工作,让现代应用保持快速、可用和可扩展。本文解析其工作原理、重要性及伴随的权衡。
Marie Fayard's photo
Marie Fayard
已更新 · 14分钟 阅读

使用 AI 探索

ChatGPTClaudePerplexity

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。

负载均衡这个概念出现的地方,可能比您想象的多得多。

想象一个周六早晨,超市人满为患,却只开了一个收银台。十五个人排成长龙,大家都不耐烦,收银员也一脸生无可恋。正当火药味渐浓时,三位店员突然出现,又开了几个收银台,并开始引导顾客去排更短的队。速度立刻提升,压力缓解,队伍也开始顺畅移动。这本质上,就是负载均衡。

在这篇文章中,我将带您了解什么是负载均衡、它为何重要、底层如何工作,以及它如何在高峰时段阻止数字世界崩盘。阅读本文不需要特定背景知识,所以即使您不熟悉网络或云架构也无需担心!我们会尽量讲得清晰、务实,甚至(希望)还有点儿趣味。

什么是负载均衡,为什么重要?

在技术领域,负载均衡用于将传入的流量或任务分配到多台服务器或资源上。与其让一台机器独自“淹没”在所有压力之下,负载均衡器会把工作摊开,让系统保持快速、稳定并具备可扩展性。它无处不在:云平台用它来服务数以百万计的用户,AI 流水线依赖它把数据负载分摊到各节点,电商网站则靠它熬过“黑色星期五”。

先假设一下,您的应用没有负载均衡器。一台服务器接收所有请求、所有流量、所有压力。也许它能撑一阵子,但终究会不堪重负。速度变慢,用户抓狂,甚至彻底崩溃。与此同时,其他服务器则“闲到发霉”,什么也没干。

没有负载均衡,您基本会面临:

  • 单点故障: 一台服务器宕机,全部都跟着遭殃。
  • 高压下性能糟糕: 过载的服务器响应更慢(甚至完全不响应)。
  • 可扩展性受限: 如果新增的服务器得不到使用,也无济于事。
  • 用户沮丧: 说实话,这才是真正的问题。

现在,引入一个负载均衡器,情况就完全不同了。它位于后端服务器前面,随时关注每台服务器的状态,并将传入请求分发给更健康或更空闲的那一台。有些负载均衡器甚至会实时监控响应时间或服务器资源。

您将获得:

  • 高可用性: 某台服务器故障时,流量会自动改道。
  • 更佳性能: 没人被压垮,一切自然更快。
  • 可扩展性: 可按需增减服务器,负载均衡器会随之调整。
  • 容错性: 故障不会把全盘拖垮。
  • 成本效率: 资源利用更充分。
  • 更强安全性: 一些负载均衡器能阻断恶意流量并隐藏内部服务。

再回到超市的例子,想象那15个人被智能地分配到5个收银台。没人慌乱、没人吼叫,您更快去到冷冻披萨货架。目标就是这样。

负载均衡如何工作

我们刚谈了负载均衡为何有用。现在来看看它在底层究竟如何运作。

从高层看,负载均衡器位于客户端(发起请求的人或系统)与后端服务器(实际处理工作的那群)之间。它的工作是接收每个传入请求,并决定把它发到哪里。

基本流程如下:

  1. 用户尝试访问您的应用或服务。
  2. 请求首先到达负载均衡器。
  3. 负载均衡器检查哪些后端服务器可用、健康且不太繁忙。
  4. 它将请求转发给选定的服务器。
  5. 服务器处理请求并返回响应,直接返回或经由负载均衡器返回。

理论上挺直观,但幕后发生了很多事,而且有几个关键概念确保一切顺利:

  • 健康检查: 负载均衡器会定期“Ping”每台后端服务器,确认它是否还“活蹦乱跳”。若某台未通过检查,会被暂时移出轮转,直至恢复。
  • 故障切换: 如果某台服务器在处理中途崩溃(确实会发生),负载均衡器可把流量重定向到健康节点,而不打扰终端用户。
  • 会话保持(又称“粘性”): 有时您希望用户持续命中同一台服务器,比如登录会话期间。粘性会话能实现这一点,不过会带来权衡(稍后会提到)。
  • SSL 终止: 负载均衡器可以负责解密 HTTPS 流量,从而减轻后端服务器的负担,保持整体性能。

Load balancing 与 load balancer 的区别

简单补充:“load balancing”是概念(分发流量),而“load balancer”是让它发生的工具或服务。两者常被混用,但分清还是有帮助的。

负载均衡算法

尽管有时负载均衡器会随机挑一台服务器,但实际存在一些策略——即负载均衡算法——用于决定如何把传入流量分配到后端资源。

有些算法非常简单、可预测,另一些则会根据服务器性能、连接数或响应速度实时调整。我们可以将它们分为两大类。

静态算法

这类算法不会根据系统状态做出调整,而是遵循预设规则。它们可预测、易实现,但在真实压力下并不总是理想之选。

  • 轮询(Round Robin): 负载均衡器按轮转顺序将请求发往服务器:A、B、C、A、B、C…… 简单,但不考虑每台服务器的繁忙程度。
  • 加权轮询(Weighted Round Robin): 类似轮询,但根据权重让某些服务器获得更多请求——当部分机器更强大时很有用。
  • IP 哈希(IP Hash): 利用客户端 IP 地址决定路由到哪台服务器。能确保同一用户持续命中同一后端,有利于基本的会话粘性。
  • 客户端随机选择(Client-side Random Selection): 顾名思义,由客户端随机选择服务器(通常来自 DNS 提供的列表)。这消除了负载均衡器开销,但可能导致分配不均。

static load balancing algorithms

静态算法。作者供图

动态算法

这类算法会根据系统中的实际情况进行自适应。更“聪明”,但需要更多监控与系统感知能力。

  • 最少连接数(Least Connections): 将下一次请求发送给当前活动连接最少的服务器。适合会话长、流量波动大的系统。
  • 加权最少连接数(Weighted Least Connections): 思路相同,但考虑服务器权重。更强的服务器能处理更多连接,因此获得更多流量。
  • 最短响应时间(Least Response Time): 将请求路由到响应时间最快的服务器。适用于追求性能优化的场景。
  • 基于资源的负载均衡(Resource-based Load Balancing): 考虑 CPU、内存或 I/O 使用率等因素。若某台服务器资源吃紧,它将分到更少流量。这种方法能力强,但实现与监控更复杂。

dynamic load balancing algorithms

动态算法。作者供图

当流量可预测且服务器性能相当时,静态算法很合适。而在更混乱的情况下,动态算法大放异彩。

好了,接下来谈谈负载均衡器本身的不同类型:硬件、软件、云原生等。

负载均衡器的类型

并非所有负载均衡器都一样。有的以硬件形态存在,有的以软件运行,有的随云服务捆绑,还有的专攻特定用例。选择取决于您的架构、规模,有时也取决于预算。

按部署方式

硬件负载均衡器

这类是部署在数据中心的物理设备,专为流量均衡而打造。性能强、速度快,但昂贵且难以按需扩展。多见于大型企业和本地部署。

软件负载均衡器

它们作为应用运行在通用服务器上。Tools like HAProxy、nginx(隶属 F5)或 Envoy 属于此类。它们更便宜、更灵活,也更易集成到 most 环境中。

云原生负载均衡器

如果您在用 AWS、Azure 或 GCP,很可能已经在使用云原生负载均衡器,如 AWS ELB、Azure Load Balancer 或 GCP Load Balancing。它们由服务商托管,自动伸缩,并与其他服务良好集成。

如果您想了解 AWS 如何处理这些(以及其他一系列基础设施组件),请查阅我们的 AWS Cloud Technology and Services Concepts 课程。

您或许听说过弹性负载均衡器。它们会随工作负载自动扩缩。通常属于云原生系统的一部分,但“弹性”一词只是表示它们能动态适应流量,适合峰谷分明或难以预测的负载。

按 OSI 分层

OSI 模型是描述数据在网络中如何流动的概念框架,共七层,从物理介质一直到浏览器中的应用层。对负载均衡而言,最相关的是第 4 层和第 7 层。

第 4 层负载均衡(传输层)

根据 IP 地址、端口以及 TCP/UDP 流量做出路由决策。速度快、效率高,但不了解传输内容本身。

第 7 层负载均衡(应用层)

会查看请求的实际内容,如 HTTP 头、Cookie 或 URL。因此能做更高级的事情,比如基于 URL 路径路由、A/B 测试或按语言偏好路由。比如,若您希望/api/ 请求走一个集群,而/login 走另一个,那就需要第 7 层。

专项类型

全局服务器负载均衡(GSLB)

用于在地理上分散的数据中心之间分配流量。适合多区域、低延迟或灾备架构。

内部负载均衡器

完全在私有网络内运行,用于平衡云或集群内各服务之间的流量。

Diameter 负载均衡器

专为使用Diameter 协议的电信系统设计,常见于移动网络中的路由、认证和计费请求。

HTTP(S) 负载均衡器

专门针对 HTTP 和 HTTPS 流量进行优化。通常包含 SSL 终止、基于 URL 的路由以及内置 DDoS 防护。

每种负载均衡器都在解决不同问题。有的关注规模,有的关注时延、安全或易用性。选对工具,会极大影响您在运维上的“顺滑程度”。

负载均衡器的架构与拓扑

目前为止,我们讨论了负载均衡器做什么以及可能使用的类型,那么它们在底层是如何构建的呢?负载均衡系统的架构会影响从可扩展性到故障处理优雅度的一切。

主从(领导者-跟随者)模型

经典架构:一个“领导者”节点做决策,并把工作分派给多个“工作”节点。简单易懂,但若缺乏良好冗余,领导者可能成为瓶颈或单点故障。

分布式负载均衡

不再只有一个“大脑”,每个负载均衡器都了解同伴并共享工作。这提升了容错与可扩展性,但协调更棘手。大型系统中常见,如采用 anycast 路由或基于 DNS 的分发。

在容器化环境,尤其是 Kubernetes 中,负载均衡更有意思。Service、Ingress 控制器和 sidecar 协同工作,智能地在集群内路由流量。如果您刚入门,我们的 Introduction to Kubernetes 课程是动手学习基础的不错选择。

工作窃取

在这种模式下,空闲的工作节点可以“窃取”忙碌节点的任务。常用于计算密集型环境,如任务队列或数据处理流水线;对 Web 流量则不常用。但在平衡不可预测的工作负载方面很有价值。

多级层次结构

有些系统会分层设置负载均衡器,比如全局层面(跨区域)一层、数据中心层面一层、特定服务集群内再一层。这样有助于管理复杂性,并让每一层都专注于特定范围。

Load balancing architectures

负载均衡架构。

这些架构各有取舍。中心化模型易于理解,却可能成“卡口”;分布式模型更易扩展,但更复杂;分层拓扑具备模块化好处,但若设计不当会引入时延。和往常一样,没有放之四海而皆准的答案,这取决于系统规模、流量模式以及您对风险的容忍度。

挑战与限制

负载均衡很强大,但并非魔法。它能让系统更可靠、可扩展、更高效,同时也引入新的复杂性和潜在故障点。我们来聊聊工程师在技术与运维层面会遇到的权衡。

负载均衡的一般性挑战

负载均衡器本身可能成为瓶颈

具有讽刺意味的是,这个用来分发流量的工具,若架构不当,自己也可能成为单点故障,尤其在中心化或领导者模型中。因此许多系统会使用多台负载均衡器、故障切换机制,甚至在 DNS 层做均衡,以分散风险。

它会增加开销

无论多快,负载均衡器都在客户端与后端之间增加了一跳。这可能带来时延,尤其是在多层架构或应用层(第 7 层)路由中。

SSL 终止有用但代价不低

在负载均衡器层处理 HTTPS(即 SSL 终止)可为后端减负,但也意味着负载均衡器要做更多工作,并承担敏感安全配置与证书管理的责任。

会话保持 vs 无状态

粘性会话有助于让用户绑定到同一后端(比如登录期间),但会让扩缩变复杂,也更难实现完全无状态的服务。工程师常需要在用户体验与架构“优雅”之间权衡。

配置复杂度飙升

路由逻辑越智能,越容易出现 bug、误路由或那些难以追踪的性能小毛病。配置时您可能感觉很聪明,但当凌晨两点被叫醒去排查“健康检查不稳定”时,感觉就没那么好了。

工程与运维的实际挑战

算法调优没有通用公式

每个应用在负载下的表现都不一样。是选静态还是动态算法?连接阈值、健康检查间隔等参数该怎么调?往往需要大量试错与经验。

多一层中间层,排障更难

一旦出问题,负载均衡器又多了一个需要检查的地方。配置错误的路由、丢失的请求、缓存层,或不一致的健康检查结果,都可能搅浑水。

安全让事情更复杂

如果负载均衡器处理 SSL,您需要确保其配置正确、及时打补丁并被监控。任何差错都可能引入漏洞或破坏安全通信。

可观测性更为关键

这与前面提到的复杂性增加相关。您需要强大的日志、指标与链路追踪,来理解请求在系统中的流动。缺乏良好可观测性时,一个行为异常的负载均衡器既难以发现,也更难修复。

说明一下,这些都不是不用负载均衡的理由。这只是构建韧性系统的现实:每加一层都能带来帮助,同时也带来新的管理挑战。

负载均衡的未来趋势

像所有技术一样,负载均衡也在演进。随着系统更复杂、更分布式、更动态,传统方法被不断拉伸,新的策略也在试水。

AI/ML 驱动的负载均衡

这与全球技术趋势一致。现代平台开始引入机器学习来预测流量模式并做出更聪明的路由决策。相较于只对当前负载做出反应,这些系统能预判高峰(如产品发布或突发新闻)并提前调整流量。虽仍在早期,但“自优化”基础设施的潜力确实存在。

如果您想探索这一方向,我们的教程 Machine Learning, Pipelines, Deployment and MLOps 是很好的起点。

应用感知型负载均衡

传统负载均衡器并不了解您的应用在做什么;它们只看流量。应用感知型负载均衡更进一步。它能基于用户身份、设备类型或请求的业务重要性来做决定。比如,在流量高峰时优先服务已登录用户,或将敏感流量路由到更高安全等级的集群。

多云与混合环境

随着企业将工作负载分散到多个云厂商(或混用本地与云),负载均衡器也在适应。它们需要具备更强的地域感知、跨云故障切换能力,并能管理截然不同环境之间的路由。预计这类架构将更多采用全局流量调度与 DNS 级编排。

边缘与本地化负载均衡

随着边缘计算兴起,负载均衡正向更靠近用户的地方移动。与其把一切都路由到中心云,不如从边缘节点直接服务,显著降低时延。边缘侧的负载均衡需要更轻量、更智能,也更“本地化”。

自治与基于代理的系统

一些实验性平台在探索基于代理的负载均衡,让各个服务根据本地观测共同参与决定流量如何流动。它更分布式,能快速响应小范围变化,但也带来协调难题。

很明显,这些趋势都指向一个方向:更动态、更智能、更具上下文感知的负载均衡。简单的轮询依然活跃(好用的东西没必要丢),但它们正与能学习、能适应、能基于远超服务器负载的因素实时决策的系统同台共舞。

结语

本文回顾了负载均衡是什么、为何重要以及它的底层工作机制。我们讨论了算法、架构与真实应用场景,并希望在这个过程中让它不再神秘。也希望这篇文章能帮助您更清晰地看清整体图景!

下一步,若您有兴趣深入学习,欢迎报名我们的相关课程。我推荐我们的 Introduction to Kubernetes 课程以及 AWS Cloud Technology and Services Concepts 课程。


Marie Fayard's photo
Author
Marie Fayard

我是一名具有产品思维的技术负责人,专注于帮助早期初创公司从首个原型成长到实现产品与市场匹配,并持续向前发展。我对人们如何使用技术充满好奇,热爱与创始人及跨职能团队紧密合作,将大胆的想法变为现实。不在打造产品的时候,我会在世界的新角落寻找灵感,或在瑜伽馆放松减压。

负载均衡常见问答

负载均衡能用于无服务器架构吗?

算是。传统的负载均衡器通常不直接参与像 AWS Lambda 这样的无服务器函数,但云服务商会在后台处理伸缩与路由。所以负载均衡依然存在,只是对您而言被抽象掉了。

负载均衡与自动伸缩有什么区别?

负载均衡在可用资源之间分配流量,自动伸缩则会根据需求增减这些资源。两者相辅相成:伸缩确保有足够的服务器,负载均衡确保这些服务器被高效使用。

负载均衡如何影响数据库性能或架构?

数据库同样能从负载均衡中受益,尤其是读密集型工作负载。读副本、代理层与连接池等工具能帮助分摊数据库查询,但写操作仍需要一致性策略,这会比较棘手。

主题
云计算

与 DataCamp 一起学习

课程

dbt 入门

4 小时
34.3K
本课程介绍 dbt,用于数据建模、转换、测试和构建文档。
查看详情开始课程

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。
查看更多