10

Galera クラスタ (mysql) を DB として使用する分散アプリケーションにキャッシュを追加したいと考えています。各アプリケーション ノード (java) には、読み取り用のローカル キャッシュがあり、DB ノードと通信します。

問題は、クラスター内の別のノードによってキャッシュ内のエントリが変更されたときに、キャッシュ内のエントリを無効にする方法がわからないことです。
私の最初の試みは DB トリガーを使用することでしたが、すぐにトリガーがレプリケーション更新によってスローされないことに気付きました。
他のアイデアは、ネットワーク トラフィックを監視して変更を検索したり、DB のバイナリログを監視したりすることですが、どちらも実装が非常に難しいようです。

問題は次のとおりです。レプリケーションで、あるノードから別のノードへの変更を検出する実用的な方法はありますか?
キャッシュの無効化を実装する際の他のアイデアはありますか?

アプリケーション ノードを介して変更を伝達する分散キャッシュを使用することもできると思いますが、各アプリ ノードで分離されたキャッシュを使用し、ノード間のデータ同期を DB クラスターに委任することをお勧めします。キャッシュ通信が冗長なネットワーク トラフィックとして表示されます...

前もって感謝します。

4

2 に答える 2

1

MySQL のみを使用して変更を検出する唯一の方法は、バイナリ ログを解析することです。

それに代わるものを求めたので、メッセージング システム (Apache ActiveMQ など) を使用してノード間でキャッシュ無効化メッセージを送信し、各ノードが独自のキャッシュをクリアできるようにすることができます。

于 2017-07-22T02:05:19.893 に答える