【えいちえるしー(はいぶりっどろんりくろっく)】

HLC(ハイブリッド論理クロック) とは?

💡 「体感時間」と「出来事の順番」を同時に管理する分散システムの時計係
📌 このページのポイント
HLC — 物理時刻 + 論理カウンタのタイムスタンプ ノード A send msg1 (T=100, c=0) event e2 (T=105, c=0) recv msg2 (T=112, c=1) ノード B recv msg1 (T=100, c=1) send msg2 (T=110, c=0) event e3 (T=115, c=0) HLCタイムスタンプ (T, c) のペア T = 物理時刻(NTP) c = 論理カウンタ T が同じなら c で比較 更新ルール max(自分のT, 相手のT) 同じならc+1 矢印はメッセージ送受信(因果関係)を表す
HLCのタイムスタンプ (物理時刻, 論理カウンタ) でイベント順序を管理するイメージ
ひよこ ひよこ

分散システムって、複数のサーバーが別々に動いてるんだよね?時刻の管理って難しいの?

ペンギン先生 ペンギン先生

そうなんだよ。ネットワーク越しだと時刻がほんの少しズレるし、どのイベントが先に起きたか確定しにくいんだよね

ひよこ ひよこ

それってNTP同期すれば解決するんじゃないの?

ペンギン先生 ペンギン先生

NTPは数ミリ秒〜数十ミリ秒のズレが残るんだよ。同じミリ秒に2つのノードで書き込みが起きたら、どっちが先かわからなくなるんだ

ひよこ ひよこ

じゃあHLCってどうやって解決するの?

ペンギン先生 ペンギン先生

HLCはタイムスタンプを `(物理時刻, 論理カウンタ)` のペアで管理するんだよ。物理時刻が同じなら論理カウンタで順番をつけるんだ

ひよこ ひよこ

なるほど!メッセージを受け取ったときはどうなるの?

ペンギン先生 ペンギン先生

送信者と受信者の物理時刻を比べて大きい方を採用して、同じなら論理カウンタを+1するんだよ。こうすると「因果関係」が崩れないんだ

ひよこ ひよこ

Lamport clockとの違いは何なの?

ペンギン先生 ペンギン先生

Lamport clockは純粋に論理カウンタだけだから、実時間とどんどんズレていくんだよ。HLCは物理時刻を軸にしつつ論理カウンタで補正するから、人間が見てわかる時刻に近い値を保てるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「HLC」って出てきたら「分散システムで時刻と順序を同時に管理する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Hybrid Logical Clock」 = ハイブリッド論理クロック
💬 「Hybrid(混合)」は物理クロックと論理クロックを組み合わせていることを指すんだよ。2014年にMunindar Singh氏らが提案した比較的新しい概念だよ
← 用語集にもどる