来自工作者角色的数百个线程连接到Web角色上的SignalR

时间:2016-01-19 22:29:13

标签: c# azure signalr

我的系统有一个具有辅助角色的云服务,该角色从队列(Azure服务总线)读取消息,并生成一个线程,该线程使用C#SignalR客户端连接到运行承载SignalR Hub的Web角色的云服务。工作线程运行大约5分钟,执行各种操作,包括间歇性地向Hub发送消息 - 可能总共25条消息。我正在扩展Azure Service Bus主题 - 默认值为5.云服务是独立的但位于同一个虚拟网络中 - 工作者角色指向Web角色的负载均衡器探测器(但是现在我只运行一个每个角色的单个实例。)

我正在尝试确定Worker角色(使用SignalR客户端)和Web角色(托管SIgnalR中心)的容量。

我可以在Worker Role上运行200个并发线程,每次连接,交换消息,以及干净地断开连接。在测试期间,这两种角色都没有超过35%的CPU峰值。 SignalR性能计数器看起来都很棒 - 没有错误,没有SSE或LP连接,也没有横向扩展排队或横向扩展错误。

当我尝试使用300时,工作者角色上的所有线程中的所有线程都突然无法连接,并且会遇到“运行超时尝试连接”问题的TimeoutExceptions。我在Worker角色的C#客户端上启用了跟踪,我发现WebSockets,SSE和LP都失败了(自动:无法连接到使用传输webSockets / serverSideEvents / longPolling)。

我希望了解是否:

a)我的期望已经过去 - 我希望我能够从我的工作者角色到我的WebRole有超过200个并发连接,

b)Web角色的IIS设置是否足够开箱即用?请注意,我已应用Wiki中提供的SignalR性能更改

c)是否存在Worker Role配置/限制以及我可以对单个源进行的并发连接数?请注意,我应用了system.net配置以允许最多1000个。

d)云服务规模是否以任何方式阻止我?两者都设置为“中”大小,即2核和3.5 GB。我是不是通过保持小而改变任何东西?我们的想法是找到这个大小服务器的限制,然后能够根据需要实时应用更多实例。

应该说,如果我添加实例,我可以通过这个限制。但我想了解为什么我目前的瓶颈是200。

欢迎提出任何想法或意见。我有点卡住了。

0 个答案:

没有答案