【えいちえるしー(はいぶりっどろんりくろっく)】
HLC(ハイブリッド論理クロック) とは?
💡 「体感時間」と「出来事の順番」を同時に管理する分散システムの時計係
📌 このページのポイント
- 物理時刻(NTP)と論理カウンタの2つを組み合わせたタイムスタンプを持つ
- Lamport clockのように因果関係を保ちつつ、物理時刻との乖離を最小限に抑える
- メッセージ受信時に物理時刻・論理カウンタの両方を更新して単調増加を保証する
- CockroachDBやYugabyteDBなどの分散DBで採用されている
分散システムって、複数のサーバーが別々に動いてるんだよね?時刻の管理って難しいの?
そうなんだよ。ネットワーク越しだと時刻がほんの少しズレるし、どのイベントが先に起きたか確定しにくいんだよね
NTPは数ミリ秒〜数十ミリ秒のズレが残るんだよ。同じミリ秒に2つのノードで書き込みが起きたら、どっちが先かわからなくなるんだ
じゃあHLCってどうやって解決するの?
HLCはタイムスタンプを `(物理時刻, 論理カウンタ)` のペアで管理するんだよ。物理時刻が同じなら論理カウンタで順番をつけるんだ
なるほど!メッセージを受け取ったときはどうなるの?
送信者と受信者の物理時刻を比べて大きい方を採用して、同じなら論理カウンタを+1するんだよ。こうすると「因果関係」が崩れないんだ
Lamport clockとの違いは何なの?
Lamport clockは純粋に論理カウンタだけだから、実時間とどんどんズレていくんだよ。HLCは物理時刻を軸にしつつ論理カウンタで補正するから、人間が見てわかる時刻に近い値を保てるんだ
まとめ:ざっくりこれだけ覚えればOK!
「HLC」って出てきたら「分散システムで時刻と順序を同時に管理する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Hybrid Logical Clock」 = ハイブリッド論理クロック
💬 「Hybrid(混合)」は物理クロックと論理クロックを組み合わせていることを指すんだよ。2014年にMunindar Singh氏らが提案した比較的新しい概念だよ