Birden çok sunucu arasında paylaşılan Nginx önbellek


9

İstekleri karşılamak için PHP-FPM ile FastCGI kullanan Nginx ile 8 REST-ish API sunucumuz var. Şu anda Nginx'in FastCGI önbelleğini kullanıyoruz (yönergeler gibi fastcgi_cache_path). Bu, API yanıtlarının önbelleğe alındığı, ancak her sunucu için ayrı bir önbellek olduğu anlamına gelir.

Önbellek depolama alanını sekiz sunucu arasında paylaşmanın iyi bir yolu var mı?

Redis'i paylaşılan depolama alanı olarak kullanmayı düşündük, ancak mevcut modüller uygulama değişiklikleri gerektiriyor gibi görünüyor. Bazı durumlarda, yanıtları kontrolümüz dışında (HTTP üzerinden harici API'lara) önbelleğe almak isteyebiliriz. İdeal olarak, Nginx'in yerleşik FastCGI ve HTTP yanıtlarını önbelleğe alması için bir yedek değiştirme kullanılabilir.


Neden ön uç katmanında (Nginx) değil, arka uç katmanında (PHP uygulaması) önbellekleme yapmıyorsunuz?
Max Kochubey

@ Hangover Tekerleği yeniden icat etmek için hiçbir neden göremiyorum. Nginx önbellek iyi ve hızlı çalışır. Uygulama aracılığıyla isteklerin yerine getirilmesini engelleyebilirsek, işleri güzel ve hızlı tutabiliriz. Nginx, bizim için önbelleğe alınan isteklere 5 milisaniyeden kısa sürede yanıt veriyor. Önbelleğe alınmış bir yanıt sağlamak için bile PHP uygulamamızı başlatmak muhtemelen ondan 10 kat daha yavaş olacaktır. Nginx önbellekleme şimdi bizim için iyi çalışıyor, bu önbelleği birçok sunucu arasında dağıtmamız gerekiyor.
Brad

1
tamam, önbelleğe alınmış içeriği özel Memcached od Redis'te depolamak için 3. taraf Nginx SRCache modülünü kullanmaya çalışabilirsiniz .
Max Kochubey

1
@Brad Bu hacky yani bir cevap olarak koymak olmaz: şu anda her diğerlerinden en son önbellek dosyaları ile güncel tutmak için sunucularımızda nginx önbellek dizinleri arasında rsync kullanan bir gece çalışma komut dosyası var. Komut dosyası, zarif bir nginx yeniden başlatma ve başarı kontrolü ile sona erer. Dediğim gibi, hacky, ama bizim için yüksek bir verim sistemi üzerinde çalışıyor.
mVChr

@mVChr İlginç. Sürekli rsync veya benzeri çalıştırmayı denediniz mi? Sonunda kullanımım için sonunda Redis'i çalıştırdım, ancak tüm Redis koleksiyonunun bellekte olması gerektiğinden bu çok büyük bir önbelleğe izin vermiyor. 16GB uygulamamda hızlı bir şekilde doluyor.
Brad

Yanıtlar:


1

Bu konuda https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/ adresinde oldukça yeni bir blog yazısı var gibi görünüyor . İkiden fazla nginx önbellek sunucusu çalıştırırsanız, bu ilk örnek yararlı olabilir.

Özellikle yazının ikinci kısmı, değiştirilen öğeleri önbelleklerime otomatik olarak yeniden taramak istediğim mevcut kullanım durumum için ilginç geliyor.

NGINX'in açık kaynaklı versiyonu ile de çalışmalıdır. Temel olarak, her bir NGINX Sunucusu (Nginx-Cache1-> NGinx-Cache2-> Origin-Server) üzerinden basamaklandırılan isteği proxy ile çalışarak her bir sunucu ilgili akış yukarıdan önbelleğe alır ve istenirse bir HA Kümesi de oluşturmak mümkündür. https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-2/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.