Назад | Перейти на главную страницу

Кеш Nginx используется несколькими серверами

У нас есть 8 серверов REST-ish API с Nginx, использующими FastCGI с PHP-FPM для обработки запросов. В настоящее время мы используем кеширование FastCGI Nginx (такие директивы, как fastcgi_cache_path). Это означает, что ответы API кэшируются, но для каждого сервера есть отдельный кеш.

Есть ли хороший способ разделить кеш-память между всеми восемью серверами?

Мы рассмотрели возможность использования Redis в качестве общего хранилища, но доступные модули, похоже, требуют изменений в приложении. В некоторых случаях мы можем захотеть кэшировать ответы вне нашего контроля (через HTTP на внешние API). В идеале должна быть доступна замена встроенного в Nginx кэширования FastCGI и HTTP-ответов.

Кажется, есть довольно новое сообщение в блоге на https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/ об этом вопросе. Этот первый пример может быть полезен, если вы запускаете более двух кеш-серверов nginx.

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

Он также должен работать с версией NGINX с открытым исходным кодом. В основном он работает путем проксирования запроса, каскадно передаваемого через каждый сервер NGINX (Nginx-Cache1-> NGinx-Cache2-> Origin-Server), каждый сервер кэширует из соответствующего восходящего потока, и при желании можно также создать кластер высокой доступности. https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-2/