📡

分散処理を勉強した記録~その32~

2021/05/08に公開

この記事は、
「分散処理システム」著:真鍋義文 森北出版株式会社
を参考にしています。

今回は「リーダー選挙問題を解く自己安定アルゴリズム」についてです。
プロセスにそれぞれIDが割振られており、その値は不変とします。
また、プロセスは誰をリーダーと認めるか、
「leader」という変数にIDの値を格納するとします。
今回、リーダー選挙をするにあたって、
IDの値が最大のプロセスをリーダーとして認定するものとします。

すべてのプロセスは常に遷移可能とします。
P1とP2が通信し、P1の「leader」の値が「2」に更新されます。

今度はP0とP1が通信し、
P0はP1の「leader」の値と自分の「leader」の値を比較することによって、
自分の「leader」の値を「2」に更新します。

こうすることによって、
P2が無事にリーダーに選出されました。

一見これで解決したかのように見えますが、
ここで、故障が発生した場合どうなるでしょうか。

P1の「leader」の値が「3」になってしまいました。

P0はP1の「leader」の値を参照してしまい、
同様に「3」として値を更新してしまいます。

P2もP1の値を参照してしまい、
最終的には存在しないプロセスのID「3」を参照してしまいます。
こうなると、誰も選ばれなくなってしまうので、
このアルゴリズムは不適切です。

今回はここまでです。ありがとうございました。

Discussion