#clock #distributed-systems #logical #hybrid #physical #events #order

hybrid-logical-clock

Rust 实现的分布式系统混合逻辑时钟

2 个版本

新版本 0.0.2 2024 年 8 月 21 日
0.0.1 2024 年 8 月 21 日

#4#physical

MIT 许可证

12KB
84

Rust 中的混合逻辑时钟

我构建了这个crate,为了在Rust中实现混合逻辑时钟,以便学习分布式系统。

为什么使用混合逻辑时钟?

  1. 物理时钟在复杂的分布式系统中不是单调的,且不可靠。每个参与者可能位于不同的地理位置,网络通信状况不同,物理时钟漂移。
  2. 我们可以使用逻辑时钟来对分布式系统中的事件进行排序,它们与物理时间无关。如果您需要使用物理时间进行调试目的的数据查询,如果系统只使用逻辑时钟,则无法进行。

如何使用此crate

您可以使用设置给定值的物理时钟时间创建一个新的混合逻辑时钟。

use hybrid_logical_clock::HybridLogicalClock;

let hlc = HybridLogicalClock::new(100);

有时您想创建一个同时设置物理和逻辑时钟时间的混合逻辑时钟。

use hybrid_logical_clock::HybridLogicalClock;

let hlc = HybridLogicalClock::new_with_both_physical_and_logical_clock_time(100, 100);

您可以将两个混合逻辑时钟进行比较,以查看它们是否具有因果关系。

use hybrid_logical_clock::HybridLogicalClock;

let hlc1 = HybridLogicalClock::new(100);
let hlc2 = HybridLogicalClock::new(200);

assert!(hlc1.is_concurrent(&hlc2));

为什么使用混合逻辑时钟?

大多数分布式系统使用lamport或逻辑时钟来排序事件。然而,这些时钟有几个缺点

  1. 它们不提供因果跟踪与排序,这意味着两个事件可以是因果相关的但未排序。这在构建涉及人类参与的系统时尤其重要,因为人类似乎倾向于使用物理时间来确定排序。
  2. 它们不提供全序,这意味着两个事件可以是并发但未排序的。
  3. 它们不提供检测冲突的方法,这意味着两个事件可以是并发但未排序的。

混合逻辑时钟(HLCs)相对于传统的逻辑时钟或单独的物理时钟具有几个优点

  1. 因果跟踪:HLCs结合了物理和逻辑时钟的优点,允许在分布式系统中准确跟踪事件之间的因果关系。

  2. 更好的性能:与向量时钟相比,HLCs具有固定大小的时间戳,这在大规模分布式系统中提高了性能。

  3. 时钟漂移容忍性:HLCs可以比纯物理时钟更优雅地处理分布式系统中节点之间的时钟漂移。

  4. 单调性:HLCs确保时间戳始终向前移动,即使物理时钟有小的向后跳跃。

  5. 细粒度排序:当多个事件在相同的物理时间发生时,HLCs仍然可以使用逻辑组件建立全序。

  6. 兼容性:HLCs可以用作许多系统中物理时间戳的直接替换,提供额外的因果信息,而无需进行重大的架构更改。

  7. 冲突解决:在分布式数据库或协作编辑系统中,HLCs(混合逻辑时钟)可以帮助检测和解决并发更新之间的冲突。

通过使用混合逻辑时钟,您可以在分布式系统中实现更健壮和准确的时间保持机制,从而提高一致性并简化事件排序的推理。

无运行时依赖