5

ウィキペディア (http://en.wikipedia.org/wiki/Three-phase_commit_protocol) で 3 フェーズ コミット プロトコルを読んでいましたが、3PC が失敗するシナリオが思い浮かびました。

2 人の参加者 A と B と、コーディネーター C がいるとします。

1) C はプリコミット メッセージを A に送信し、プリコミット メッセージを B に送信する前に、A と C の両方が同時に失敗します。2) トランザクションが再開され、A からの応答がないため、B はトランザクションを中止します。 3) A は、プリコミット メッセージを既に取得しているため、トランザクションをコミットします。

これは、3PC が対処することになっていた 2PC の元の問題でもありませんでしたか? 3PC はどのように問題を解決していますか? 何が欠けていますか。ありがとう。

4

3 に答える 3

3

アップデート:

参加者は、コーディネーターから doCommit メッセージを受け取るまでコミットしませんか?

preCommit メッセージを受信した後、参加者は最初に待機し、タイムアウトが発生した場合はコミットに進みます。

precommit メッセージを送信した後にコーディネーターが失敗し、参加者の少なくとも 1 人が precommit メッセージを持っている場合、システムの残りの部分は、システムの状態を既に知っているため、先に進んでコミットできます。

はい、新しいコーディネーターは、自分が既に preCommit メッセージを受信した参加者であることを確認すると、他の参加者に preCommit メッセージを再送信します。

于 2012-06-29T16:42:34.923 に答える
0
于 2013-03-17T04:01:47.063 に答える