Выбор ответа Senior WebSocket и SSE обновлено
Чат на нескольких инстансах
Вопрос
Чат на WebSocket запустили на трёх инстансах за балансировщиком. Пользователи в одной комнате перестали видеть часть сообщений. Что исправит проблему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Пересылать сообщения между инстансами через общую шину (Redis pub/sub, брокер). Каждый клиент подключён к одному инстансу, и инстанс знает только о своих соединениях.
Варианты ответа
- Перейти на HTTP/3: соединения QUIC станут общими для всех инстансов за балансировщиком
- Увеличить таймаут простоя соединений на балансировщике, чтобы клиенты не отваливались
- Пересылать сообщения между инстансами через общую шину (Redis pub/sub, брокер)правильный ответ
- Хранить историю сообщений комнаты в localStorage клиентов и досылать её при входе
Разбор
Каждый клиент подключён к одному инстансу, и инстанс знает только о своих соединениях. Сообщение, пришедшее на инстанс 1, должно попасть на 2 и 3, это делает pub/sub (например адаптер Redis в Socket.IO). Версия HTTP не делает соединения общими между серверами. Таймаут лечит обрывы, а не потерю между инстансами. localStorage клиента ничего не знает о чужих сообщениях.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.