负载均衡是分布式系统的核心组件,作用是将客户端请求均匀分发 到后端多台服务器,提升系统吞吐量、可用性与扩展性。根据工作的网络协议层级 ,可分为四层负载均衡 和七层负载均衡(不存在 "四次负载均衡",应为表述误差)。
二者的划分依据是 OSI 七层网络模型:
- 四层负载均衡:工作在传输层(TCP/UDP 层),基于 IP 地址和端口号转发请求。
- 七层负载均衡:工作在应用层(HTTP/HTTPS/FTP 等协议层),基于请求的内容(如 URL、头部信息)转发请求。
一、四层负载均衡(传输层负载均衡)
1. 核心定义
四层负载均衡工作在 OSI 模型的传输层 ,仅识别数据包的源 IP、目的 IP、源端口、目的端口以及 TCP/UDP 协议类型,不关心请求的具体内容。
它的核心逻辑是:基于 IP + 端口的哈希或轮询策略,将数据包转发到后端服务器,自身相当于一个 "智能路由器"。
2. 典型实现技术与工具
- 硬件设备:F5 BIG-IP、A10 Thunder 等(性能强、成本高,适合大型企业核心业务)。
- 软件工具:LVS(Linux Virtual Server,Linux 内核集成的高性能四层负载均衡)、HAProxy(可配置为四层模式)、Nginx(_stream 模块支持四层转发)。
3. 工作流程(以 LVS-NAT 模式为例)
- 客户端发送请求到四层负载均衡器的 VIP(虚拟 IP),目标端口为业务端口(如 80)。
- 负载均衡器根据预设策略(如轮询、加权轮询、源 IP 哈希),选择一台后端真实服务器(RS)。
- 负载均衡器修改数据包的目的 IP 为 RS 的 IP,目的端口为 RS 的业务端口,然后转发给 RS。
- RS 处理请求后,将响应数据包发送回负载均衡器。
- 负载均衡器修改响应数据包的源 IP 为 VIP,源端口为原请求端口,再转发给客户端。
4. 核心特性
| 特性 | 具体说明 |
|---|---|
| 转发效率 | 极高,基于内核态转发(如 LVS),几乎无性能损耗,能支撑十万级并发。 |
| 会话保持 | 基于源 IP 哈希实现,相同客户端的请求会转发到同一台后端服务器。 |
| 协议支持 | 支持所有 TCP/UDP 协议,如 HTTP、HTTPS、MySQL、Redis 等。 |
| 健康检查 | 仅做四层健康检查,通过 TCP 握手或 UDP 报文探测后端服务器是否存活,无法感知应用层状态。 |
| 透明性 | 后端服务器无需感知客户端真实 IP(除非配置特殊模式,如 LVS-DR),需将网关指向负载均衡器。 |
5. 典型适用场景
- 高并发、低延迟的传输层服务:如 MySQL 主从分离、Redis 集群、游戏服务器 UDP 协议转发。
- 大规模分布式系统的第一层负载均衡(与七层负载均衡配合,四层做流量分发,七层做内容路由)。
二、七层负载均衡(应用层负载均衡)
1. 核心定义
七层负载均衡工作在 OSI 模型的应用层 ,除了识别四层的 IP + 端口,还能解析应用层协议的具体内容(如 HTTP 的 URL、Host、Cookie、请求头),并基于内容进行精细化转发。
它的核心逻辑是:基于请求内容的特征,将请求路由到最优的后端服务器,自身相当于一个 "应用层代理"。
2. 典型实现技术与工具
- 软件工具:Nginx(HTTP 模块原生支持七层转发)、HAProxy(默认七层模式,支持 HTTP/HTTPS/HTTP/2)、Traefik(云原生时代的七层负载均衡,自动发现后端服务)。
- 云服务:阿里云 SLB 七层模式、AWS ALB(应用负载均衡器)。
3. 工作流程(以 Nginx 转发 HTTP 请求为例)
- 客户端发送 HTTP 请求到七层负载均衡器的 VIP,目标端口为 80/443。
- 负载均衡器解析 HTTP 请求的内容 :如 Host 头(区分不同域名)、URL 路径(如
/api转发到 API 服务器,/static转发到静态资源服务器)。 - 负载均衡器根据预设的内容路由策略,选择一台后端服务器。
- 负载均衡器以客户端身份向后端服务器发起新的 HTTP 请求,获取响应数据。
- 负载均衡器将响应数据转发给客户端(可选择是否修改响应内容,如添加响应头)。
4. 核心特性
| 特性 | 具体说明 |
|---|---|
| 转发效率 | 低于四层负载均衡,因为需要解析应用层协议(用户态处理),但 Nginx/HAProxy 仍能支撑万级并发。 |
| 会话保持 | 支持更灵活的策略:基于 Cookie 植入 (负载均衡器生成 Cookie,标识后端服务器)、Cookie 黏连(基于客户端已有 Cookie 转发)、URL 参数等。 |
| 协议支持 | 主要支持应用层协议:HTTP、HTTPS、HTTP/2、WebSocket、FTP 等。 |
| 健康检查 | 支持七层健康检查 :不仅检测 TCP 端口是否存活,还会发送模拟请求(如 GET /health),检查响应状态码(如 200 OK),能感知应用层故障(如后端服务 500 错误)。 |
| 内容处理 | 支持URL 重写、请求头修改、SSL 卸载 (负载均衡器解密 HTTPS 请求,后端服务器处理 HTTP 请求)、压缩(对响应数据 Gzip 压缩)等功能。 |
| 源 IP 透传 | 可通过 X-Forwarded-For 请求头,将客户端真实 IP 传递给后端服务器。 |
5. 典型适用场景
- 基于内容的路由:如电商网站
/product路径转发到商品服务器,/order路径转发到订单服务器。 - SSL 卸载:集中处理 HTTPS 解密,减少后端服务器的计算开销。
- 微服务架构:配合服务注册中心,实现基于服务名的负载均衡。
- 静态资源分离:将静态资源请求(如 CSS、JS、图片)转发到 CDN 或专门的静态服务器。
三、四层与七层负载均衡核心差异对比表
| 对比维度 | 四层负载均衡 | 七层负载均衡 |
|---|---|---|
| 工作层级 | 传输层(TCP/UDP) | 应用层(HTTP/HTTPS 等) |
| 识别信息 | 源 IP、目的 IP、源端口、目的端口 | IP + 端口 + 应用层内容(URL、Cookie、请求头) |
| 转发方式 | 数据包转发(修改 IP / 端口) | 应用层代理(重新发起请求) |
| 性能损耗 | 极低(内核态处理) | 中等(用户态解析协议) |
| 会话保持 | 基于源 IP 哈希 | 基于 Cookie、URL 参数、源 IP 等 |
| 健康检查 | 四层检查(TCP 握手 / UDP 探测) | 七层检查(模拟请求 + 状态码校验) |
| 核心功能 | 高并发流量分发 | 内容路由、SSL 卸载、协议转换 |
| 典型工具 | LVS、Nginx Stream 模块 | Nginx、HAProxy、Traefik |
| 适用场景 | 传输层服务、高并发场景 | 应用层服务、内容路由、微服务 |
四、四层 + 七层负载均衡联动架构
在大规模分布式系统中,通常采用 四层负载均衡 + 七层负载均衡 的分层架构,兼顾性能与灵活性:
- 第一层(四层负载均衡 LVS) :对外暴露 VIP,负责将海量客户端请求均匀分发到多台七层负载均衡器(如 Nginx 集群),解决七层负载均衡器的单点瓶颈。
- 第二层(七层负载均衡 Nginx) :负责内容路由,根据 URL、Host 等信息,将请求转发到后端应用服务器集群(如 Tomcat、Node.js 集群),同时提供 SSL 卸载、健康检查等功能。
- 后端服务器集群:处理具体业务请求,返回响应数据。