HAProxy前端用HTTP/1.1后端对接HTTP/2是否可行?能提升性能吗?
问题1:该配置方案在HAProxy上可以实现
完全可以,HAProxy本身支持前端和后端使用不同的HTTP协议,具体配置逻辑如下:
- Frontend层配置监听HTTP/1.1协议即可,兼容ALB转发过来的普通HTTP/1.1请求以及WebSocket升级请求
- Backend层可以做请求分流:
- 普通HTTP/HTTPS请求配置使用
proto h2参数,通过HTTP/2协议和后端Web服务器通信 - 匹配到
Upgrade: websocket头的请求,仍使用HTTP/1.1协议转发,不影响现有WebSocket业务
- 普通HTTP/HTTPS请求配置使用
后端参考配置片段如下:
backend web_servers balance roundrobin # 识别非WebSocket请求使用HTTP2回源 http-request set-var(txn.use_h2) req.upgrade -i ne websocket server web1 192.168.1.10:443 ssl proto h2 if { var(txn.use_h2) } server web1_ws 192.168.1.10:443 ssl if !{ var(txn.use_h2) }
需注意HAProxy 1.8及以上版本才完整支持后端HTTP/2转发和上述分流逻辑,目前主流生产环境使用的HAProxy版本均可满足要求。
问题2:该调整合理,多数场景下能获得明确性能提升
合理性说明
这个方案完美避开了ALB不能同时支持HTTP/1.1和HTTP/2回源的限制,既保留了对现有WebSocket业务的兼容,又尽可能利用了HTTP/2的特性优化链路性能,不需要对现有客户端接入、ALB配置做任何改动,改造成本极低。
性能提升点
- 减少HAProxy到后端Web服务器的TCP连接开销:HTTP/2的多路复用特性可以让多个请求复用同一个TCP连接,大幅降低高并发场景下的TCP握手、TLS握手开销,以及服务器端的连接数压力
- 降低传输数据量:HTTP/2的HPACK头部压缩特性可以减少重复请求头的传输开销,对于请求头较大(比如带较多Cookie、认证头)的业务,收益尤为明显
- 提升高并发下的响应速度:HTTP/2没有HTTP/1.1的队头阻塞问题,多个并行请求的处理效率更高
如果你的业务中普通HTTP请求占比超过60%,这个调整的性能收益会非常明显;如果绝大多数流量都是WebSocket长连接,那么性能提升会比较有限。
内容的提问来源于stack exchange,提问作者Srijan Srivastav
相关产品推荐
相关产品推荐

