Я сомневаюсь, что это даже возможно, но вот проблема и предлагаемое решение (осуществимость предлагаемого решения является предметом этого вопроса):
У меня есть некоторые «глобальные данные», которые должен быть доступен для всех запросов. Я сохраняю эти данные в Riak и использую Redis в качестве уровня кэширования для скорости доступа (пока...). Данные разбиты примерно на 30 логических фрагментов, каждый размером около 8 КБ.
Каждый запрос требуется для чтения 4 из этих блоков по 8 КБ, в результате чего из Redis или Riak считываются 32 КБ данных. Это ДОПОЛНЕНИЕ к любым данным, специфичным для запроса, которые также необходимо прочитать (что довольно много).
Предполагая даже 3000 запросов в секунду (это не работающий сервер, поэтому у меня нет реальных цифр, но 3000ps — разумное предположение, может быть больше), это означает 96 КБ/с передачи от Redis или Riak в ДОПОЛНЕНИЕ к уже не -незначительные другие вызовы из логики приложения. Кроме того, Python анализирует JSON этих 8-килобайтных объектов 3000 раз в секунду.
Все это, особенно то, что Python постоянно выполняет десериализацию данных, похоже на полная трата, и совершенно элегантным решением было бы просто кэшировать десериализованные данные в нативном объекте в памяти в Python, который я могу периодически обновлять по мере того, как все эти «статические» данные становятся несвежий. Раз в несколько минут (или часов), вместо 3000 раз в секунду.
Но я не знаю, возможно ли это вообще. Вам действительно понадобится «всегда работающее» приложение, чтобы кэшировать любые данные в своей памяти. И я знаю, что это не относится к комбинации nginx+uwsgi+python (по сравнению с чем-то вроде узла) - данные в памяти python НЕ будут сохраняться во всех запросах, насколько мне известно, если только я не ужасно ошибся.
К сожалению, это система, которую я «унаследовал» и поэтому не могу вносить слишком много изменений с точки зрения базовой технологии, и при этом я недостаточно осведомлен о том, как работает комбинация nginx+uwsgi+python с точки зрения запуска процессов Python и их сохранения. Данные в памяти Python - это означает, что я МОГУ ужасно ошибаться в своем предположении выше!
Итак, прямой совет о том, будет ли работать это решение + ссылки на материалы, которые могли бы помочь мне понять, как будет работать nginx+uwsgi+python с точки зрения запуск новых процессов и выделение памяти очень помогло бы.
P.S:
Просмотрел некоторую документацию по nginx, uwsgi и т. д., но еще не полностью понял последствия для моего варианта использования. Надеюсь добиться некоторого прогресса в этом направлении сейчас
Если бы дело с памятью МОГЛО сработать, я бы отказался от Redis, поскольку я кэширую в нем ТОЛЬКО статические данные, о которых я упоминал выше. Это делает внутрипроцессный постоянный кеш Python в памяти еще более привлекательным для меня, сокращая одну движущуюся часть в системе и по крайней мере ЧЕТЫРЕ сетевых цикла туда и обратно на запрос.