複数のサーバー間で共有されるNginxキャッシュ


9

リクエストを処理するためにPHP-FPMでFastCGIを使用するNginxを備えた8つのREST風APIサーバーがあります。現在NginxのFastCGIキャッシング(のようなディレクティブfastcgi_cache_path)を使用しています。つまり、API応答はキャッシュされますが、サーバーごとに個別のキャッシュがあります。

8つのサーバーすべてでキャッシュストレージを共有する良い方法はありますか?

Redisを共有ストレージとして使用することを検討しましたが、使用可能なモジュールにはアプリケーションの変更が必要なようです。場合によっては、(HTTPを介して外部APIに)制御外で応答をキャッシュしたい場合があります。理想的には、FastCGIとHTTP応答のNginx組み込みキャッシュのドロップイン代替品が利用可能になるでしょう。


キャッシュをフロントエンドレイヤー(Nginx)ではなく、バックエンドレイヤー(PHPアプリケーション)に作成しませんか?
Max Kochubey 2014年

@hangoverホイールを再発明する理由はないようです。Nginxキャッシュは適切かつ高速に動作します。アプリケーションを介して要求を実行するオーバーヘッドをまったく回避できれば、物事を高速かつ高速に保つことができます。Nginxは、キャッシュされたリクエストに5ミリ秒未満で応答します。PHPアプリケーションを起動すると、キャッシュされた応答を提供する場合でも、おそらくそれよりも10倍遅くなります。Nginxキャッシングは今私たちにとってうまく機能しています。そのキャッシュを多くのサーバーに分散する必要があるだけです。
ブラッド

1
わかりました。サードパーティのNginx SRCacheモジュールを使用して、キャッシュされたコンテンツを専用のMemcached od Redisに保存してみてください。
Max Kochubey 14年

1
@Bradこれはハッキーなので答えはしません。現在、サーバー上のnginxキャッシュディレクトリ間でrsyncを使用して、他のすべての最新のキャッシュファイルで最新の状態に保つためのスクリプトを毎晩実行しています。スクリプトは、優雅なnginxの再起動と成功のチェックで終了します。私が言ったように、それはハッキーですが、それは私たちにとってハイスループットシステムで機能します。
mVChr 2014

@mVChr興味深い。rsyncまたは同様のものを継続的に実行してみましたか?結局のところ、私は最終的にRedisを機能させましたが、Redisコレクション全体がメモリ内にある必要があるため、これは非常に大きなキャッシュを許可しません。私のアプリケーションでは16GBがすぐにいっぱいになります。
ブラッド14

回答:


1

この問題については、https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/にかなり新しいブログ投稿があるようです。この最初の例は、3つ以上のnginxキャッシュサーバーを実行している場合に役立ちます。

特に、投稿の2番目の部分は、変更されたアイテムを自動的にキャッシュに再クロールしたいという現在の使用例にとって興味深いようです。

NGINXのオープンソースバージョンでも動作するはずです。基本的には、各NGINXサーバー(Nginx-Cache1-> NGinx-Cache2-> Origin-Server)を介してカスケードされたリクエストをプロキシすることで機能し、各サーバーは関連するアップストリームからキャッシュします。必要に応じて、HAクラスターを作成することもできます。 https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-2/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.