マルチWebサーバーと分散型の第2レベルのキャッシュは共存でき、おそらく共存すべきだと思います。
まず、memcachedを例にとると、分散オブジェクトの保存がサポートされているため、それを使用していない場合は、それに切り替えることができます。できます。
次に、増加するWeb要求に応答するために、Webサーバーファームを導入していると思います。これは、データの要求が増加することを意味します。キャッシュを強制終了した場合、データベースをどれだけ最適化しても、クエリを使用してデータベースを破棄することはできません。したがって、実行時間を改善しますが、データベースがデータを返すのを待ちます。
これは、Webノード1がデータセットAを要求し、Webノード2がデータセットAを要求する場合に特に当てはまります->同じクエリを2回実行しますが、第2レベルのキャッシュでは1回だけ実行します。
だから私の推薦は:
2番目のレベルのキャッシュを強制終了しないでください。あなたはすでにそれを実装するためにリソースを費やしており、それを無効にすることによってあなたはあなたのアプリケーションのパフォーマンスを改善するつもりはありません。memcachedの単一のノードでさえ、まったくない場合よりも高速になります。
データベース操作を最適化してください。これは、データベース側(インデックス、ビュー、sp、関数、おそらく読み取り専用ノードと書き込み専用ノードを持つクラスター)とアプリケーション側(クエリの最適化、遅延/積極的な読み込みプロファイリング、データをフェッチしない)の両方からのことを意味します必要ありません。Future、MutliQuery、MultiCriteriaを介して、複数のクエリを1回のラウンドトリップに結合します)
第2レベルのキャッシュ実装を最適化してください。有効期限が無限のデータセットがあるため、データベースに1回だけクエリを実行します。また、有効期限が短いデータセットがあるため、コストのかかるクエリがより頻繁に実行される可能性があります。クエリとデータベースを最適化することで、クエリのパフォーマンスが向上しますが、第2レベルのキャッシュは、有効期限の短いデータセットがキャッシュによってより頻繁にフェッチされるピーク負荷時にスキンを節約します。
テキストクエリの使用が日常業務である場合は、データベースのフルテキスト機能を使用するか、さらに良いことに、Lucene.NET(NHibernate.Searchを介してNHibernateと統合できる)などの独立したサービスを使用します。