Где хранить кэш в SaaS приложении?

Я разрабатываю SaaS приложение на Symfony2. Система проста: балансер, несколько серверов приложений, и несколько серверов баз данных.

Каждый сервер приложений имеет полную копию приложения, различия только в параметрах.
Есть несколько вопросов:
  • Где хранить кэш клиента?
  • Где хранить файловый кэш app/сache? Отдельно для каждого клиента app/сache/clientN?
  • Где хранить HTTP кэш? На серверов приложений или узеле балансировки?
    Что делать, если каждый клиент на своем домене?
  • Где хранить кэш запросов/результатов к базе данных? На сервер БД в памяти (Redis / Riak / Memcached)?


66471d5046d345ea9d40cae728163088.png
  • Вопрос задан
  • 2662 просмотра
Решения вопроса 1
tzlom
@tzlom
Кеш клиента
Вообще зависит от балансировщика, общее правило - кеш как можно ближе к сервису который его использует.
Т.Е. если у вас сервера приложений по принципу один клиент один сервер, то имеет смысл поднять кешевых сервисов на каждый сервер по своему (не обязательно заводить для этого по машине), это даст вам горизонтальное масштабирование.

HTTP кэш - нужен ли? и опять таки зависит от приложений и количества хитов, если там куча статики одинаковой для всех и её тяжко отдавать - втыкайте между балансировщиком (тяжко отдавать, пускай кеш балансирует тоже) и сервисом (а он будет кеш наполнять)

Файловый кеш - вопрос к тому что за сервис и как оно работает, возможно вообще не нужен, возможно HTTP кеша хватит.

Кеш БД храни в БД (КО в деле)

А вообще сперва рекомендую профилировать количество хитов кеша и объёмы, кеширование не серебрянная пуля, иногда лучше подправить бизнес логику чем ставить кеширование в каждую точку, лучший кандидат в кеш это то, к чему: обращаются часто, по одним и тем же ключам, весит оно не много, меняется редко а вычисляется сложно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы