Многопользовательская игра.
Авторизованный пользователь инициирует какое-то действие и жмет "Старт".
Идет поиск игры - проверяется несколько параметров, если все совпало - пользователь переходит в уже созданную комнату, где вместе с остальными ожидает начало игры.
Если поиск ничего не дал, то создается новая комната и пользователь ждет подключения остальных.
БД(postgresql) используется для журналирования действий.
Процесс поиска, сравнения параметров, добавление новых пользователей в комнаты, создание/удаление комнат - происходит через переменную в node.js
Сейчас все работает отлично, в рамках одного процесса node.js.
Но при добавлении модуля cluster вся логика рушится, ибо даже в рамках одной машины переменная игры у каждого своя. Тем более невозможно поднять новые сервера(инстансы) по той же причине.
Что посоветуете ? UPD
Для комнат игры существует два состояния - ожидание и активная игра(переменная принимает одно из значений). Комнаты для игры создаются самими пользователями и удаляются автоматически при отсутствии пользователей в них.
Redis хорош, когда знаешь что надо вытаскивать из хранилища, но не для выборки(хотя я могу и ошибаться).
Обновил.
Если закреплять комнаты за определенными воркерами, то будет тоже что и сейчас. Каждый будет попадать или создавать свою игру, все будет происходить локально в рамках одного процесса.
Если комнаты небольшие, то не вижу ничего страшного в том, что каждый воркер будет сопровождать определённые комнаты и хранить их состояние. Если вам нужна функциональная равнозначность воркеров по любой из комнат, значит не храните состояние в воркерах, а храните в Redis.
Комнаты большие.
Проблема не в том чтобы хранить, а в том как получить нужные данные. Да можно все отправлять в Redis, но как потом организовать поиск в Redis ?
Oleg_Bar: мне не очень понятна ваша проблема, т.к. я не знаю архитектуры вашего приложения. В Redis команда keys довльно гибкая и позволяет искать по маске. Там немного иной подход в организации данных. Но я ни разу не упирался рогом в проблему невозможности искать по значению. Организуйте так, чтобы добираться по ключу.