Skip to content

概念卡片:网关与负载均衡全景(Nginx / LVS / Gateway / Ribbon)

一句话机制:流量进入系统要经过多层分发——LVS/Nginx 是「服务端负载均衡」(独立节点,转发请求),Ribbon/LoadBalancer 是「客户端负载均衡」(调用方本地选实例),Gateway 是「应用网关」(路由 + 鉴权 + 限流);三者分层协作,各管一段。

三种角色的定位

角色代表位置职责
服务端 LBNginx / LVS / F5独立节点四层/七层转发、反向代理、静态资源
客户端 LBRibbon / LoadBalancer调用方本地从注册中心拉清单、选实例
应用网关Spring Gateway应用层路由断言、鉴权、限流、跨域

Nginx 核心能力

nginx
# 反向代理 + 负载均衡
upstream backend {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=1;
}
server {
    listen 80;
    location /api/ { proxy_pass http://backend; }   # 反向代理
    location /static/ { root /data; }               # 静态资源
}
  • 反向代理:隐藏后端真实地址,统一入口
  • 负载均衡upstream + 策略(轮询/权重/ip_hash/最少连接)
  • 静态资源缓存expires + gzip,扛高并发静态请求
  • HTTPS:SSL 终止

LVS vs Nginx(层级不同)

LVSNginx
层级四层(传输层,TCP 转发)七层(应用层,HTTP 解析)
性能更高(只转发不解析)较低(要解析 HTTP)
功能纯负载均衡负载均衡 + 反向代理 + 缓存 + 重写

典型组合:LVS + Keepalived 做主备四层 LB → Nginx 做七层反向代理 → Gateway 做应用网关 → Ribbon 做服务间调用

不变量(必须成立的约束)

  • Nginx 是服务端 LB(独立节点转发),Ribbon 是客户端 LB(本地选实例),一个在入口、一个在服务间。
  • LVS 四层、Nginx 七层:四层只按 IP:端口转发、性能高;七层能按 URL 路由、功能强。
  • Gateway 是「应用层网关」,处理业务横切逻辑(鉴权/限流),不替代 Nginx 的高性能转发。

踩坑案例

  • 现象:Nginx 后面挂了多台应用,某台频繁 502。 原因upstream 没配健康检查,请求仍转发到宕机实例。解决:配 max_fails + fail_timeout 剔除故障节点(或用 nginx-upsync 动态配置)。

常见误解

  • 以为 Nginx 和 Gateway 二选一 → 两者分层:Nginx 扛入口流量/静态资源,Gateway 做应用层路由鉴权,常一起用。
  • 以为负载均衡只有 Nginx → 还有客户端 LB(Ribbon/LoadBalancer),服务间调用靠它。

关联

最近更新