Задать вопрос
@xfg

Как реализовать архитектуру масштабируемого Websocket сервера?

Есть websocket-сервер и redis db в которую сохраняются id всех подключенных клиентов. Websocket-серверов может быть много. Клиенты (браузеры) с помощью лоад балансера подключаются к разным websocket-серверам. Клиенты (браузеры) могут запрашивать id всех клиентов у websocket-сервера, websocket-сервер запрашивает эти данные из redis db и отдает клиенту (браузеру).

Вопрос, что делать, если какой-то экземпляр websocket-сервера вышел из строя (отключили питание например)? Установленные соединения были разорваны, но в redis db всё еще хранятся id клиентов вышедшего из строя websocket-сервера и клиенты подключеные к другим websocket-серверам теперь получают неверную информацию. Как отдавать клиентам актуальные данные (id клиентов) когда случаются аварийные ситуации, которые невозможно никак программно обработать на машине, на которой произошла аварийная ситуация?
  • Вопрос задан
  • 1047 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
max-kuznetsov
@max-kuznetsov
Главный IT-архитектор
Мы аварийные ситуации отслеживаем мониторингом. Как только сервер отваливается, мы обрабатываем соответствующее событие (в Вашем случае, как я понял, это будет коррекция данных). Скорость реакции зависит от того, как быстро мониторинг узнает о сбое. В любом случае есть некоторое время, когда клиенты могут получить устаревшую информацию.

Сбои бывают разные. Крах процесса, крах ОС, отказы оборудования. Тут нужен определённый анализ угроз для Вашей системы. Мониторинг должен отрабатывать все критические ситуации.

Ещё одним возможным решением может быть поднятие нового сервера из горячего резерва, который возьмёт на себя работу с данными "погасшего" сервака. Но это минуты отсутствия реакции сервера...
Ответ написан
Комментировать
SagePtr
@SagePtr
Еда - это святое
А что мешает отдельный демон сделать, который держит соединения со всеми вебсокет-серверами, и как только связь с сервером пропадает - выполняет очистку в бд и сообщает балансеру временно не использовать этот сервер.
В идеале - заниматься этим должен сам балансер, постоянно находиться на связи с серверами и знать, какие из них не работают и вообще на сколько каждый из них загружен в данный момент.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы