跳至主要內容
负载均衡算法深度解析:从Nginx到云原生

前言

负载均衡是系统架构中最常用的组件。无论是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 分钟分布式负载均衡Nginx云原生
nginx配置

一、负载均衡策略

负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:

#动态服务器组
upstream dynamic_zuoyu {
    server localhost:8080;  #tomcat1
    server localhost:8081;  #tomcat2
    server localhost:8082;  #tomcat3
    server localhost:8083;  #tomcat4
}

郑天祺大约 12 分钟CICDNginx负载均衡配置