能否将AWS Application Load Balancer用于RSocket服务?
结论
AWS Application Load Balancer(ALB)完全可以支持基于WebSocket传输的RSocket服务端负载均衡场景,你担心的RSocket帧无法识别的问题不会发生。
核心原理
ALB处理WebSocket连接的逻辑是分层透传:
- 仅在连接建立阶段处理HTTP升级请求,完成
101 Switching Protocols握手后,连接就会进入双向透传模式,ALB不会解析、修改后续传输的任意应用层载荷 - RSocket是运行在WebSocket传输层之上的上层协议,所有RSocket帧对ALB来说只是WebSocket承载的普通二进制数据,不需要识别处理,直接按连接转发即可
你设想的架构完全可以正常运行:客户端向ALB发起WebSocket连接,ALB按照配置的负载策略调度到某台后端RSocket服务器,RSocket连接建立完成后,所有后续交互都会在同一个长连接上传输,ALB会将该连接的流量持续绑定到同一台后端服务器,不会出现连接漂移,完全符合RSocket的通信要求。
配置注意事项
- 不需要针对RSocket做特殊适配,只要按常规WebSocket服务配置ALB监听器和目标组即可
- 建议根据业务场景调整ALB的空闲超时时间:ALB默认空闲超时为60秒,如果你的RSocket连接会长时间无数据传输,需要调大该参数,避免ALB主动断开空闲连接
- 无特殊需求不需要开启粘性会话:WebSocket长连接本身就会绑定到同一后端,只有连接中断重连时才会重新调度,如果你需要会话中断后尽可能重连到原服务器,再额外配置粘性会话即可
内容的提问来源于stack exchange,提问作者RatManMan
相关产品推荐
相关产品推荐

