缩减规模时,Azure 上跨自动缩放实例的 SignalR 负载平衡会发生什么情况?
What happens with SignalR load balanced on Azure across autoscale instances when downscaling?
Azure 网站可以设置为根据负载自动缩放。考虑以下情况:
通常我 运行 只有 2 个实例,但如果需要可以扩展到 10 个。流量很高,所以我有 10 个实例,多个客户端与实例 3-8 建立 websocket 连接。流量减少,实例回落到 2。
连接到实例 3-8 的客户端会怎样?
SignalR 尝试打开到特定服务器的套接字连接。因此,如果该特定服务器被拆除(如 Azure 应用服务缩小的情况),则该客户端连接将关闭。
您可以在 JavaScript 中处理 SignalR 生命周期事件,以便在发生这种情况时重新建立连接,从而最大限度地减少对用户的影响。
http://www.asp.net/signalr/overview/guide-to-the-api/handling-connection-lifetime-events
例如,如果您通常 运行 两个实例并且您连接了 10 个用户。这 10 个用户在实例 #1 和实例 2 上有 SignalR 连接。然后自动缩放触发,现在突然提供了第三个实例。又来了十个用户,他们在实例 #1、2 和 3 上获得了 SignalR 连接。五个用户离开并自动缩放,缩减到两个实例。与第三个实例具有 SignalR 连接的其余 5 个用户将具有关闭连接。您需要处理客户端上的关闭生命周期事件,以尝试在实例 #1 或 2 上重新启动 SignalR 连接。
我假设您已经配置了背板,否则您可能会问,"why are my users sporadically not getting messages?!"。 :)
这是我发现对理解 SignalR 很有用的nice article。
Azure 网站可以设置为根据负载自动缩放。考虑以下情况:
通常我 运行 只有 2 个实例,但如果需要可以扩展到 10 个。流量很高,所以我有 10 个实例,多个客户端与实例 3-8 建立 websocket 连接。流量减少,实例回落到 2。
连接到实例 3-8 的客户端会怎样?
SignalR 尝试打开到特定服务器的套接字连接。因此,如果该特定服务器被拆除(如 Azure 应用服务缩小的情况),则该客户端连接将关闭。
您可以在 JavaScript 中处理 SignalR 生命周期事件,以便在发生这种情况时重新建立连接,从而最大限度地减少对用户的影响。
http://www.asp.net/signalr/overview/guide-to-the-api/handling-connection-lifetime-events
例如,如果您通常 运行 两个实例并且您连接了 10 个用户。这 10 个用户在实例 #1 和实例 2 上有 SignalR 连接。然后自动缩放触发,现在突然提供了第三个实例。又来了十个用户,他们在实例 #1、2 和 3 上获得了 SignalR 连接。五个用户离开并自动缩放,缩减到两个实例。与第三个实例具有 SignalR 连接的其余 5 个用户将具有关闭连接。您需要处理客户端上的关闭生命周期事件,以尝试在实例 #1 或 2 上重新启动 SignalR 连接。
我假设您已经配置了背板,否则您可能会问,"why are my users sporadically not getting messages?!"。 :)
这是我发现对理解 SignalR 很有用的nice article。