↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

HAProxy 3.4.4

相关产品与替代方案

HAProxy 3.4 入门、配置与管理三套完整手册的简体中文译本

HAProxy 与以下列出的某些产品集成良好,因此尽管这些产品与 HAProxy 无直接关联,仍在此提及。

4.1. Apache HTTP 服务器

Apache 是事实上的标准 HTTP 服务器。它是一个功能完整且模块化的项目,支持静态文件服务和动态内容处理。Apache 可以作为某些应用服务器的前端。它甚至可以代理请求并缓存响应。在所有这些使用场景中,通常需要一个前端负载均衡器。Apache 可以在多种模式下运行,其中某些模式的开销较大。某些模块仍需依赖开销较大的预派生模型,这将导致 Apache 在连接数较高时难以良好扩展。在此情况下,HAProxy 可通过将每台服务器的连接数限制强制设定为安全值,显著提升服务器性能,并有效保护服务器资源,使这些资源能更高效地被应用程序利用。

Apache 可通过使用 “mod_rpaf” 扩展从 X-Forwarded-For 头中提取客户端地址。当 HAProxy 配置中指定 “option forwardfor” 时,HAProxy 会自动填充该头。当 Apache 暴露于互联网时,HAProxy 还可提供良好防护,使其更能抵御多种类型的拒绝服务攻击。

4.2. NGINX

NGINX 是另一款事实标准级 HTTP 服务器。与 Apache 类似,它涵盖了广泛的特性。NGINX 的架构与 HAProxy 类似,因此能够轻松处理数以万计的并发连接。当作为某些应用(例如使用内置的 PHP FPM)的网关时,设置前端连接限制通常有助于减轻 PHP 应用的负载。在此场景中,HAProxy 作为常规负载均衡器以及流量调节器,均可发挥显著作用,通过缓解拥堵来提升 PHP 处理速度。此外,由于两款产品均基于事件驱动架构,CPU 占用率极低,因此通常可轻松在同一系统上同时部署。NGINX 实现了 HAProxy 的 PROXY 协议,使得 HAProxy 能够将客户端连接信息传递给 NGINX,从而确保应用获取全部相关上下文信息。部分基准测试还表明,对于大规模静态文件服务,若在 NGINX 前端的 HAProxy 上实现一致性 URL 哈希,可通过优化操作系统的缓存命中率带来性能提升,该命中率基本与服务器节点数量成倍数关系。

4.3. Varnish

Varnish 是一款智能缓存反向代理,可被描述为 Web 应用加速器。Varnish 不实现 SSL/TLS,而是希望将全部 CPU 周期专注于其最擅长的任务。Varnish 还实现了 HAProxy 的 PROXY 协议,因此 HAProxy 可以非常容易地部署在 Varnish 前端,作为 SSL 卸载器、负载均衡器,并传递所有相关的客户端信息。

此外,当服务器提供已压缩的对象时,Varnish 可自然支持从缓存中解压缩,但本身不执行压缩。HAProxy 可用于在后端服务器未实现压缩时对传出数据进行压缩,但除非流量较低,否则通常不建议在负载均衡器上进行压缩。

在跨多个节点构建大型缓存集群时,HAProxy 可利用一致的 URL 哈希机制,智能地将负载分发至缓存节点,避免缓存重复,从而实现总缓存容量为所有缓存节点容量之和。此外,在 HAProxy 上对极小的简单对象进行短时缓存,有时可减少网络往返次数,并降低 HAProxy 与 Varnish 节点的 CPU 负载。此功能仅在 Varnish 上不对这些对象执行任何处理时才可启用(这通常被称为“favicon 缓存”概念,借此可避免相当比例的无用下游请求)。然而,切勿在任何其他缓存前长期启用 HAProxy 缓存(超过几秒),否则将显著增加故障排查难度,且无法带来真正可观的性能收益。

4.4. 替代方案

Linux 虚拟服务器(LVS 或 IPVS)是内置于 Linux 内核中的第 4 层负载均衡器。它在数据包层面工作,支持 TCP 和 UDP。在大多数情况下,它更像是一种补充而非替代方案,因为它完全不具备第 7 层知识。

Pound 是另一款广为人知的负载均衡器。相较于 HAProxy,它更加简单,功能也少得多,但在许多基础配置场景下,两者均可使用。其作者始终将代码可审计性放在首位,并致力于保持功能集的精简。Pound 采用基于线程的架构,在高连接数场景下的扩展性较差,但仍是值得信赖的产品。

Pen 是一款轻量级负载均衡器。它支持 SSL,通过固定大小的客户端 IP 地址表维持会话持久性。它支持面向数据包的模式,可在一定程度上实现直接服务器返回和 UDP 支持。该负载均衡器适用于低负载场景(会话持久性表仅包含 2048 个条目)。

NGINX 可在一定程度上实现负载均衡,尽管这显然并非其主要功能。 生产流量用于检测服务器故障,负载均衡算法较为有限,会话粘性也极为有限。但在某些已有 NGINX 的简单部署场景中,此举仍具合理性。值得庆幸的是,由于 NGINX 与 HAProxy 集成良好,当 NGINX 的能力达到极限时,后续添加 HAProxy 也完全可行。

Varnish 也对后端服务器执行负载均衡,并支持真正的健康检查。然而,它不支持会话粘性,因此与 NGINX 类似,只要不需要会话粘性,仅凭这些功能通常已足够起步。同样,由于 HAProxy 与 Varnish 集成效果极佳,后续很容易将其加入现有架构中,以补充功能集。

来源与许可

文档取自 pig.center · 上游文档

版本
3.4.4
许可
GPL-2.0-only
来源修订
1dff183d0ca5a430d10324c5bbc64f9853ed77ae5df299827b47b2f54e352f65
译文修订
1dff183d0ca5a430d10324c5bbc64f9853ed77ae5df299827b47b2f54e352f65
原始 Markdown