Hybrid Logical Clock:没有可靠全球时钟,分布式系统如何记录先后?

TL;DR

混合逻辑时钟把接近现实的物理时间与逻辑计数结合起来,在不要求全球时钟完美同步的前提下表达因果顺序。

混合逻辑时钟把接近现实的物理时间与逻辑计数结合起来,在不要求全球时钟完美同步的前提下表达因果顺序。

Hybrid Logical Clock:没有可靠全球时钟,分布式系统如何记录先后?

分布式系统经常需要回答“哪个事件先发生”,但机器的物理时钟既不完全同步,也可能因为校时向前或向后跳变。Hybrid Logical Clock(混合逻辑时钟,HLC)把物理时间和逻辑计数器结合起来,既保持接近现实时间,又能表达事件之间的因果顺序。

可以把它想成墙上的钟加一本记账本。墙钟给出大致的现实时间,记账本在同一时刻发生多个事件时记录递增序号。如果收到一个带有更晚时间戳的消息,本地时钟不能简单地倒退,而是把物理部分和逻辑部分一起调整,让新的事件在排序上位于消息之后。

HLC 通常维护一个接近物理时间的部分和一个逻辑计数部分。发生本地事件、发送事件或接收消息时,算法会比较本地物理时间、当前逻辑值与消息时间戳,并选择不小于这些值的结果;当物理时间没有前进时,就递增逻辑部分。这样,如果事件 A 因果上先于事件 B,时间戳可以保持相应的先后关系。

它不能创造一只真正准确的全球时钟,也不能仅凭时间戳证明两个并发事件谁在现实中先发生。它的优势是时间戳仍然大致可读,适合日志、排序、快照和数据库版本管理;相比纯逻辑时钟,运维人员更容易把时间戳映射到现实时间线。

使用 HLC 时仍要规定时钟回拨、溢出、节点重启和消息延迟的处理方式。若系统需要严格的业务顺序,时间戳还要和事务、版本号或共识机制结合。它解决的是“在不可靠物理时钟上增加可推理顺序”,而不是替代分布式一致性。

HLC 还适合在日志中保留一个既能排序又能大致定位现实时间的标记。排障人员可以先按 HLC 排出因果上合理的顺序,再回看物理时间误差和消息传播;数据库则可以用它辅助判断版本新旧。不过,跨系统比较时仍应统一时钟来源、编码格式和节点重启后的纪元规则。

资料来源:Hybrid Logical Clocks

KEEP READING