2013-09-14 1 views
2

Мы разрабатываем gamified environment, который облегчает изучение «скучного» материала. Недавно мы выпустили релиз 1.0, который состоит из следующих модулей:Распределенный игровой сервер с использованием торнадо

  1. Django основанный веб-портал для изучения учебных курсов, просмотр таблицы лидеров (оценка), личная деятельность и достижения.
  2. Торнадо в режиме реального времени и служба уведомлений. Мы используем sockjs-tornado, разработанные mrjoes. Мы воспользовались совместным сеансом: если пользователь вошел в систему на сайте django, он автоматически открыл канал с нашей внутренней сетью Comet.
  3. Асинхронный многопользовательский игровой сервер Tornado. Опять же, мы использовали sockjs-tornado для подключения и обслуживания игроков (сокетов), синхронизируя события цикла игры по сети.

Теперь я работаю над возможностями масштабируемости и высокой доступности системы. Основная задача - распределить нагрузку на узлы игрового кластера правильно и последовательно (без потери данных, сбоя в случае сбоя, перебалансировки, если один из игровых серверов (цикл) внезапно выйдет из строя). Основная цель заключается в том, чтобы сделать взаимодействие клиента с игрой максимально плавным: клиенту не следует делать дополнительные действия: вручную пересоединяться, если игра разбилась из-за сбоя сервера. На рисунке изображена возможная архитектура распределенного игрового сервера.

В случае, если некоторые действия выполняются на .../игре на сайте Django (действия CRUD), основанный на торнадо игровой маршрутизатор, уведомляемый в реальном времени через своего рода коллекцию oplog (ограниченная коллекция в mongodb, которая хвостается игровым маршрутизатором). Если это новая игра, Game Router определяет следующий хост (игровой сервер) для игры по специальному алгоритму (самая быстрая поездка в биение, или минимальное количество активных (активных) игр). Кроме того, Game Router уведомляет соответствующий цикл, публикуя сообщение для обмена темами.

Если какой-либо игровой сервер аварийно завершает работу, игровой маршрутизатор будет немедленно уведомлен и будет перегружать нагрузку, беря простоя в кластере memcached.

В случае неудачи, как клиент может легко подключиться к новому игровому серверу? Я не хочу открывать избыточный канал (соединение сокетов). Я иду в путь или нет? Пожалуйста, предоставьте мне хорошие подходы, критики, методы. Было бы неплохо, если бы вы делились своими умами, рисуя диаграммы.

Заранее спасибо. enter image description here

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^