Мы рассматриваем лучшую стратегию использования кеша (memcache
или redis
на основе) в нашем приложении (Symfony2
). Он будет развернут на нескольких (пока 3) отдельных машинах с балансировкой нагрузки и отдельными реплицированными базами данных + одно общее общее хранилище. Также есть четвертый сервер, который используется в основном для клиентов и рассылки массовых рассылок. Обратите внимание, что кеш будет часто не только использоваться, но и обновляться из-за частого изменения данных.
Пока у нас есть три попытки:
мы размещаем единый кеш на четвертой машине и делимся им по всему домену. Плохая сторона в том, что когда эта машина выходит из строя, все выходит из строя.
мы размещаем отдельные кеши на нескольких машинах, у каждой свой кеш. Обратной стороной является то, что мы должны зарезервировать больше вычислительных мощностей для выполнения избыточных задач.
одна машина восстанавливает кеш, а затем распространяет его на отдельные машины (обратная сторона такая же, как в первом случае).
Как лучше всего с этим справиться?
Если я хорошо прочитал опубликованную информацию, memcache
поддерживает репликацию данных на нескольких серверах с помощью демона, называемого repcached
. Я должен добавить, что никогда не использовал memcache.
я использовал redis
, и я знаю, что он поддерживает установки Master-Slave.
В обоих случаях вам может потребоваться установить демон на всех машинах и реплицировать данные в режиме главный-подчиненный. Затем вы должны настроить задержку обновления, чтобы получить согласованную реплику для вашей установки.
Причины включают:
На стороне приложения вы можете захотеть подключиться к одному экземпляру вашего демона для чтения и записи (обычно к главному), и пусть ведомые устройства будут лениво реплицировать данные.
Это позволило бы снизить производительность, потому что кеш всегда может напрямую обращаться к горячим данным. Эта настройка также обеспечит приличную доступность (допуская X время «пропущенных данных» из-за сбоя, где вы можете настроить X по своему усмотрению). Вы также можете сбалансировать нагрузку на запись DNS в кэше, чтобы экземпляры приложения всегда находили доступный кеш.
Если вы выберете redis
обязательно включите оба режима сохранения данных (RDB и AOF).