Выбор ответа Senior WebSocket и SSE обновлено

Чат на нескольких инстансах

Вопрос

Чат на WebSocket запустили на трёх инстансах за балансировщиком. Пользователи в одной комнате перестали видеть часть сообщений. Что исправит проблему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Пересылать сообщения между инстансами через общую шину (Redis pub/sub, брокер). Каждый клиент подключён к одному инстансу, и инстанс знает только о своих соединениях.

Варианты ответа

  1. Перейти на HTTP/3: соединения QUIC станут общими для всех инстансов за балансировщиком
  2. Увеличить таймаут простоя соединений на балансировщике, чтобы клиенты не отваливались
  3. Пересылать сообщения между инстансами через общую шину (Redis pub/sub, брокер)правильный ответ
  4. Хранить историю сообщений комнаты в localStorage клиентов и досылать её при входе

Разбор

Каждый клиент подключён к одному инстансу, и инстанс знает только о своих соединениях. Сообщение, пришедшее на инстанс 1, должно попасть на 2 и 3, это делает pub/sub (например адаптер Redis в Socket.IO). Версия HTTP не делает соединения общими между серверами. Таймаут лечит обрывы, а не потерю между инстансами. localStorage клиента ничего не знает о чужих сообщениях.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.