Мы разрабатываем игровая среда что облегчает изучение «скучного» материала. Недавно мы запустили релиз 1.0, который состоит из следующих модулей:
Сейчас я работаю над возможностями масштабирования и высокой доступности системы. Основная проблема заключается в правильном и равномерном распределении нагрузки между узлами игрового кластера (без потери данных, аварийного переключения в случае сбоя, перебалансировки в случае внезапного сбоя одного из игровых серверов (цикла)). Основная цель сделать взаимодействие клиента с игрой как можно более плавным: клиент не должен выполнять дополнительные действия: вручную переподключиться, если игра вылетела из-за сбоя сервера. Фигура изображена возможная архитектура распределенного игрового сервера.
В случае, если какие-либо действия выполняются на … / игре на сайте Django (действия CRUD), основанный на торнадо Game Router уведомляет в режиме реального времени через своего рода коллекцию оплогов (ограниченная коллекция в mongodb, которая отслеживается Game Router). Если это новая игра, Game Router определяет следующий хост (игровой сервер) для игры по специальному алгоритму (самое быстрое срабатывание пульса или минимальное количество живых (активных) игр). Далее, Game Router уведомляет соответствующий Loop, публикуя сообщение для обмена темой.
В случае сбоя какого-либо игрового сервера, Game Router будет немедленно уведомлен и перебалансирует нагрузку, переместив пустые игры в кластер memcached.
В случае сбоя, как клиент может без проблем подключиться к новому игровому серверу? Я не хочу открывать резервный канал (сокет).
Собираюсь ли я правильно или нет? Пожалуйста, предоставьте мне хорошие подходы, критику, методы. Было бы неплохо, если бы вы поделились своими мыслями, рисуя диаграммы.
Заранее спасибо.
Пожалуйста, прочитайте диалог между @Rustem и @mrjoes, следуя https://github.com/mrjoes/sockjs-tornado/issues/50
Других решений пока нет …