具有广播网络套接字的负载均衡器

时间:2019-04-23 00:44:22

标签: websocket .net-core signalr load-balancing

尽管我们对LoadBalancing网络套接字有很多疑问,但我找不到能解决我特定情况的解决方案。

我将具有以下设计:

                           |=============|
        -------------------|  ActiveMQ   |--------------------
        |                  |=============|                   |
        |                                                    |
|=============|            |=============|            |=============|
|  MyApp_01   |------------|   Database  |------------|  MyApp_02   |
|=============|            |=============|            |=============|
                                                             |
                                  ---------------------------
                                  |
                           |=============|
                           |LoadBalancer |
                           |=============|
                                  |
                                  |
                           |=============|
                           |   Client    |
                           |=============|

我具有以下组成部分:

  • 我的应用程序部署在两个实例中
  • 我的两个应用程序都在监听的ActiveMQ队列
  • 两个应用程序都写入队列消息的数据库。
  • 一个负载均衡器,尚未在Nginx或某些Microsoft Service Fabric之间定义(我对这些技术真的不太了解,是什么使得它很难搜索:S)
  • 我的连接到负载均衡器的客户端应用

我的应用程序的两个实例都在同一队列上侦听。收到消息后,实例会将其从队列中删除,将其保存在数据库中,并通过websocket将其广播到连接到它的任何客户端。这两个实例都在侦听队列,因此它们中的任何一个都可以作为从队列中删除消息的实例,我对此没有任何控制权(我也不应该)。 例如,在上述情况下,当我们有一个连接到MyApp_02的客户端并且MyApp_01是获取并广播该消息的客户端时,就会出现问题。客户端将永远不会收到任何消息,因为它已连接到MyApp_02

在这种情况下我该怎么办?我应该找到一种从所有实例播放的方式吗?我该怎么做? Nginx或Microsoft Service Fabric上有什么可以帮助我的吗?

如果有关系,我在应用程序中使用.Net Core 2.2SignalR

预先感谢

0 个答案:

没有答案