Какой хороший аналог 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 , может считаться «общей памятью».

  • Python Selector (библиотека маршрутизации URL), опыт / мнения?
  • Объект WSGIRequest не имеет атрибута «пользователь» Django admin
  • Какие веб-фреймворки поддерживают Python3 (соответствие PEP3333 - WSGI 1.0.1)
  • Как скопировать wsgi.input, если я хочу обрабатывать данные POST более одного раза?
  • Как легко хранить удобные для чтения на python структуры данных только для чтения в общей памяти
  • Как решить ошибки импорта при попытке развернуть Flask с помощью WSGI на Apache2
  • Гунинорн не работает при использовании WSGI
  • Запланировать скрипт python для запуска на веб-сервере
  • Python - лучший язык программирования в мире.