💥

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

2020/10/18に公開

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

今回は、「障害からの復旧」についてまとめました。

<障害発生までの経緯>

プロセス1がプロセス2にメッセージm1を送信します。

プロセス2はプロセス3にメッセージm2を送信します。

プロセス3はプロセス2にメッセージm3を送信します。

プロセス2は状態(スナップショット)を保存します。

プロセス1は状態(スナップショット)を保存します。

プロセス2はプロセス1にメッセージm4を送信します。

プロセス1がプロセス3にメッセージm5を送信します。

プロセス3はプロセス2からのメッセージm2を受信します。

プロセス3は状態(スナップショット)を保存します。

プロセス2はプロセス3からのメッセージm3を受信します。

プロセス1はプロセス2からのメッセージm4を受信します。

プロセス3はプロセス1からのメッセージm5を受信します。

プロセス2はプロセス1からのメッセージm1を受信します。

ここで、プロセス3に障害が発生します。

<保存時点までの単独巻き戻し>

プロセス3のスナップショットのみを使って復元すると、
プロセス3の状態を保存した後に受信したメッセージm5が復元できません。

<分散スナップショットを使った復元>

そこで、プロセス1とプロセス2も復元します。
プロセス1とプロセス2はスナップショットを保存した以降のイベントを再実行する必要があります。
(プロセス1もメッセージm4を受信する必要があると思うのですが、
 何故か言及されてませんでした)

そうすると、プロセス3は無事メッセージm5を受信した状態まで戻り、
全体に矛盾が生じないように復元することができます。

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

Discussion