【ランポートクロック】

ランポートクロック とは?

最終更新:
💡 因果的な順序を保って、出来事に番号を付ける

分散システムで、各プロセスのカウンタにより出来事へ論理時刻を付ける仕組み。同じプロセス内の順序とメッセージを通じた因果的な順序を保つが、実時刻やすべての因果関係は分からない。

📌 このページのポイント
ランポート:因果順序を保つ P1 P2 1 2 3 5 1 3 4 送信 受信 受信 送信 値2 値4 受信:max(自分,受信値)+1 P2:max(1,2)+1=3 P1:max(3,4)+1=5 a→bならC(a)<C(b)。逆は言えない
0から数える整数カウンタの例。橙の矢印は送信から受信、横線は各プロセス内の順序。位置や間隔は実時間の縮尺ではない。各カウンタの値を同じにそろえる仕組みではなく、因果的な順序を保つ。
ひよこ ひよこ
ランポートクロックって何? 時計の一種なの?
ペンギン先生 ペンギン先生
時刻を秒で測る時計ではなく、出来事に数字を付ける論理時計だよ。各プロセス内の順序や、メッセージの送信から受信へのつながりを保つ。カウンタが同じ実時間を示したり、全プロセスで同じ値になったりする必要はないんだ。
ひよこ ひよこ
どうやって数えるの?
ペンギン先生 ペンギン先生
整数カウンタを0から始める例では、通常のイベントで+1する。送信もイベントとして数え、その値をメッセージに添える。受信イベントの値は、自分の現在値と受信値の大きい方に1を足すんだ。受信をさらに別の+1で二重に数えないようにしよう。
ひよこ ひよこ
それでどんな順番が分かるの?
ペンギン先生 ペンギン先生
happens-beforeという因果的な順序を保つよ。同じプロセス内でaの後にbが起きた場合、aが送信でbがその受信の場合、さらにそのつながりをたどれる場合をa→bと書く。このとき必ずC(a) < C(b)になるんだ。
ひよこ ひよこ
C(a)が小さければ、aが先に起きたって言えるの?
ペンギン先生 ペンギン先生
逆は成り立たないよ。数字が小さくても、メッセージなどのつながりがなく、因果的には並行かもしれない。ここでの並行は、壁の時計で同じ瞬間だったという意味ではないんだ。カウンタだけで実時間の前後や経過秒数は判断できないよ。
ひよこ ひよこ
同じ数字が付いたら、並べられないの?
ペンギン先生 ペンギン先生
論理時刻が同じ場合に、プロセスIDの決めた順序で比べれば全順序を作れるよ。この順序はa→bに矛盾しないが、並行な出来事に付けた順は規則によるもの。実際の因果関係が増えたわけではないんだ。因果関係そのものを詳しく調べるには、より多くの情報を持つ方式が必要だね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ランポートクロック」って出てきたら「因果的な順序を保つよう、出来事に数字を付ける論理時計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Lamport clock(Lamport timestamp)」 = ランポートの論理時計
💬 レスリー・ランポートが1978年の論文「Time, Clocks, and the Ordering of Events in a Distributed System」で提案したから、この名前だよ

参考資料

← 用語集にもどる