我想知道在高可用性(.NET Core)微服务基础架构中设置WebSockets服务器的最佳方法。
我当前的计划是在负载均衡器后面有两个我的WebSockets服务器实例,具有会话亲和性,这样一旦连接打开,后续消息就会返回到同一个实例。然后,如果实例失败,客户端将重新连接到另一个实例。
这是设置它的最佳方式还是有更好的方法?我主要关心的是高可用性,但我也希望能够横向扩展。
此外,如果需要向浏览器客户端广播消息,那么我应该使用某种可靠的消息队列来确保WebSockets服务器的所有实例都知道该消息,以防它们拥有与该浏览器客户端的连接?我想到的替代方案是,如果服务器在某种程度上是无状态的,连接信息存储在其他地方(Redis集群?),那么我不需要通知所有实例,因为它们都没有“拥有”连接到那客户?这可能吗?
感谢您的帮助:)
克里斯
答案 0 :(得分:2)
你的设计听起来不错。使用haproxy,您可以限制任何给定实例的客户端连接数,这对websockets来说是一个巨大的问题。我会采用无状态方法并使用代码处理错误。当客户端检测到故障时,只需重新连接到任何实例。将所有持久数据保存在某种全局存储中。根据用例,正如您所提到的,Redis可以很好地工作。
作为旁注,Websockets保持持久连接打开,并且根据卷,您可能需要一个haproxy实例池。建议至少有两个作为可用性的起点。