我一直致力于将我们应用程序的通信协议从HTTP/1.1切换到HTTP/2。
通信流程是这样的:
- 客户谈判一个亚马逊应用程序负载均衡器通过HTTP/2
- 应用程序负载均衡器通过HTTP/1.1与反向代理(HAProxy)对话 反向代理然后通过HTTP/1.1与web服务器对话
我希望所有这些都是HTTP/2,但由于负载均衡器(https://forums.aws.amazon.com/thread.jspa?threadID=332847)的限制,它和反向代理之间的通信可以是HTTP/2或HTTP/1.1,但不能两者兼而有之。我需要两者都支持,因为有一个WebSocket连接是通过HTTP/1.1打开的。
我有一个选项,使HAProxy和Webserver之间的通信是HTTP/2,因为我们的Webserver支持它。
所以流变成:
- 客户→铝青铜(HTTP/2)
- 铝青铜→HAProxy (HTTP/1.1)
- HAProxy→网络服务器(HTTP/2)
我想了解两件事
- 如果这是可能的HAProxy?
- 如果这是一个好的举动?这会给我带来任何性能提升吗?
提前感谢!欢呼声
从技术上讲,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之间是否有延迟网络服务器,但如果你认为你有。这在HAProxy和后端服务器之间带来了很好的性能提升,因为它将多个连接压缩为一个连接。否则,不要指望会有大的改善。此外,这可能取决于你是否在Haproxy和web服务器之间使用TLS。
但是像报头压缩和持久TCP连接这样的选项很有趣,所以使用它是有意义的。