Веб-сокеты при балансировке нагрузки - PullRequest
0 голосов
/ 09 октября 2018

Я знаю, что вокруг этой темы было много дискуссий, но я не смог найти именно то, что искал.Вот проблема:

Предположим, что:

  • У нас есть веб-приложение, которое устанавливает соединение веб-сокета с веб-сервисом, который находится за балансировщиком нагрузки (HAProxy), и мы имеем2 из этих веб-сервисов
  • Каждый веб-сервис может инициировать некоторые события, такие как сохранение в базе данных, и мы хотим уведомить наших клиентов (веб-приложение) об этом событии через веб-сокеты.

Вот проблема: подключение к веб-сокету может быть установлено с 1 веб-сервисом, а событие может происходить на другом.Таким образом, в этом случае мы не сможем уведомить клиента.

Несколько идей о том, как мне решить эту проблему:

  • Заставить балансировщик нагрузки установить соединение через веб-сокет со всемисерверы прозрачно для клиента.Таким образом, клиент устанавливает одно соединение, а LB создает несколько бэкэндов.Насколько я понимаю, это невозможно с типичными балансировщиками нагрузки, такими как HAProxy
  • . Клиент устанавливает несколько подключений к веб-сокетам, столько же, сколько имеется серверных веб-сервисов.Не лучшая практика, но может сработать.Есть ли способ передать какой-то заголовок, чтобы сообщить HAProxy об установлении соединения с определенным бэкэндом?
  • Есть какая-то внешняя постоянная очередь и 1 рабочий, который будет обрабатывать соединения через веб-сокеты.Здесь возникает вопрос HA.Как справиться с развертыванием такого обработчика и т. Д.?Другим вариантом может быть обработка этих событий во всех экземплярах веб-службы и отправка сообщения в веб-приложение только в том случае, если в этом веб-сервисе имеется соединение через веб-сокет.

Довольно многоидеи, каждый довольно сомнительный.Может быть, я упускаю какое-то очевидное решение такой (предположительно) распространенной проблемы.Любые указатели высоко ценятся.

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

...