网站做活动那半小时,单机 CPU 拉满,页面要十几秒才打开,加机器是唯一的路。可域名解析只能指向一个地址,总得有个角色站在前面收请求、往后面几台机器分发,这就是负载均衡器干的事。
四层和七层差在哪
四层负载均衡只看 IP 和端口,把连接原样搬给后端,快,但看不懂内容;七层工作在 HTTP 这一层,能按 URL、Cookie、请求头分流,比如把 /api 开头的请求发给后端 A 组,静态文件发给 B 组。LVS 是典型的四层方案,Nginx 是典型的七层,F5 这类硬件盒子一般出现在要求高的机房里。常见组合是前面四层扛流量,后面 Nginx 做七层分发,各干各的活。
分发算法常用的几种
- 轮询:一台一台轮流发,最简单
- 加权轮询:配置高的机器多接活,比如 weight=3 对 weight=1
- 最小连接:谁手上连接少就发给谁,长连接场景更合适
- 源地址哈希:同一个客户端固定打到同一台,解决会话保持
Nginx 里最常用的是前两种,一段配置就够:
upstream backend { server 10.0.0.11:8080 weight=2; server 10.0.0.12:8080; }光分发还不够,得知道后端死没死。健康检查会定期探测后端,探不通就把它摘掉,恢复了再加回来。云上的负载均衡器把这些都做成了默认能力,配合多可用区还能容灾。自己搭的 Nginx 可以配 fail_timeout 和 max_fails 这两个参数做被动摘除,小规模够用。
自己搭还是买云上的
小项目直接上 Nginx 或 HAProxy,一台 2 核 4G 的机器轻松扛每秒几千请求;流量大、要求高可用,用云厂商的 SLB 类产品,省运维。会话保持需求不强的话,别一上来就上复杂方案。
判断不复杂:日活几千的小站,一台机器加缓存就够;真到单机瓶颈,先用 Nginx 挂两台后端把架构跑通,再考虑迁到云负载均衡,一步到位买大件反而浪费。