2PC は安全である、つまり、トランザクションをコミットするか、ロールバックするかのどちらかであるという多くの読みを見つけました。より具体的には、[コミットした場合、誰も中止しません。1 つが中止された場合、誰もコミットしません]。( http://www0.cs.ucl.ac.uk/staff/B.Karp/gz03/f2010/gz03-lecture6-2PC.pdf )
ウィキペディアから、私はコミット段階で、すべてのプロセスが次のことを行うことを知っています:
- コーディネーターはすべての参加者にコミット メッセージを送信します。
- 各参加者は操作を完了し、トランザクション中に保持されていたすべてのロックとリソースを解放します。
- 各参加者は、確認をコーディネーターに送信します。
- コーディネーターは、すべての確認応答が受信されるとトランザクションを完了します。
ステージ 1 では、コーディネーターが複数の参加者にメッセージを送信した後に失敗するのではないかと思います。つまり、一部の参加者はコミット メッセージを受信し、他の参加者は受信しません。その後、受け取った人はコミットしますが、他の人はまだブロックされます. では、ここで 2PC は安全性を確保していないと思いますか?