Допустим, простая браузерная викторина. По WebSocket подключаются к серверу и отправляют ответы.
Игра на время. У всех появился вопрос, 10 секунд на раздумья и выбор варианта ответа.
Сервер приинял ответы, разослал всем статистику: вариант А: 100 человек, вариант Б: 200.
Просто, пока не ломится туда по 100 тыс. участников. Приходится масштабировать.
Несколько серверов. Каждый обслуживает свой пул WS-соединений == пул игроков.
Данные игроков — только в памяти этого сервера.
Закончилось время вопроса. Надо собрать общую статистику между всеми серверами и отправить каждый своим игрокам.
Какой паттерн (?) есть для этой ситуации?
Пришло в голову пока 2 варианта.
- Серверы полностью одинаковы и равноправны. Знают контакты остальных. Каждый шлёт остальным свои данные, ждёт (определённое время?) от остальных их инфу. Суммирует, рассылает по своему пулу.
- Мастер-сервер и «рабы». Мастер собирает со всех инфу, у себя суммирует, отправляет по всем итог. Те рассылают по пулу.
Какой из вариантов лучше и почему, как считаете?