文章

四层负载 vs 七层负载——从概念到选型一次讲清

四层负载 vs 七层负载——从概念到选型一次讲清

做后端迟早要碰负载均衡。一开始只知道 Nginx 反向代理,后来发现还有 LVS、NLB、ALB 这些东西,文档里动不动就”四层”“七层”,听着像黑话。这篇把这两个概念、它们的区别、市面上的产品分类,以及什么场景选哪个,一次整理清楚。

先说结论

四层快但”瞎”——只看 IP 和端口,转发速度极快;七层慢但”聪明”——能读懂 HTTP 请求内容,做精细路由。大多数生产架构是 L4 在前扛量,L7 在后做智能分发。

什么是四层负载均衡

工作在 OSI 模型的传输层(第 4 层,TCP/UDP)。它只看 IP 地址 + 端口号,不解析应用层的任何内容。收到 TCP 连接或 UDP 数据报后,根据负载均衡算法(轮询、加权、最少连接等)把流量转发到后端服务器。

打个比方:快递分拣中心只看包裹上的地址和收件人编号,不拆包看里面是什么,直接往对应的卡车上扔。

核心特点:

  • 不关心包里装的是 HTTP、MySQL 还是 Redis 协议
  • 转发几乎是线速的,性能极高
  • 对后端来说,客户端的 TCP 连接是”透传”的(或经过 NAT)
  • 健康检查只能做到 TCP 端口探活

什么是七层负载均衡

工作在 OSI 模型的应用层(第 7 层,HTTP/HTTPS/gRPC 等)。它会拆开包裹,解析协议内容——URL 路径、Host 头、Cookie、Header、甚至请求体,然后根据这些信息做路由决策。

还是快递的比方:这次分拣中心会拆开包裹,看里面的商品类型——食品送冷链仓,3C 送电子仓,易碎品送专用通道。

核心特点:

  • 能理解 HTTP 协议(部分产品也支持 gRPC、WebSocket)
  • 可以根据 URL、域名、Header 做精细路由
  • 支持 SSL/TLS 卸载(在负载均衡层终止加密,后端走明文)
  • 可以做 WAF、限流、认证等安全功能
  • 连接模型是”代理”——客户端到 LB 一段 TCP,LB 到后端另一段 TCP

核心区别对照表

维度四层(L4)七层(L7)
工作层级传输层(TCP/UDP)应用层(HTTP/gRPC/WebSocket…)
感知内容IP、端口、TCP 标志URL、Header、Cookie、Body
路由能力只能按 IP:Port 分发可按路径、域名、Header 精细路由
性能极高(几乎线速转发)较低(需解析协议,开销大)
SSL 卸载不支持(透传加密流量)支持(可终止 TLS)
会话保持基于源 IP基于 Cookie / Header
连接模型透传或 NAT(客户端直连后端)代理模式(两段 TCP 连接)
健康检查TCP 端口探活HTTP 状态码 / 内容检查
安全能力基本(SYN Flood 防护)WAF、限流、认证、请求过滤

一句话概括差异:四层做的是”搬运工”,七层做的是”调度员”。

市面上的产品分类

四层负载均衡

产品说明
LVS (Linux Virtual Server)Linux 内核级转发,性能极高,国内大厂标配
DPVS (基于 DPDK)用户态转发,百万级并发
AWS NLB (Network Load Balancer)AWS 四层,超低延迟
阿里云 NLB / CLB (TCP 模式)阿里云四层负载
HAProxy (TCP 模式)既能做 L4 也能做 L7,万金油
Keepalived + LVS经典高可用四层方案
Cloudflare Spectrum四层代理,支持任意 TCP/UDP 协议

七层负载均衡

产品说明
Nginx / OpenResty最主流的七层反向代理,生态最好
HAProxy (HTTP 模式)高性能七层,功能丰富
Envoy云原生 L7 代理,Service Mesh 的数据面核心
Traefik云原生,自动服务发现,配置友好
AWS ALB (Application Load Balancer)AWS 七层
阿里云 ALB阿里云七层
Cloudflare / 各类 CDN全球七层分发
Kong / APISIXAPI 网关 = 七层负载 + API 管理
Istio (基于 Envoy)Service Mesh,L7 流量治理

两者兼备的

HAProxy 是最典型的”双栖”选手——配置里写 mode tcp 就是四层,写 mode http 就是七层。Nginx 也能做 TCP/UDP 四层代理(stream 模块),不过它的强项还是七层。

哪个好?

没有绝对的好坏,只有场景匹配。

实际生产环境通常是 L4 + L7 混合部署,各取所长:

1
2
3
4
5
6
7
8
9
10
11
12
13
客户端请求
    ↓
┌─────────────────────────┐
│  L4 负载均衡 (LVS/NLB)  │  ← 扛住海量连接,分散到多台 L7 机器
└────────────┬────────────┘
             ↓
┌─────────────────────────┐
│  L7 负载均衡 (Nginx)     │  ← 按域名/路径精细路由、SSL 卸载、WAF
└────────────┬────────────┘
             ↓
┌─────────────────────────┐
│  后端服务集群             │
└─────────────────────────┘

这就是经典的”三级架构”:L4 在最前面当挡箭牌扛并发,L7 在后面做智能路由。

什么场景选四层

场景为什么选 L4
数据库集群(MySQL、Redis、MongoDB)非 HTTP 协议,只需要 TCP 转发
游戏服务器自定义 TCP/UDP 协议,需要超低延迟
超高并发入口百万级连接时 L7 扛不住,需要 L4 在前面分流
非 HTTP 协议(MQTT、FTP、自定义 RPC)L7 不认识这些协议
直播/音视频流(RTMP、SRT)需要 UDP/TCP 透传,延迟敏感
VPN / 隧道流量加密流量透传,L7 解析不了
内部微服务 TCP 通信简单分发就够了,不需要 HTTP 级别的路由

总结:协议不是 HTTP 的、或者量大到 L7 撑不住的,用 L4。

什么场景选七层

场景为什么选 L7
Web 应用 / API 网关按 URL、域名、Header 路由到不同后端服务
SSL/TLS 卸载集中管理证书,后端走明文,降低后端开销
灰度发布 / A-B 测试按 Cookie / Header 把 5% 流量导到新版本
多租户 SaaS按 Host 头 tenant-a.example.com 路由到不同集群
精细限流按 URL 粒度限流:/api/search 限 100 QPS
WAF / 安全防护检测 SQL 注入、XSS 等应用层攻击
WebSocket 路由根据路径 /ws/chat vs /ws/notification 分发到不同服务
请求改写重写 URL、添加/删除 Header、修改响应
Service MeshEnvoy sidecar 做 L7 流量治理、可观测性

总结:需要”看懂请求内容”才能做决策的,用 L7。

一个典型的选型决策树

1
2
3
4
5
6
7
你的流量是 HTTP/HTTPS 吗?
├── 是 → 用 L7(Nginx / ALB / Envoy / Traefik)
│      需要扛更大量? → L4 (LVS/NLB) 放前面
│
└── 否(TCP/UDP 自定义协议)
    ├── 需要按内容路由? → 可能需要自己写代理,或用支持该协议的 L7
    └── 只需要分发连接? → 用 L4(LVS / NLB / HAProxy TCP 模式)

常见误区

误区一:Nginx 只能做七层。 不对。Nginx 1.9+ 加入了 stream 模块,可以做 TCP/UDP 四层代理。但它的四层性能比不上 LVS 这种内核级方案。

误区二:四层比七层好,因为性能高。 性能高不等于”好”。如果你需要按 URL 路由、做灰度、卸载 SSL,四层根本做不了这些事。

误区三:用了七层就不需要四层了。 当并发量上去后(比如百万级连接),单台 Nginx 会成为瓶颈。这时候需要 L4 在前面把流量分散到多台 L7 机器上。

误区四:云上直接用 ALB/NLB 就行,不需要了解原理。 云产品确实省事,但出问题时(比如连接数暴涨、长连接不均衡、WebSocket 断连)不懂原理就只能干瞪眼。

总结

 四层七层
一句话快递分拣只看地址快递分拣会拆包检查
性能极高较高(但有解析开销)
智能程度低(只认 IP 端口)高(读得懂 HTTP 内容)
适用协议任意 TCP/UDPHTTP/HTTPS/gRPC/WebSocket
典型产品LVS、NLB、HAProxy(TCP)Nginx、ALB、Envoy、Traefik
典型场景DB 集群、游戏、超高并发入口Web 应用、API 网关、灰度发布

实际项目中,两者不是二选一,而是组合使用:L4 在前扛量,L7 在后做智能路由。理解了它们各自的能力边界,选型就不会纠结了。

本文由作者按照 CC BY 4.0 进行授权