前言
负载均衡是系统架构中最常用的组件。无论是Nginx、HAProxy、还是云原生的Service Mesh,都需要回答同一个问题:
"这个请求该发给哪个后端服务器?"
看似简单,但要在高并发、动态扩容、多地域等复杂场景下做出最优决策,需要深入理解各种算法的原理与权衡。
一、负载均衡的层次
1.1 四层 vs 七层
ISO/OSI 模型:
第7层 (应用层): HTTP/HTTPS
└─ 可以看到请求内容 (URL、Header、Body)
└─ 路由粒度细 (基于URL/Host/Cookie)
└─ 性能: 中等 (需要解析HTTP)
└─ 例: Nginx、HAProxy、Envoy
第4层 (传输层): TCP/UDP
└─ 只能看到IP+Port
└─ 路由粒度粗 (仅基于IP+Port)
└─ 性能: 高 (无需解析应用层)
└─ 例: LVS、F5、云Load Balancer
┌─────────────────────────┐
│ Client │
│ 127.0.0.1:12345 │
└────────────┬────────────┘
│ TCP/IP
┌────────▼────────┐
│ Layer 4 LB │ ← 只看IP:Port,极快
│ 10.0.0.1:80 │
└────────┬────────┘
│
┌────────▼────────┐
│ Layer 7 LB │ ← 解析HTTP,精细控制
│ Nginx/Envoy │
└────────┬────────┘
│
┌────────┴────────┐
▼ ▼
Backend1 Backend2
大约 8 分钟