负载均衡基础(一):它到底在解决什么

加载中... 浏览

在客户端和服务端架构里,负载均衡不是单纯“把请求分给多台机器”,它真正解决的是:流量入口、服务扩展、故障隔离和系统稳定性问题。

1. 先从单机服务说起

最简单的客户端服务端架构是这样的:

txt
Client  --->  Server

用户打开网页、App 调接口,本质上都是客户端向服务端发送请求。

如果用户很少,一台服务器可能就够了。但当请求变多时,单机服务会遇到几个问题:

  1. CPU、内存、网络带宽不够。
  2. 一台机器挂掉,整个服务不可用。
  3. 发布、扩容、下线都很难不影响用户。
  4. 不同地区、不同网络的访问体验差异很大。

所以服务端通常会变成多台机器:

txt
Client  --->  Server A
        --->  Server B
        --->  Server C

但这时候又出现新问题:客户端到底应该请求哪一台?

负载均衡就是为了解决这个问题。

2. 负载均衡的核心目标

负载均衡主要做几件事:

  1. 分摊流量:不要让所有请求都打到同一台服务器。
  2. 屏蔽后端细节:客户端只需要访问一个统一入口。
  3. 提高可用性:某台服务器挂了,就把流量摘掉。
  4. 方便扩容缩容:新增机器后,流量可以逐步分过去。
  5. 提升稳定性:配合限流、熔断、超时、重试减少故障扩散。

可以把负载均衡理解成一个“流量调度器”。

txt
          ┌────────── Server A
Client -> │
          │ Load Balancer -> Server B

          └────────── Server C

客户端不直接关心后面有几台服务器,它只访问负载均衡器。

3. 负载均衡出现在哪些位置

负载均衡不一定只有一个位置,它可能出现在不同层级。

DNS 负载均衡

用户访问域名时,DNS 可以返回不同 IP。

txt
example.com -> 1.1.1.1
example.com -> 2.2.2.2

优点是简单、入口靠前;缺点是 DNS 缓存会导致切换不够实时。

网关或反向代理负载均衡

比如 Nginx、API Gateway、云厂商负载均衡器。

txt
Client -> Nginx / Gateway -> App Servers

这是最常见的服务端入口负载均衡方式。

客户端负载均衡

客户端自己从服务注册中心拿到服务列表,然后选择一台服务调用。

txt
Client -> Service Registry
Client -> Service A / B / C

这种方式在微服务内部调用中比较常见。

服务网格负载均衡

服务网格会把流量治理能力放到 sidecar 或基础设施层里。

txt
Service A -> Sidecar -> Sidecar -> Service B

业务代码不用自己处理太多负载均衡细节,但系统复杂度也会变高。

4. 负载均衡不是平均分

很多初学者会把负载均衡理解成“平均分配请求”。

但真实系统里,不一定是平均才合理。

原因包括:

  • 机器配置不同,有的机器更强。
  • 请求复杂度不同,有的接口很重。
  • 某些连接是长连接,不能只看请求数。
  • 某台机器可能刚启动,需要预热。
  • 某些用户需要会话保持,不能随便切机器。

所以负载均衡更准确地说是:

根据后端实例状态、流量特征和调度策略,把请求分配到合适的服务实例上。

5. 一个请求经过负载均衡的大致过程

假设用户访问一个网站:

txt
浏览器

DNS 解析域名

负载均衡入口

后端应用服务器

数据库 / 缓存 / 消息队列

负载均衡器通常会做这些判断:

  1. 后端实例是否健康。
  2. 这次请求应该转发给哪台机器。
  3. 是否需要保持同一个用户打到同一台机器。
  4. 后端超时或失败后要不要重试。
  5. 当前流量是否超过系统承受能力。

所以它不仅是转发请求,也承担一部分系统稳定性职责。

6. 初学时容易混淆的几个概念

负载均衡和反向代理

反向代理强调“代理服务端接收请求”,负载均衡强调“把请求分配到多个后端实例”。

很多工具同时具备这两个能力,比如 Nginx。

负载均衡和网关

网关通常是更综合的入口层,除了负载均衡,还可能负责认证、鉴权、限流、日志、协议转换。

负载均衡是网关可能具备的一种能力。

负载均衡和服务发现

服务发现负责回答“有哪些可用实例”。

负载均衡负责回答“这次请求选哪一个实例”。

7. 小结

负载均衡是分布式系统里非常基础的架构能力。

可以先这样理解:

  1. 单机服务扛不住流量,也不够可靠。
  2. 多实例部署后,需要一个流量调度机制。
  3. 负载均衡让客户端面对统一入口,后端可以横向扩展。
  4. 它不仅分摊流量,还要考虑健康检查、故障摘除、扩容缩容和稳定性。

后面继续看负载均衡算法时,不要只背轮询、随机这些名词,要结合“请求如何被分配到合适实例”来理解。

留言板

加载评论中...
负载均衡基础(二):常见算法怎么选
Git 基础生存手册
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1