https://link.springer.com/chapter/10.1007/978-3-319-14472-6_2

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 ClockPhysical Timeの組み合わせ

HLCのアルゴリズム

  • HLC()は以下の特性を提供する
    1. 空間計算量はO(1)
    2. は有限のビット幅で表現される
      • 実際はint64(OSのNTPクロックと同じビット幅)
    3. と近い値を取る。が有界 Naive algorithm
  • 任意のイベントに対して、なタイムスタンプを与える
  • 初期化
  • 送信イベント or ローカルイベント
    • をそのイベントのタイムスタンプとする(メッセージにはそれを付ける)
  • 受信イベント of message
    • をそのイベントのタイムスタンプとする
  • ほぼLamport Clockと一緒(kekeho)
  • これで特性1, 2は満たすけど、4は満たされないし、3も満たさない
    • 3を満たさず、どんどんズレが蓄積していく例:
      • HLCアルゴリズム
  • naive algorithmのを、に分割
    • はこれまでに学習したの最大値を把握するために使うレベル
    • は、の値が等しいときにのみ因果関係の更新を捉えるために使用される
  • 送信・ローカルイベント
    • イベントのタイムスタンプは
  • 受信イベント of message
      • イベントのタイムスタンプは
  • happend-beforeを見たかったら、を比べて、等しければを比べろということっぽい(kekeho)
  • 要件4を満たすことの証明は論文に書いてある

参考