Webサーバーとアプリケーションサーバーの間にキャッシュのレイヤーを適用するための優れたツールは何ですか。
基本要件:
- アプリケーションサーバーには、アイテムをキャッシュから削除し、有効期限のあるアイテムをキャッシュに入れる方法が必要です。
- Webサーバーには、アプリケーションサーバーでのスレッド割り当てを必要とせずに、非常に軽量で高速な方法でアイテムをキャッシュから引き出す方法が必要です。
- 必ずしも分散キャッシュ(複数のマシンからアクセス可能)である必要はありませんが、問題はありません。
私が検討した戦略:
- 静的ファイルキャッシング。リクエストが届き、ハッシュされます。ファイルが存在する場合はそれを提供し、存在しない場合はリクエストをアプリサーバーにルーティングします。同時実行性による高I/Oの問題またはファイルロックの問題ですか?メモリ内のカーネルレベルのキャッシュにより、ファイルシステムが実際に非常に高速であるというのは正確ですか。
- mongodbやredisなどのKey-ValueDBを使用します。これにより、完成したHTML/JSONフラグメントがdbに保存されます。Webサーバーは、DBから読み取り、必要に応じてアプリサーバーにルーティングできるようになっています。アプリサーバーは、DBに挿入/削除するために装備されます。
- memcachedやVarnishのようなメモリキャッシュ(Varnishについてはよくわかりません)。memcachedに関する私の唯一の懸念は、いつでも3〜10ギガバイトのデータをキャッシュしたいということです。これは、メモリに安全に割り当てることができる量を超えています。memcachedにはファイルシステムにスピルするメソッドがありますか?
このタイプのキャッシングレイヤーを試すときのいくつかのテクニックと落とし穴について何か考えはありますか?