![减少负载均衡器带来的延迟](https://linux22.com/image/560029/%E5%87%8F%E5%B0%91%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%E5%B8%A6%E6%9D%A5%E7%9A%84%E5%BB%B6%E8%BF%9F.png)
我目前在 Apache 中使用mod_proxy_balance
负载平衡。我有一个客户端模拟器,它创建了 100 个线程并模拟用户活动,例如浏览网站。我尝试让客户端直接与 Web 服务器通信,也可以通过负载平衡器通信。以下是我发现的结果。
当客户端直接与网络服务器对话时:
- 延迟 = 28ms
当客户端通过负载均衡器与 Web 服务器通信时(只有一个后端 Web 服务器):
- 延迟 = 53 毫秒
当客户端通过具有两个后端 Web 服务器的负载均衡器与 Web 服务器通信时:
- 延迟 = 113 毫秒
延迟不断增加,有没有办法降低延迟?提供令人满意的 SLO 是一个非常重要的方面。
答案1
您应该切换到像 ha_proxy 这样的负载均衡器,它比 mod_proxy_balancer 更适合并且性能更好。
mod_proxy_balancer 效率低下,且存在许多错误。
答案2
我认为 mod_proxy_balancer 不是epoll
基于系统的,但最好检查一下。如果它不是基于epoll
系统调用,则此延迟的原因很明显,select
系统调用和 Apache 同步处理模型不是适合平衡的工具。您应该尝试使用 HAProxy 或 nginx。
答案3
确实,使用更好的负载平衡器。您的 Web 服务器非常擅长处理请求,而不是到处代理它们。好的负载平衡器对于现有连接具有亚毫秒范围内的数据包延迟,并且不应仅因为有多个后端而增加延迟。
我用独立性虚拟服务器我会尽可能地使用它来进行负载平衡,因为它速度快而且效率极高。不过,如果这对你来说有点难以承受,你至少可以使用 haproxy 为你的后端提供高质量的负载平衡。