Какой хороший аналог Flask / Python / WSGI для общедоступных хранилищ PHP Apache, таких как apc_store / apc_fetch?

Я сделал пару лет крупномасштабного развития игрового сервера в PHP. Балансировщик нагрузки делегирует входящие запросы на один сервер в кластере. Во имя лучшей производительности мы начали кэшировать все статические данные (в основном объекты модели игрового мира) на каждом из экземпляров в этом кластере, непосредственно в общей памяти Apache, используя apc_store и apc_fetch .

По ряду причин мы начинаем разрабатывать аналогичную игровую среду в Python, используя микрофрейм Flask. На первый взгляд, это хранилище памяти этого экземпляра – это одна часть, которая, как представляется, не переводится непосредственно в Python / Flask. В настоящее время мы рассматриваем возможность запуска Memcached локально на каждом экземпляре (чтобы избежать потоковой передачи довольно крупных объектов модели по проводу из нашего основного кластера Memcached).

Что мы можем использовать вместо этого?

2 Solutions collect form web for “Какой хороший аналог Flask / Python / WSGI для общедоступных хранилищ PHP Apache, таких как apc_store / apc_fetch?”

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

Также напряжение памяти, которое может иметь локальное хранилище ключей / значений в каждой системе, может замедлить другие функции вашего игрового сервера. Хотя это во многом зависит от количества кэшируемых данных.

В целом наилучшим подходом было бы запустить некоторые тесты, чтобы узнать, какую производительность вы получите с кластером memcached и типами объектов, которые вы храните, и локальное хранилище.

В зависимости от того, какие другие функции вы хотите от вашего хранилища ключей / значений, вы также можете изучить некоторые альтернативы, такие как mongodb ( http://www.mongodb.org/ ).

[Пять месяцев спустя]

Наша игровая среда выполнена.

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

Поскольку наши фабрики Model откладываются к пулу экземпляров, экземпляры модели нужно создавать только один раз для каждого развертывания на сервере – это важно, потому что в нашем масштабе MySQL будет плакать под любой постоянной нагрузкой. Мы выполнили свою задачу: не передавать эти данные по проводке, сохраняя определения элементов как можно ближе к нашему приложению: в самом коде приложения.

Теперь я понимаю, что мой первоначальный вопрос был наивным, потому что, в отличие от стека LAMP, сервер Flask работает между запросами, сама память сервера является «разделяемой памятью» – нет необходимости в чем-то вроде APC, чтобы это сделать. Фактически, все , что находится вне области обработки запроса, оно само и локальное хранилище потоков Flask , может считаться «общей памятью».

  • AWS Elastic Beanstalk - время ожидания скрипта перед возвратом заголовков: application.py
  • Можно ли создавать потоки в wsgi-приложении?
  • Запланировать скрипт python для запуска на веб-сервере
  • Передайте параметры командной строки скрипту uwsgi
  • В чем смысл uWSGI?
  • Работая с глобальным синглом в Flask (WSGI), мне нужно беспокоиться о состоянии гонки?
  • Как скопировать wsgi.input, если я хочу обрабатывать данные POST более одного раза?
  • Почему gevent в приложении Flask с Apache + mod_wsgi создает NotImplementedError?
  • Доступ к php $ _SESSION из python (wsgi) - возможно ли это?
  • Каковы ограничения подключения для Google Cloud SQL от App Engine и как лучше всего использовать соединения с БД?
  • Невозможно загрузить целевой WSGI-скрипт в качестве модуля Python
  • Python - лучший язык программирования в мире.