Cache nginx dibagikan di antara banyak server

9

Kami memiliki 8 server REST-ish API dengan Nginx menggunakan FastCGI dengan PHP-FPM untuk menangani permintaan. Kami saat ini menggunakan caching FastCGI Nginx '(seperti arahan fastcgi_cache_path). Ini berarti bahwa respons API di-cache, tetapi ada cache terpisah untuk setiap server.

Apakah ada cara yang baik untuk berbagi penyimpanan cache di antara delapan server?

Kami telah mempertimbangkan untuk menggunakan Redis sebagai penyimpanan bersama, tetapi modul yang tersedia tampaknya membutuhkan perubahan aplikasi. Dalam beberapa kasus, kami mungkin ingin menyimpan tanggapan di luar kendali kami (alih-alih HTTP ke API eksternal). Idealnya, pengganti drop-in untuk caching built-in Nginx untuk FastCGI dan respons HTTP akan tersedia.

Brad
sumber
Mengapa Anda tidak membuat caching bukan pada layer frontend (Nginx), tetapi pada backend layer (aplikasi PHP)?
Max Kochubey
@ menggantung saya tidak melihat alasan untuk menemukan kembali roda. Cache nginx berfungsi dengan baik dan cepat. Jika kita dapat menghindari overhead menjalankan permintaan melalui aplikasi sama sekali, kita dapat menjaga hal-hal baik dan cepat. Nginx menanggapi permintaan dalam cache kami dalam waktu kurang dari 5 milidetik. Meluncurkan aplikasi PHP kami, bahkan untuk itu memberikan respons dalam cache, mungkin 10x lebih lambat dari itu. Caching Nginx bekerja dengan baik untuk kita sekarang, kita hanya perlu mendistribusikan cache itu di antara banyak server.
Brad
1
ok, daripada Anda dapat mencoba menggunakan modul Nginx SRCache pihak ke-3 untuk menyimpan konten yang di-cache dalam Memcached od Redis khusus.
Max Kochubey
1
@Brad Ini adalah peretasan jadi saya tidak akan menjawabnya: saat ini kami memiliki skrip yang dijalankan setiap malam yang menggunakan rsync di antara direktori cache nginx di server kami untuk menjaga setiap data dengan file cache terbaru dari semua yang lain. Script diakhiri dengan nginx restart yang anggun dan pemeriksaan sukses. Seperti yang saya katakan, ini hacky, tetapi bekerja untuk kita pada sistem throughput yang tinggi.
mVChr
@ mVChr Menarik. Sudahkah Anda mencoba menjalankan rsync atau yang serupa terus menerus? Pada akhirnya untuk saya gunakan, saya akhirnya membuat Redis bekerja tetapi ini tidak memungkinkan untuk cache yang sangat besar karena seluruh koleksi Redis harus ada dalam memori. 16GB mengisi aplikasi saya dengan cepat.
Brad

Jawaban:

1

Tampaknya ada posting blog yang agak baru di https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/ tentang masalah ini. Contoh pertama ini bisa berguna jika Anda menjalankan lebih dari dua server cache nginx.

Terutama bagian kedua dari posting yang terdengar menarik untuk kasus penggunaan saya saat ini, di mana saya ingin secara otomatis merangkak kembali item yang diubah ke dalam cache saya.

Ini harus bekerja dengan Versi open source NGINX juga. Pada dasarnya ini bekerja dengan memproksi permintaan yang di-cascade melalui masing-masing Server NGINX (Nginx-Cache1-> NGinx-Cache2-> Origin-Server) setiap server melakukan cache dari hulu yang relevan dan jika diinginkan dimungkinkan untuk membuat HA Cluster juga. https://www.nginx.com/blog/share-caches-nginx-plus-cache-clusters-part-2/

macbert
sumber