HAProxy:高并发场景下的负载均衡老将

做后端开发的,多少都听过 HAProxy。这东西在负载均衡领域算是老牌选手了,GitHub 上 6600 多 Star,代码提交历史能追溯到二十多年前。

简单说,HAProxy 就是一个反向代理工具,专门干两件事:把用户请求分发到后端多台服务器,以及保证服务高可用。它同时支持 TCP 和 HTTP 两种协议,既能给 Web 应用做负载均衡,也能给数据库、消息队列这类 TCP 服务做代理。

图片1

为什么选 HAProxy

市面上负载均衡方案不少,Nginx、Envoy、Caddy 都能做。HAProxy 能活这么久,靠的是几个硬指标。

第一是性能。HAProxy 用 C 写的,事件驱动模型,在高并发连接下延迟很低。官方文档里提到过,单实例处理百万级连接不是问题。实际生产环境跑个几万 QPS 很常见。

第二是稳定性。很多大厂的核心链路都在用 HAProxy,GitHub、Stack Overflow、Reddit 这些站点早期都靠它做流量分发。跑了这么多年,坑基本都踩完了。

第三是配置灵活。HAProxy 的配置文件虽然语法不算直观,但功能覆盖很全。健康检查、会话保持、限流、ACL 规则、SSL 卸载,该有的都有。可以根据 URL 路径、请求头、源 IP 等条件做精细化的流量调度。

实际怎么用

安装方式很简单。主流 Linux 发行版的包管理器里都有,Ubuntu 上一条 apt install haproxy 就行。如果需要最新版本,可以从源码编译,项目根目录的 INSTALL 文件写得很清楚。

配置文件默认在 /etc/haproxy/haproxy.cfg。一个基础的 HTTP 负载均衡配置大概长这样:定义一个 frontend 监听端口,定义一个 backend 列出后端服务器列表,再用一个 bind 把两者串起来。健康检查默认开启,后端某台挂了会自动摘除。

图片2

HAProxy 自带一个统计页面,开启后能在浏览器里实时看到连接数、请求速率、后端状态这些指标。调试和监控都靠它。

什么场景适合用

如果你的业务已经过了单机阶段,后端有两台以上的服务器需要分发流量,HAProxy 就值得考虑。特别是对延迟敏感的场景,比如 API 网关、数据库代理,HAProxy 的表现比很多方案都好。

它也支持 Lua 脚本扩展,复杂逻辑可以在配置里直接写 Lua 代码处理。SPOE 协议还能对接外部服务做认证、限流之类的操作。

不过有一点要注意,HAProxy 本身不处理静态文件,也不做反向缓存。如果你需要这些功能,可以在它前面再套一层 Nginx。两者搭配用是常见的架构。

社区和文档

项目文档写得很详细,doc 目录下有配置手册、Lua API 文档、内部架构说明等。遇到问题可以去 Discourse 论坛或者 Slack 频道提问,Issue 区只用来报 Bug 和提功能请求。

HAProxy 采用 GPL 2 协议开源,商用需要注意合规问题。不过它有个企业版,功能更多,有官方支持。

PL 2 协议开源,商用需要注意合规问题。不过它有个企业版,功能更多,有官方支持。

更多推荐