【べくとるくろっく】

ベクトルクロック とは?

最終更新:
💡 カウンタの配列で、通信を通じた前後関係を比べる

分散システムで、各ノードのイベントにカウンタの配列を付け、通信を通じた因果的な前後関係を比較する論理時計。実際の時刻や、すべての出来事の一列の順番を表すものではない。

📌 このページのポイント
通信を通じた、出来事の前後関係配列の順は [A, B] / 初期値は [0, 0]A[1, 0][2, 0]内部イベント送信B[0, 1][2, 2]内部イベント受信[2, 0]を送る受信:成分ごとの最大値 → 自分の成分を +1[1, 0] と [0, 1] は並行(因果順なし)右へイベントが進む。実時間の尺度ではない
Aの送信[2, 0]とBの[0, 1]の最大値は[2, 1]。受信イベントでBを増やすと[2, 2]になる。斜めの矢印はメッセージ、横の矢印は各ノード内のイベントの進行。
ひよこ ひよこ
普通の時計とどう違うの?
ペンギン先生 ペンギン先生
何時何分かではなく、ある出来事の情報が別の出来事へ届き得る前後関係を扱うよ。同じノード内の順序と、メッセージの送信から受信への順序を組み合わせて考える。すべての出来事に前後を付けるわけではないんだ。
ひよこ ひよこ
配列の数字はどう増えるの?
ペンギン先生 ペンギン先生
AとBの2台なら[A, B]の順にカウンタを持ち、[0, 0]から始める例で考えよう。内部イベントや送信では、自分の成分を1増やす。Aで内部イベントが1回起き、その後送信すると、Aの値は[1, 0]、[2, 0]と進むよ。
ひよこ ひよこ
受け取ったBはどうするの?
ペンギン先生 ペンギン先生
Bが[0, 1]のときにAの[2, 0]を受信する例なら、成分ごとの大きい方を取って[2, 1]にし、受信イベントとしてBの成分を1増やして[2, 2]にする。この更新規則なら、Aの情報を受け取ったことも表せるんだ。
ひよこ ひよこ
配列をどう比べるの?
ペンギン先生 ペンギン先生
全成分が相手以下で、少なくとも1成分が小さければ因果的に前だよ。[2, 0]は[2, 2]より前で、全部が小さい必要はない。一方、[1, 0]と[0, 1]はどちらも相手以下にならず、並行だと分かるんだ。
ひよこ ひよこ
並行なら同時に起きたの?
ペンギン先生 ペンギン先生
実際の時刻が同じという意味ではないよ。このモデルで一方から他方への因果的な経路がないということ。更新の競合を考える材料にはなるけれど、どの値を採用するかまで自動で決める仕組みではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ベクトルクロック」って出てきたら「配列で出来事の因果的な前後関係を比べる論理時計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Vector Clock」 = ベクトル時計
💬 複数の成分を持つベクトルで論理時刻を表すよ。各成分には、そのノードの出来事について知っているカウンタ値を持つんだ。

参考資料

← 用語集にもどる