--- title: "相关产品与替代方案" linkTitle: "生态体系" weight: 90 description: "HAProxy 与 Apache、NGINX、Varnish、LVS、Envoy 及其他负载均衡器的关系" icon: fa-solid fa-puzzle-piece module: [HAPROXY] categories: [概念] aliases: - /haproxy/intro/ecosystem/ - /docs/haproxy/intro/ecosystem/ - /haproxy/ecosystem/ upstream_link: "https://docs.haproxy.org/3.4/intro.html" upstream_name: "HAProxy 3.4 Starter Guide" upstream_ref: "v3.4.4, sections 4–4.4" --- HAProxy 与以下列出的某些产品集成良好,因此尽管这些产品与 HAProxy 无直接关联,仍在此提及。 ## 4.1. Apache HTTP 服务器 {#section-4-1} Apache 是事实上的标准 HTTP 服务器。它是一个功能完整且模块化的项目,支持静态文件服务和动态内容处理。Apache 可以作为某些应用服务器的前端。它甚至可以代理请求并缓存响应。在所有这些使用场景中,通常需要一个前端负载均衡器。Apache 可以在多种模式下运行,其中某些模式的开销较大。某些模块仍需依赖开销较大的预派生模型,这将导致 Apache 在连接数较高时难以良好扩展。在此情况下,HAProxy 可通过将每台服务器的连接数限制强制设定为安全值,显著提升服务器性能,并有效保护服务器资源,使这些资源能更高效地被应用程序利用。 Apache 可通过使用 "mod_rpaf" 扩展从 X-Forwarded-For 头中提取客户端地址。当 HAProxy 配置中指定 "option forwardfor" 时,HAProxy 会自动填充该头。当 Apache 暴露于互联网时,HAProxy 还可提供良好防护,使其更能抵御多种类型的拒绝服务攻击。 ## 4.2. NGINX {#section-4-2} NGINX 是另一款事实标准级 HTTP 服务器。与 Apache 类似,它涵盖了广泛的特性。NGINX 的架构与 HAProxy 类似,因此能够轻松处理数以万计的并发连接。当作为某些应用(例如使用内置的 PHP FPM)的网关时,设置前端连接限制通常有助于减轻 PHP 应用的负载。在此场景中,HAProxy 作为常规负载均衡器以及流量调节器,均可发挥显著作用,通过缓解拥堵来提升 PHP 处理速度。此外,由于两款产品均基于事件驱动架构,CPU 占用率极低,因此通常可轻松在同一系统上同时部署。NGINX 实现了 HAProxy 的 PROXY 协议,使得 HAProxy 能够将客户端连接信息传递给 NGINX,从而确保应用获取全部相关上下文信息。部分基准测试还表明,对于大规模静态文件服务,若在 NGINX 前端的 HAProxy 上实现一致性 URL 哈希,可通过优化操作系统的缓存命中率带来性能提升,该命中率基本与服务器节点数量成倍数关系。 ## 4.3. Varnish {#section-4-3} 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. 替代方案 {#section-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 集成效果极佳,后续很容易将其加入现有架构中,以补充功能集。