Балансировщик нагрузки с трансляцией веб-сокета - PullRequest
2 голосов
/ 23 апреля 2019

Несмотря на то, что у нас есть много вопросов о веб-сокетах LoadBalancing, я не смог найти один, посвященный моему конкретному сценарию.

У меня будет следующий дизайн:

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

У меня есть следующие компоненты:

  • Мое приложение развернуто в двух экземплярах
  • Очередь ActiveMQ, которую оба приложения слушают
  • База данных, в которую оба приложения записывают сообщения очереди.
  • Балансировщик нагрузки, который еще предстоит определить между Nginx или некоторыми Microsoft Service Fabric (я действительно не очень разбираюсь в этих технологиях, что делает поиск еще сложнее: S)
  • Мой клиентприложение, которое подключается к балансировщику нагрузки

Оба экземпляра моего приложения прослушивают одну и ту же очередь.Получив сообщение, экземпляр удаляет его из очереди, сохраняет в базе данных и передает через веб-сокеты любому клиенту, подключенному к нему.Оба экземпляра прослушивают очередь, поэтому любой из них может быть тем, кто удаляет сообщение из очереди, я не имею над ним никакого контроля (я думаю, что не должен).Проблема возникает, когда, например, в приведенном выше сценарии у нас есть клиент, подключенный к MyApp_02, а MyApp_01 - это тот, кто получает и передает сообщение.Клиент никогда не получит никакого сообщения, потому что он подключен к MyApp_02.

Что я могу сделать в этом сценарии?Должен ли я найти способ вещания из всех случаев ...?Как бы я это сделал?Есть ли в Nginx или Microsoft Service Fabric что-нибудь, что могло бы мне помочь?

Если это имеет значение, я использую .Net Core 2.2 с SignalR в своем приложении.

Заранее спасибо,

...