2016-06-14 43 views
1

同じServiceAの複数のインスタンスが異なるjvmで実行されています。しかし、それらはすべてDBから同じバックエンドデータを共有しています重複した要求を避けるための分散キャッシング

クライアントからの要求があると、ServiceAはそのデータがそのデータベースで利用可能かどうか調べ、そうでない場合は、別のServiceBにそのデータを取得し、それはDBであり、それをクライアントに返します。

2人のクライアントが同時に要求し、ServiceAの2つのインスタンスがそれらの要求を処理する場合、それらのインスタンスはどちらも効果的にServiceBを呼び出してそのデータを取得できます。 SerivceBへのリクエストが1つだけになるように、このケースをどのように処理する必要がありますか。

答えて

0

ハッシュをリクエストに適用し、リクエストがすでに存在するかどうかをリクエストキューにチェックインします。

それが効果的にあなたも、あなたが複数のキャッシュサーバの場合は、ハッシュ化された要求を送信する場所を知っている必要があります動作させるために:あなたは寛容的かつ効率的な障害になりたい:

あなたは2キャッシュバック終了とします。

効率的な:これは、弾性率がどのサーバあなたがフォルトトレラントがあなたのキャッシュバックエンドがあるかどうかを判断する通信層の一部である必要があり

を話すことを決定したハッシュ上での簡単なモジュラスで行うことができます実際に利用可能で、どのようにフォールバックするかを決めるところです。

1

2つは何に追加する@norbert-van-nobelen;

さらに2つの可能性があります。

  • 一つは、あなたのServiceBが
  • 他のオプションは、あなたのサービスAがあなたのServiceBと同期との競合状態に対処できるようにすることです処理するために、どの要求決めさせることです。

あなたのサービスの記述は私にとって非常に抽象的なので、サービスBに分散ロックとして何かを実装したり、分散キャッシュを組み込んだりすることができます。

例; http://blogs.alachisoft.com/distributed-locking/

関連する問題