常见的负载均衡方式有哪些?
简化版
负载均衡把请求分摊到多台服务器,避免单点压力。按所在网络层次分:DNS 负载均衡(解析时返回不同 IP,最粗粒度)、四层负载均衡(工作在传输层,按 IP + 端口转发,如 LVS、F5,快)、七层负载均衡(工作在应用层,能看 HTTP 内容按 URL/Header 转发,如 Nginx、HAProxy,灵活)。常见分层:DNS 分区域 → 四层扛流量 → 七层做精细路由。
详细版
| 类型 | 工作层次 | 依据 | 代表 | 特点 |
|---|---|---|---|---|
| DNS 负载均衡 | 解析阶段 | 地理/轮询返回不同 IP | 智能 DNS/GSLB | 最粗粒度、无法感知服务器实时状态 |
| 四层(L4) | 传输层 | IP + 端口 | LVS、F5 | 只转发不看内容,性能极高 |
| 七层(L7) | 应用层 | HTTP 内容(URL、Header、Cookie) | Nginx、HAProxy | 能精细路由,功能强但开销略高 |
常见的负载均衡算法:轮询(Round Robin)、加权轮询、最少连接(Least Connections)、IP 哈希(同一 IP 固定到同一台,用于会话保持)、一致性哈希。
完整版教学
一、四层 vs 七层:看不看得到「内容」
这是负载均衡最核心的区分,本质是工作在哪一层、能看到什么信息:
- 四层负载均衡(传输层):只看到 IP 和端口,不解析应用层内容。它像个「只看信封地址、不拆信」的分拣员——收到数据包,根据 IP+端口选一台后端转发过去,不关心里面是 HTTP 还是别的。因为不用解析内容、只转发,所以性能极高(LVS 能扛百万级并发)。
- 七层负载均衡(应用层):能拆开 HTTP 报文看内容——URL 路径、Host、Header、Cookie 都能看到。于是它能做精细路由:
/api转给后端 A、/static转给后端 B,或按 Cookie 做会话保持。功能强大,但要解析内容,开销比四层大。
简单权衡:四层快但「瞎」(只按 IP/端口),七层「聪明」但略慢(能按内容路由)。
二、DNS 负载均衡:最前置、最粗粒度
DNS 负载均衡在解析阶段就分流:给一个域名配多个 A 记录,DNS 每次返回不同的 IP(轮询),或按地理位置返回最近的 IP(GSLB,就是 CDN 用的那套,详见「CDN 工作原理」那道题)。
- 优点:实现简单、天然全局(能跨地域分流)、成本低。
- 缺点:粒度粗、不感知服务器实时状态——DNS 不知道某台服务器挂了还是过载,可能把用户解析到已宕机的 IP;加上 DNS 缓存,摘除故障节点有延迟。
所以 DNS 负载均衡通常做第一层的地域级粗分流,具体到机房内还要四层/七层做精细分发。
三、典型的分层架构
大型系统往往把三者组合分层使用:
用户
│ ① DNS 负载均衡:按地域解析到最近的机房入口
▼
四层负载均衡(LVS):高性能地把流量分到一组七层节点
│ ②
▼
七层负载均衡(Nginx):按 URL/Header 精细路由到具体的后端服务
│ ③
▼
后端服务器集群
层层分工:DNS 分区域、四层扛大流量、七层做精细路由。每层解决它最擅长的问题。
四、负载均衡算法怎么选
- 轮询 / 加权轮询:依次分配,服务器性能不均时用加权。最常用、最简单。
- 最少连接:优先给当前连接数最少的服务器,适合请求处理时长差异大的场景。
- IP 哈希 / 一致性哈希:按客户端 IP 哈希固定到某台,用于会话保持(让同一用户总落到同一台,避免 session 丢失)。一致性哈希在节点增减时能减少缓存/会话的大规模迁移。
五、常见误区
- ❌ 把四层和七层搞混——四层看 IP+端口(快、不看内容),七层看 HTTP 内容(能精细路由)。
- ❌ 以为 DNS 负载均衡能感知服务器状态——它不知道某台挂没挂,摘除故障有延迟,只适合粗分流。
- ❌ 以为负载均衡只有一种——通常是 DNS + 四层 + 七层分层组合。
- ❌ 忽略会话保持——无状态服务随便分,有状态(依赖本地 session)要用 IP 哈希或把 session 外置。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| 四层负载均衡 | 基于 IP/端口转发 TCP/UDP 流量 |
| 七层负载均衡 | 理解 HTTP 等应用层信息做路由 |
| 算法 | 轮询、加权、最少连接、一致性哈希 |
request -> load balancer
/api -> service A pool
/image -> service B pool
health check failed -> remove backend
负载均衡不是平均分请求这么简单,还要健康检查、会话策略、扩缩容和故障摘除。
- 误区:轮询一定能让后端压力均匀。 请求耗时、连接时长和机器配置不同,简单轮询可能仍造成负载不均。
- 误区:四层负载均衡能按 URL 路由。 四层只看连接层信息,按路径、Header 路由通常要七层负载均衡。
- 误区:加了负载均衡就不会雪崩。 后端依然需要限流、熔断、隔离、超时和容量规划。
- 追问:健康检查为什么重要? 它能及时摘除异常实例,避免流量继续打到坏节点。
- 追问:会话保持有什么代价? 粘性会话降低调度灵活性,某节点故障时用户状态可能受影响。
- 追问:一致性哈希适合什么? 适合缓存或有状态路由,节点变化时尽量减少 key 迁移。
七、加强记忆
负载均衡按层次分:DNS 负载均衡(解析返回不同 IP,最粗、做地域分流、不感知服务器状态)、四层(传输层,按 IP+端口转发,快,如 LVS)、七层(应用层,能看 HTTP 内容按 URL/Header 精细路由,如 Nginx)。大型架构常「DNS 分区域 → 四层扛流量 → 七层精细路由」分层组合;算法有轮询/最少连接/IP 哈希(会话保持)等。