【问题标题】:HAProxy - HTTP/1.1 frontend with HTTP/2 backend? A good idea?HAProxy - HTTP/1.1 前端和 HTTP/2 后端?一个好主意?
【发布时间】:2021-10-17 08:00:14
【问题描述】:

我一直在努力将我们应用程序的通信协议从 HTTP/1.1 切换到 HTTP/2。

通信流程是这样的:

  1. 客户端通过 HTTP/2 与 Amazon 应用程序负载均衡器通信
  2. 应用负载平衡器通过 HTTP/1.1 与反向代理 (HAProxy) 通信
  3. 然后反向代理通过 HTTP/1.1 与网络服务器通信

我希望所有这些都是 HTTP/2,但由于负载平衡器 (https://forums.aws.amazon.com/thread.jspa?threadID=332847) 的限制,它与反向代理之间的通信可以是 HTTP/2 或 HTTP/1.1,但不能同时使用两者。我需要同时支持这两者,因为有一个通过 HTTP/1.1 打开的 WebSocket 连接。

我可以选择将 HAProxy 和 Web 服务器之间的通信设为 HTTP/2,因为我们的 Web 服务器支持它。

所以流程变成了:

  1. 客户端 -> ALB (HTTP/2)
  2. ALB -> HAProxy (HTTP/1.1)
  3. HAProxy -> 网络服务器 (HTTP/2)

我想了解两件事

  1. 如果使用 HAProxy 可以做到这一点?
  2. 如果这是一个好的举措?这会给我带来任何性能改进吗?

提前致谢! 干杯

【问题讨论】:

标签: http reverse-proxy haproxy http2 aws-application-load-balancer


【解决方案1】:

从技术上讲,Ha Proxy 可以端到端执行 HTTP / 2.0(2.0 或更新的版本https://www.haproxy.com/fr/blog/haproxy-2-0-and-beyond/#end-to-end-http-2

在 2.4 中,您可以使用 HTTP/2 WebSockets (https://www.haproxy.com/fr/blog/announcing-haproxy-2-4/)

我第一次想到用于多路复用的 HTTP/2.0 是为了减少延迟。通常在客户端和您的第一个实例(此处为 ALB)之间的延迟。 我不知道您是否在 HaProxy -> Webserver 之间有延迟,但如果您认为有延迟。这在 HAProxy 和您的后端服务器之间带来了很好的性能提升,因为它将多个连接压缩为一个连接。否则不要指望有很大的改进。 此外,这可能取决于您是否在 Haproxy 和网络服务器之间使用 TLS。

但是像头压缩和持久 TCP 连接这样的选项很有趣,所以使用它是有意义的。

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2023-04-10
    • 2021-02-28
    • 2016-06-14
    • 1970-01-01
    • 2016-08-17
    相关资源
    最近更新 更多