时钟和因果关系 - 分布式系统中的排序事件


系统事件可以根据它们发生的时间来排列。时钟计时并产生时间戳。传统时钟(例如时钟)使用通用参考来了解时间。该参考可以是内部硬件或使用 NTP 等协议提供时间的公共服务。然而,由于时钟漂移和/或网络时间延迟的假设,传统时钟的时间戳并不总是相互比较,因此无法使用传统时钟的时间戳可靠地排序事件。

逻辑时钟是一个定制的时钟,它被设计用来产生可以可靠比较的时间戳。如果分布式系统中的多个节点可以依赖一个集中式的逻辑时钟,那么本文所讨论的大多数问题就变得不重要了。然而,根据定义,集中式时钟既不具有容错性,也不能提供超越极限的性能。因此,在本文中,我们主要关注的是分布在多个节点上的分布式逻辑时钟。

为了使分布式逻辑时钟发挥作用,我们希望每个参与的节点都有自己的时钟,与其他节点的时钟合作,以产生下一个时间戳。在处理分布式逻辑时钟时,我们主要对任何节点上的系统事件的发生时间感兴趣,这样我们就可以根据时间戳在各节点上对这些事件进行排序。

事件显然不能考虑未来事件的影响。然而,由于事件发生的速度可能快于节点之间对此类事件的通知,事件可能不知道一些过去的事件。在不知道对方的情况下发生的事件被称为并发事件。只有在没有并发事件的情况下,事件才能根据它们的起始时间戳实时排序。也就是说,本文讨论的所有逻辑时钟都不能帮助在存在并发事件的情况下对事件进行实时排序。也就是说,不是所有的时钟都能在没有并发事件的情况下对事件进行排序。这篇文章讨论了为什么这种时钟仍然有用。

文章还将证明,在非实时情况下(即事后),我们可以用一些时钟来安排事件的总顺序。总顺序意味着如果每个节点都有一个事件集合,那么所有节点都可以单独到达相同的事件顺序。总顺序尊重发生-之前(和因果关系)的关系。本文末尾的事件排序部分详细讨论了总排序。

传统时钟存在安全问题。集中式时钟存在活跃度和性能问题。逻辑时钟解决了这些问题,因此被许多分布式系统使用,尤其是存储系统。多领导者存储系统使用逻辑时钟来解决冲突。无领导存储系统将它们用于修复和反熵机制。无冲突复制数据类型 (CRDT) 是协作数据结构,可以在彼此断开连接的同时改变数据,使用逻辑时钟作为其基础来先发制人地处理冲突。
考虑到逻辑时钟在分布式系统设计中的基础作用,了解它们是很合适的。本文讨论了各种逻辑时钟设计的内部结构,以及我们在选择一种设计而不是另一种设计时必须做出的权衡。

详细点击标题