Бэкэнд-обработка для Django - PullRequest
4 голосов
/ 13 июля 2010

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

Итак, каков наилучший способ отделить нагрузку от веб-сервера, в идеале таким образом, чтобы его можно было даже запустить наотдельная машина?

  • Простой модуль Python с бесконечным циклом?
  • Распределенная задача в чем-то вроде Сельдерей ?
  • Какой-токроссплатформенный планировщик Cron?
  • Какая-нибудь другая необычная функция Django или сторонняя библиотека, о которой я не знаю?

Я также хочу минимизировать дублирование кода, используя то же самоемодельный слой.Это, вероятно, означает, что моему сервису потребуется доступ к коду модели Django, так что это определенно определяет, как я спроектирую сервис.

Ответы [ 2 ]

6 голосов
/ 13 июля 2010

Я думаю, что сельдерей, который вы упоминаете в своем вопросе, - это путь сюда.Он хорошо взаимодействует с остальной частью вашей установки, поддерживает конечную цель разделения систем и совместим с Django.

0 голосов
/ 13 июля 2010

Я бы просто написал бэкэнд для использования интерфейса базы данных Django (посмотрите код установки в вашем manage.py), породил его как свой собственный процесс и связал бы его с Protocol Buffers, Этот маршрут должен перейти на отдельную машину без особых усилий. MPI тоже может быть вариантом.

Каналы, FIFO и большинство других IPC требуют, чтобы оба процесса были в одном окне.

Хотя я должен указать на ошибку в вашей предпосылке:

К сожалению, этот наивный подход совсем не масштабируется. Я не хочу перегружать свой веб-сервер, когда я запускаю много одновременных игр.

Если вы запускаете параллельные игры, пока вы храните все части для данной игры на одном сервере, это не проблема, если для всех игр не нужен общий ресурс. Тогда реальной проблемой становится распределение нагрузки между серверами.

...