当自动伸缩时,在Azure上跨自动伸缩实例平衡SignalR负载会发生什么?

本文关键字:负载 SignalR 平衡 什么 Azure 实例 | 更新日期: 2023-09-27 18:19:11

Azure网站可以设置为根据负载自动缩放。考虑以下场景:

通常我只运行2个实例,但如果需要,可以扩展到10个。流量很高,所以我有10个实例,多个客户端与实例3-8建立websocket连接。流量停止,实例返回到2。

连接到实例3-8的客户端会发生什么?

当自动伸缩时,在Azure上跨自动伸缩实例平衡SignalR负载会发生什么?

SignalR试图打开与特定服务器的套接字连接。因此,如果特定的服务器被拆除(如在Azure应用服务规模缩小的情况下),那么客户端连接将被关闭。

您可以在JavaScript中处理SignalR生命周期事件,以便在发生这种情况时重新建立连接,以尽量减少对用户的影响。

http://www.asp.net/signalr/overview/guide-to-the-api/handling-connection-lifetime-events

例如,如果您通常运行两个实例,并且连接了10个用户。这10个用户在实例#1和2上具有SignalR连接。然后触发自动伸缩,现在突然提供了第三个实例。再来10个用户,他们在实例#1、2和3上获得SignalR连接。五个用户离开,然后自动伸缩,缩回到两个实例。与第三个实例有SignalR连接的其余5个用户将有一个关闭的连接。您需要处理客户端的关闭生命周期事件,以尝试在实例#1或2上重新启动SignalR连接。

我假设您已经配置了背板,否则您可能会问,"为什么我的用户偶尔得不到消息?!"。:)

这里有一篇很好的文章,我发现它对理解SignalR很有用。