Кеш Nginx ділиться між декількома серверами


9

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

Чи є хороший спосіб поділитися сховищем кешу серед усіх восьми серверів?

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


Чому ви не зробите кешування не на шарі frontend (Nginx), а на резервному шарі (програма PHP)?
Макс Кочубей

@hangover Я не бачу причин повторно винаходити колесо. Кеш Nginx працює добре і швидко. Якщо ми взагалі можемо уникнути накладних витрат запитів через додаток, ми можемо зберігати речі красивими та швидкими. Nginx відповідає на кешовані запити для нас за 5 мілісекунд. Запуск нашого PHP-програми, навіть для надання кешованої відповіді, ймовірно, у 10 разів повільніше, ніж це. Кешування Nginx зараз добре працює для нас, нам просто потрібно розподілити цей кеш між багатьма серверами.
Бред

1
добре, ніж ви можете спробувати використовувати сторонній модуль Nginx SRCache для зберігання кешованого вмісту у виділеному Memcached od Redis.
Макс Кочубей

1
@Brad Це хакі, тому я не ставлю це як відповідь: в даний час у нас є щоденний сценарій, який використовує rsync між каталогами кеш-файлів nginx на наших серверах, щоб тримати кожен з останніми файлами кешу від усіх інших. Сценарій закінчується витонченим перезавантаженням nginx та перевірки успіху. Як я вже казав, це хакі, але це працює для нас у системі високої пропускної здатності.
mVChr

@mVChr Цікаво. Ви намагалися постійно виконувати rsync чи подібні? Зрештою, для мого використання я зрештою змусив Redis працювати, але це не дозволяє отримати дуже великий кеш, оскільки вся колекція Redis повинна зберігатись у пам'яті. 16 Гб швидко заповнюється в моїй заяві.
Бред

Відповіді:


1

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

Особливо друга частина публікації звучить цікаво для мого поточного використання, де я хочу автоматично повторно сканувати змінені елементи в свої кеші.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.