Как сделать объекты Python постоянными в веб-приложении?

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

По соображениям производительности повторная инициализация состояния при каждом запросе данных (полунормализованных) базы данных быстро становится невозможной. Было бы весьма предпочтительно, например, кэшировать объект Python состояния каким-либо образом, чтобы его можно было просто использовать и / или обновлять при необходимости. Однако, поскольку это веб-приложение, существует несколько процессов, обслуживающих запросы, поэтому использование глобальной переменной исключено.

Я попытался сериализовать соответствующий объект (с помощью pickle) и сохранить сериализованные данные в БД, и сейчас я экспериментирую с кэшированием сериализованных данных через memcached. Тем не менее, это все еще имеет значительные накладные расходы на сериализацию и десериализацию объекта часто.

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

Мне нужен совет! Это мой первый шаг в разработке веб-приложения, поэтому я надеюсь, что это достаточно распространенная проблема, так как существуют известные решения таких проблем. На данный момент достаточно решений, которые предполагают, что бэкэнд Python работает на одном сервере, но дополнительные баллы за решения, которые также масштабируются до нескольких серверов :)

Заметки:

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

Ответы на вопрос(6)

Ваш ответ на вопрос