問題タブ [2phase-commit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
transactions - 分散取引契約
送金を実行する 2 つのノードがあるとします。ノード A はある口座から別の口座への送金を開始し、ノード B はこの取引を完了する責任があります。したがって、このトランザクションを完了するには、ノード A はノード B に TRANSFER リクエストを送信する必要があり、成功すると、ノード B は TRANSFER リクエストの確認で応答する必要があります。考えられる問題は次のとおりです。TRANSFER リクエストを受信すると、ノード B はトランザクションを実行しましたが、応答を送信できませんでした。したがって、ノード A は要求が失敗したと考えて問題を報告しますが、実際にはトランザクションは完了しました。
2 フェーズ コミット プロトコル (ノード B が TRANSFER 要求の受信時にトランザクションをコミットせず、トランザクションを実行し、ノード A からのコミット確認を待機するだけ) を考慮したとしても、同様の問題が発生する可能性があります: ノード A が TRANSFER コミット要求を送信するときノード B がそのリクエストを受信し、トランザクションが実際に完了したことを確認することはできません (このリクエストが宛先ホストに配信されたとしても、何らかのプロセスによってコミットされたことを確認することはできません)。
この問題にどう取り組むか、それとも本当に問題なのか?
distributed-transactions - 2 フェーズ コミット (2PC) がブロックされるのはなぜですか?
コーディネーターが失敗したときに 2PC がブロックされる理由を誰か教えてもらえますか? コホートが 2PC でタイムアウトの概念を採用していないためですか?
参考文献: Muhammad Atifによる、2 フェーズ コミットおよび 3 フェーズ コミット プロトコルの分析と検証