motacaplaのめう

日頃得られた知見と気付きをdumpするところ

合意プロトコル(Consensus Protocol)についてまとめてみる 第2章 2-phase commit (2PC)

この記事は何?

下記の続編である。今回は2 Phase Commit (2PC) についてまとめる。

tikeda-meu.hatenablog.com

2-phase commit (2PC) とは

2PCはatomic commitment protocol (ACP) の一種である。このatomic commitとは、"変更"操作の集合として処理が実行される/されないが決定することである。つまり全ての変更が実行される or ロールバックされ全て実行されないのいずれかしかないことを意味する(=原子性の保証)。

2PCのイメージを下図に示す。

f:id:tikeda_meu:20190623224340p:plain
2pc

2PCではリクエストを送る coordinator プロセスと 処理を担う participant(=worker) プロセスが存在する。

2PCという名の通り、第1 Phaseと第2 Phaseの二段階で処理が実施される。

第1 Phaseでは、coordinatorからcommit予定の全participantプロセスに対してprepareリクエストを送信する。ここで全員からYesの返事があれば、第2 Phaseへと進む。timeoutもしくはNoの返事があれば、そこでabortする。

第2 Phaseでは、coordinatorから全participantプロセスに対してcommitリクエストを送信する。ここで全員はcommitを実施し、結果をcoordinatorに送信する。

基本的にはこれだけであるが、異常系についても想像すると面白い。

例. coordinatorが死んだと思っていたら実は生きていた件、coordinatorを復活させるべきヒーラーが死んでいる件

www.slideshare.net

References

Two-phase commit protocol - Wikipedia

分散トランザクションに挑戦しよう!