Мы говорим о реализации memcached в нашем php-приложении, используя php-клиент memcache. Мы размещаемся в среде AWS, в которой в настоящее время используется 7 интерфейсных серверов для доступа к одной базе данных. Конечно, мы хотим разделить кеш между всеми серверами. Должны ли мы установить memcached на всех интерфейсных серверах и просто добавить их в пул memcached (callind addserver (xx.xx.xxx.xx)), или мы должны иметь выделенные компьютеры как "серверы memcached"?
Вы должны пойти с кластером ElastiCache, используя механизм Memcached с выделенными узлами/серверами, образующими кластер.
Обратите внимание, что в Memcached узлы не знают друг о друге, но Memcached Client обрабатывает распределение данных и балансировку нагрузки в кластере. Таким образом, ваши интерфейсные серверы будут совместно использовать кластер Memcached, не беспокоясь о том, какой узел в настоящее время хранит данные.
Важное значение здесь - использовать функцию автоматического обнаружения, предоставляемую ElastiCache в развертывании AWS, где вашему приложению не требуется вручную подключаться к отдельным узлам кеша; вместо этого ваше приложение подключается к конечной точке конфигурации. Серверу приложений /front-end не нужно знать количество узлов в кластере, и любое количество узлов может быть добавлено или удалено в зависимости от пропускной способности и загрузки приложения.
Более подробную информацию о функции автоматического обнаружения можно найти здесь.
Это действительно помогло нам в нашем производственном развертывании, где мы горизонтально масштабировали наш кластер Memcached с 2 до 16 узлов без перезагрузки сервера приложений.
Я бы пошел с экземпляром ElastiCache, который запускает memcahced engine (если вы хотите придерживаться memcahced).
Мы использовали эту установку в производстве, и ее намного проще поддерживать, чем несколько отдельных установок. Кроме того, вам не нужно решать проблемы непоследовательности.