3

分散化を検討している高性能アプリケーションがあります(MQとしてrabbitMQを使用)。アプリケーションはデータベース(現在はSQLServerですが、他のものに切り替えることもできます)を使用し、パフォーマンスを向上させるためにそのほとんどをRAMにキャッシュします。これにより、アプリケーションの1つがデータベースに書き込むときに、他のアプリケーションのキャッシュされたデータベースが古くなるため、問題が発生します。

これは高可用性コミュニティでよく発生することだと思いましたが、有用なものは見つかりませんでした。私は正しいものを探していないと思います。すぐに使えるソリューションはありますか?

PS:これがserverfaultに属している場合は申し訳ありません-これは開発上の問題なので、ここに属していると思いました

編集:アプリケーションはデータベースの読み取りと書き込みを行います。配布するアプリケーションを変更しているので、複数のアプリケーションがデータベースの読み取りと書き込みを行います。キャッシュは、別のアプリケーションからのDBの変更を認識しない各分散アプリケーションで実行されます。つまり、DBが更新されたかどうか、彼が更新したのではないかどうかをどうやって知ることができますか?

4

1 に答える 1

2

したがって、1つのデータベースとさまざまなサーバー上の多くのアプリケーションがあります。各アプリケーションには独自のキャッシュがあり、すべてのアプリケーションがデータベースの読み取りと書き込みを行っています。

ローカルでキャッシュするのではなく、分散キャッシュを見てください。memcachedまたはAppFabricを確認してください。AppFabricを使用してMicrosoftスタックにキャッシュすることに成功しました。AppFabricに新しいノードを追加するだけで、高可用性のためにオブジェクトが自動的に配布されます。

共有キャッシュに移動すると、キャッシュ内のオブジェクトに有効期限を設定できます。物事が変化したときに積極的にアイテムを追い出す誘惑に抵抗するようにしてください。非常に難しい問題になります。

重要なアイテムを分離し、一度だけキャッシュすることをお勧めします。例として、オークションサイトで作業する場合、非常に積極的にキャッシュしました。オークションリストの価格をキャッシュしたのは1回だけです。そうすれば、他の誰かがそれに入札したとき、私たちは1回の立ち退きをするだけで済みました。キャッシュ全体を調べて、「価格はどこに表示されますか?変更してください」と尋ねる必要はありませんでした。

データの95%については、読み取りは自動的に期限切れになり、書き込みはすぐには影響しません。新しい書き込みが入ったときに、データの5%を削除する必要があります。これは、私が「重要なアイテム」と呼んだものです。常に最新である必要があるもの。

それがあなたにアイデアを与えることを願っています!

于 2013-01-16T18:24:07.440 に答える