У меня есть наивная версия PokerApp, работающая как веб-сайт Azure.
Сервер хранит в своей памяти состояние столов (чей сейчас ход, значение блайндов, карты…) и т.д.
Проблема здесь в том, что я не знаю, насколько я могу полагаться на то, что память веб-сервера будет «постоянной». Простой перезапуск сервера приведет к потере этой памяти, и, следовательно, все игры, запущенные до перезапуска, будут потеряны / вызовут проблемы.
Я читал об использовании TableStorage для хранения данных сеанса и обмена ими между экземплярами, но в моем случае я хочу поделиться не просто строкой текста, а, скажем, например, объектом лобби, который содержит всю информацию, связанную с играми.
Это очень приблизительно структура объекта, который у меня есть в памяти.
После некоторых ваших комментариев вы можете увидеть, что объект, который необходимо сохранить, довольно большой и почти постоянно находится в процессе хранения. Я не знаю, насколько хорошо сериализация и десериализация будут работать для меня здесь...
Должен ли я рассмотреть лазурную виртуальную машину, которая, как я надеюсь, будет иметь постоянную память вместо веб-сайта? Или есть лучший подход для достижения чего-то подобного?
Спасибо всем за ответы и комментарии, вы дали понять, что нельзя полагаться на локальную память при работе в облаке. Я собираюсь провести рефакторинг и оптимизировать объект «состояние», а затем использовать службу кэширования.
Однако мне приходят в голову два вопроса, и как только вы прольете свет на них, я обещаю, что заткнусь и приму отличный ответ @astaykov.
СОВМЕСТНОСТЬ НА УРОВНЕ ЭКЗЕМПЛЯРА. У меня есть классические блокировки потоков в моем приложении, чтобы избежать проблем с параллелизмом, поэтому я надеюсь, что есть что-то эквивалентное для тех служб кэширования, которые вы, ребята, предлагаете?
Кроме того, у меня есть несколько тайм-аутов за столом (увеличение блайндов, количество секунд, в течение которых игроки должны действовать…). Допустим, пользователь только что сбросил карты, он закончил взаимодействие с объектом состояния, поэтому я обновляю кеш. Пока этот объект состояния (к которому принадлежат таймеры) кэшируется, мои таймеры перестают тикать…
Я знаю, что не очень хорошо объясняю здесь свои мысли, но надеюсь, вы, ребята, понимаете мою точку зрения.