【发布时间】:2016-01-21 03:51:58
【问题描述】:
我们在大型 Web 应用程序中使用 SignalR。我们已经部署了多个处理 signalR 连接的 Web 服务器。我们已经实现了自己的 Redis 背板,我有以下问题: SignalR 向服务器发出三个调用:1) 协商、2) 连接和 3) 启动。如果我们在负载均衡器后面有一个网络农场,并且这三个调用最终会发送到三个不同的服务器,那么所有三个服务器上的连接状态是否都会损坏?在这种情况下会发生什么?我不是在谈论消息传递。
更具体地说:
第二个网络服务器是否能够理解 connectionId 由协商电话产生?
建立物理连接(websockets)时会发生什么 在不同的服务器上,然后开始调用转到另一个 服务器?
我知道 SignalR 不会在服务器之间传递连接信息。我想知道这三台服务器上内存中的连接状态。 我阅读了与此相关的另一个问题,但它仅涉及消息传递。对我们来说,消息传递不是问题。如果这三个调用最终转到不同的服务器,我想了解连接的最终状态。
我已经回答的问题: SignalR connection affinity in web-farm scenario
由于我们的负载均衡器保持粘性,我无法确认粘性消失后会发生什么。我想为这种可能性做好准备。
【问题讨论】:
-
嘿,guruprasath,只是想知道您是否曾经得到过这个问题的答案?目前,我们有一个为应用程序提供服务的场,并且我们正在使用托管在 Azure 中的 Redis 背板。在我的情况下,负载均衡器没有粘性会话,我看到超时和与 websocket 断开连接,我相信这就是你所担心的。令我困惑的部分是基于我在文档中阅读的内容,传输连接直接与背板连接,这意味着负载均衡器没有任何区别......但我们没有看到单节点环境存在问题。
-
@ammills01,我没有得到答案。我尝试在另一个 jabber 频道上发帖,但没有运气。根据您的描述,我猜您的问题与粘性无关。我们使用我们自己的 Redis 集群和背板的自定义实现。所以,我无法谈论他们提供的 Redis 背板的稳定性。我的理解是传输连接与背板无关(这将是一个安全问题)。传输连接与支持 websocket 的前端 web 服务器连接。因此,负载均衡器的粘性可能很重要。
-
感谢您的回复。经过更多的挖掘后,我得出了与您在此处提到的相同的结论,传输与 SignalR 服务器一起使用,因此请求上没有粘性会话,到处弹跳并失败。发生这种情况时,您会遇到超时,并且如果您配置了 longPolling 或其他传输技术,那么当您建立 SignalR 连接时,它将故障转移到其中之一。对我们来说,它触发了 longPolling,并且该应用程序似乎从那里开始运行良好,只是在服务器上占用了更多资源。