Я знаю, что вокруг этой темы было много дискуссий, но я не смог найти именно то, что искал.Вот проблема:
Предположим, что:
- У нас есть веб-приложение, которое устанавливает соединение веб-сокета с веб-сервисом, который находится за балансировщиком нагрузки (HAProxy), и мы имеем2 из этих веб-сервисов
- Каждый веб-сервис может инициировать некоторые события, такие как сохранение в базе данных, и мы хотим уведомить наших клиентов (веб-приложение) об этом событии через веб-сокеты.
Вот проблема: подключение к веб-сокету может быть установлено с 1 веб-сервисом, а событие может происходить на другом.Таким образом, в этом случае мы не сможем уведомить клиента.
Несколько идей о том, как мне решить эту проблему:
- Заставить балансировщик нагрузки установить соединение через веб-сокет со всемисерверы прозрачно для клиента.Таким образом, клиент устанавливает одно соединение, а LB создает несколько бэкэндов.Насколько я понимаю, это невозможно с типичными балансировщиками нагрузки, такими как HAProxy
- . Клиент устанавливает несколько подключений к веб-сокетам, столько же, сколько имеется серверных веб-сервисов.Не лучшая практика, но может сработать.Есть ли способ передать какой-то заголовок, чтобы сообщить HAProxy об установлении соединения с определенным бэкэндом?
- Есть какая-то внешняя постоянная очередь и 1 рабочий, который будет обрабатывать соединения через веб-сокеты.Здесь возникает вопрос HA.Как справиться с развертыванием такого обработчика и т. Д.?Другим вариантом может быть обработка этих событий во всех экземплярах веб-службы и отправка сообщения в веб-приложение только в том случае, если в этом веб-сервисе имеется соединение через веб-сокет.
Довольно многоидеи, каждый довольно сомнительный.Может быть, я упускаю какое-то очевидное решение такой (предположительно) распространенной проблемы.Любые указатели высоко ценятся.
Заранее спасибо!