在七层负载场景下,Nginx 凭借事件驱动架构可支持高达 50,000 个并发连接数,而 HAProxy 在默认健康检查配置下故障切换延迟可能长达 60 秒,导致高并发下请求丢失。
原因分析
Nginx 于 2004 年首次发布,采用事件驱动架构,擅长处理静态内容和 HTTP 流量;HAProxy 自 2000 年首次发布,专为负载均衡设计,支持 TCP 和 HTTP 协议。
性能差异核心在于处理机制:Nginx 对网络稳定性依赖小,理论上能 ping 通就能进行负载功能;HAProxy 在处理复杂负载均衡策略如基于源 IP、URL 路径分发时更灵活,但健康检查机制若配置不当(如 inter 20000)会导致探测间隔过长。
解决方案与配置优化
1. HAProxy 健康检查优化
根据阿里云开发者社区测试记录,默认配置inter 20000代表 20 秒检测一次,需探测三次才会切下线,最长可能得探测 60s 才能把故障切除。
优化建议:将检测间隔调整为 3 秒以内,避免线上故障时出现"60s 内有 1w 请求的话,那就会丢掉 5k 个"的情况。
2. Nginx 会话保持配置
Nginx 不支持 Session 的直接保持,但能通过 ip_hash 来解决。配置示例如下:
upstream backend { ip_hash; server 192.168.136.134; server 192.168.136.135; }
注意事项
- HAProxy 故障切换风险:若后端机器挂掉且未达到探测时间点,请求还会往挂掉的这台机器转发,请求会丢失。
- Nginx 健康检查局限:对后端服务器的健康检查,只支持通过端口来检测,不支持通过 url 来检测。
- 协议支持范围:Nginx 仅能支持 http、https 和 Email 协议,适用范围较小;HAProxy 支持 TCP 和 HTTP/HTTPS 协议。
参考来源
来源:云社区 - 华为云 - 负载均衡之 Nginx/LVS/HAProxy 对比分析 (2017 年 12 月 22 日)
来源:阿里云开发者社区 - Haproxy 和 Nginx 负载均衡测试效果对比记录 (2017 年 10 月 12 日)
来源:HAProxy 与 NGINX:全面比较 (2024 年 8 月 21 日)