https://link.springer.com/chapter/10.1007/978-3-319-14472-6_2
- Hybrid Logical Clockの提案論文
- Lamport Clockと、Physical Timeのハイブリッド! かっこいい(kekeho)
- MongoDB, CockroachDBで使われているらしい
Introduction
- Brief History of Time
- Logical Clock: Lamport Clock, Vector Clockなど。Lamport Clockは物理的な時間に紐づいていないし、バックチャンネルでの通信は反映できないので実用的でない
- (とこの論文ではしている。まあケースバイケースでは)(kekeho)
- [Physical Time]: 物理時間。NTP使っても完全に同期はできないので、Uncertainty intervalsが生じ、その期間が被っているイベントには順序付けができない。秒が飛んだり、巻き戻ったりということも発生する
- TrueTime: Google Spannerで提案。特別なデバイスが必要である。また、同期がゆるいとイベントの遅延がかさむ。
- TrueTimeちゃんと勉強してないけど、多分そうなんだろう(kekeho)
- HybridTime: Vector ClockとPhysical Timeの組み合わせ
- Logical Clock: Lamport Clock, Vector Clockなど。Lamport Clockは物理的な時間に紐づいていないし、バックチャンネルでの通信は反映できないので実用的でない
HLCのアルゴリズム
- HLC()は以下の特性を提供する
- 任意のイベントに対して、なタイムスタンプを与える
- 初期化
- 送信イベント or ローカルイベント
- をそのイベントのタイムスタンプとする(メッセージにはそれを付ける)
- 受信イベント of message
- をそのイベントのタイムスタンプとする
- ほぼLamport Clockと一緒(kekeho)
- これで特性1, 2は満たすけど、4は満たされないし、3も満たさない
- 3を満たさず、どんどんズレが蓄積していく例:
- HLCアルゴリズム
- 3を満たさず、どんどんズレが蓄積していく例:
- naive algorithmのを、とに分割
- はこれまでに学習したの最大値を把握するために使うレベル
- は、の値が等しいときにのみ因果関係の更新を捉えるために使用される
- 送信・ローカルイベント
- イベントのタイムスタンプは
- 受信イベント of message
-
- イベントのタイムスタンプは
- happend-beforeを見たかったら、を比べて、等しければを比べろということっぽい(kekeho)
- 要件4を満たすことの証明は論文に書いてある
参考