一个 load balancer 把进入的流量分散到一组后端服务器上,从而没有单台被压垮,且若一台服务器挂了系统仍保持可用。核心区别在于它工作的层次:
L4 (Transport) L7 (Application)
routes by IP + port only reads HTTP: path, headers, cookies, host
┌──────────────┐ ┌──────────────┐
│ balancer │──▶ server A │ balancer │ /api/* ──▶ API pool
│ (TCP/UDP) │──▶ server B │ (HTTP-aware) │ /img/* ──▶ static pool
└──────────────┘──▶ server C └──────────────┘ cookie=X ──▶ sticky backend
fast, opaque, protocol-agnostic smart routing, TLS termination, can inspect
工作在传输层:它仅基于 IP 和端口转发 TCP/UDP 连接,不看数据包内部。它快、廉价、对任何协议都有效,但无法做基于内容的决策。工作在应用层:它终止连接、解析 HTTP,并能按 URL path、host、header 或 cookie 路由——从而实现基于 path 的路由( vs )、sticky session、TLS termination、压缩和按请求重试。代价是每个请求要更多处理。
