LRU キャッシュなどを使用して、各サーバーにローカル キャッシュがあるとします。あるノードでオブジェクトを無効にすると、他のノードに気付くはずです。これが jgroups で実装されているのを見てきました。
jms(ActiveMQとしましょう)を使用した「キャッシュ無効化キュー」がアプリケーションに適合するかどうかを知りたいです。応答時間などについてはわかりません。
それはあなたの制約、すなわちあなたが古い読み取りに耐えることができる期間(すなわち、古いデータを返すキャッシュ)に依存します。
これがまったく問題にならない場合、JMSは、すべてのメンバーが最終的に「フラッシュ」メッセージを確実に受け取ることができるため、すべてのメンバーに通知するための優れたクリーンな方法です。
廃止されたデータがすぐにフラッシュされることを確認する必要がある場合は、JMSを使用して、ゲームにトランザクションと要求/応答サイクルを追加することにより、フラッシュを調整できます。ただし、注意しないと、デッドロックや飢餓状態に陥る可能性があります。これは、同期に支払う必要のある代償です。
これが気になる場合は、同じ結果を達成するために他にどのようなテクノロジーを使用できるかが問題になります。RMIまたはソケットを使用することもできますが、その場合は、車輪の再発明を行う必要があります(つまり、JMSが現在ある場所に到達するために多くの時間を費やすことになります)。しかし、それは1つのトランスポートテクノロジーを別のテクノロジーに置き換えるだけであり、同期の問題には役立ちません。
または、クラスタリングをサポートするキャッシュを使用することもできます。TerracottaのEnterpriseEhcacheを試すことができますが、内部では、同様の手法を使用してキャッシュの同期を維持します。大きな利点は、Ehcacheが何年も使用されている(=デバッグされている)ため、よく知られた問題にしか遭遇しないことです。
jms(ActiveMQとしましょう)を使用した「キャッシュ無効化キュー」がアプリケーションに適合するかどうかを知りたいです。
絶対。JMS は多少のオーバーヘッドを追加しますが、1 秒間に数千のトランザクションがなければ、それを感じることはありません。Aaron はよく説明してくれました。いくつかのアプリケーションで JMS をキャッシュの無効化に使用していることを付け加えておきますが、これは完全に機能します。興味のある資料: