3

下の図で、中央のメッセージ キューが失敗したとします。送信者は、他のメッセージ キューを使用して送信されたメッセージを引き続き取得できます。

しかし、メッセージを受信した後にメッセージ キューが死んだらどうなるでしょうか。送信者は、メッセージが受信者に送信されたかどうかをどのように認識して、別のメッセージ キューで再送信するかどうかを決定しますか?

同様に、メッセージ キューがメッセージを配信した後に受信者が死亡した場合はどうなりますか? 送信者は、意図した要求が受信者によって実行されたかどうかをどのように知ることができますか?

ここに画像の説明を入力

4

1 に答える 1

7

出発点として、 http://en.wikipedia.org/wiki/Two_Generals%27_Problemを読む必要があります。

これは、コンピューター サイエンスで非常に有名であり、非常に一般的な問題の例です。技術的には、答えがわかっているので「解決済み」と見なされます。ただし、簡単に言えば、あなたが求めていることは (厳密に言えば) 不可能です。信頼度が 1.0 未満の場合、メッセージが配信された (または配信されていない) 任意のレベルの信頼度を達成できるようにする、考案できるプロトコルがあります。

実際には、さまざまな再送信および再同期フォールバックとともに、2 フェーズおよび 3 フェーズの分散トランザクション プロトコルのバリエーションが使用されます。詳細は実装によって異なります。

多くの場合、重複の可能性を許容し、Receiver が適切に応答することを要求します。これは TCP によって行われた選択であり、考えてみれば、TCP は同じ質問に対する合理的な答えを見つけようとしています。

于 2013-02-20T03:43:19.793 に答える