分布式系统中的事件排序
在本文中,我们将研究如何分析分布式系统中事件的顺序。正如我们所知,分布式系统是在空间上分离的进程的集合,它们只能通过交换消息来相互通信,这可以在不同的计算机上处理,甚至可以是同一台计算机中的多个进程。
一个定义特征是,与单个进程中事件之间的时间相比,传输消息的延迟是不可忽略的。在分布式系统中对事件进行排序时存在一个基本限制,如果您在分布式系统中获取完整的事件集,有时根本无法判断一个事件是否先于另一个事件发生。
我们最多只能在这些事件中定义部分排序,或者对事件排序的直观理解自然与事件发生的时间相关联。
然而,在分布式系统中,即使计算机本身有物理时钟,我们也不能指望物理时钟,因为两个不同系统上的两个时钟永远无法完美同步,实际上它们总是会在任何两个物理时钟之间产生一些偏差。
因此,在分布式系统中对事件进行排序时,大多数物理时间都被忽略了,事件只能在系统内观察到。
现在可观察事件主要是发送和接收消息。
我们假设单个进程是完全顺序的,因为我们可以在一个进程中获取所有事件并对它们进行完全排序。这样我们就可以得到这些事件在该过程中发生的确切顺序。
- 事件只是消息的发送或接收。
- 现在,事件的部分排序可以用“⇢”表示,我们可以将其定义为——我们有两个事件并且在同一个进程中,a 在 b 之前,然后 a ⇢ b ie; a发生在b之前。
- 现在,如果两个进程正在相互通信,a 是消息的发送,b 是另一个进程接收该消息,那么我们将 a 定义为发生在 b 之前。
- 最后,我们有一个传递属性,它表示如果 a 发生在 b 之前,b 发生在 c 之前,那么 a 也发生在 c 之前,a⇢b 和 b⇢ c 然后 a⇢ c。
- 由于这是一个偏序,很可能发生对于两个事件 a 和 b 都没有在另一个之前发生,我们根本无法通过查看系统中的可观察事件来判断,在这种情况下,我们称 a 和 b 同时发生。
- P、Q、R 是进程,线中的每个点表示事件,曲线表示在进程之间发送的消息从这个表示中我们可以看到 p1 和 r4 相关,我们可以说 p1 发生在 r4 之前,因为 p1 发送了一个给 Q 的消息,这就是事件 q2 我们在进程 Q 中及时向前移动,我们向进程 R 发送一条消息,该消息在 r3 处收到。所以,我们可以说 p1 发生在 r4 之前。和 r2, q6 是并发的,因为它们不能相互影响。
- 发生在关系之前是对系统中发生的所有事件的集合的非自反偏序,即; (a⇢ a) 对于任何事件 a 都不成立。
- 这与爱因斯坦的广义相对论有关,其中事件根据可能发送的消息进行排序。
逻辑时钟:
逻辑时钟是一种为事件分配数字的方法,该数字可以被认为是事件发生的时间,我们在这里使用的符号是 C i 事件 a,其中 C 用于表示时钟。这些数字是纯逻辑的,它们与物理时间没有任何关系
条件 对于逻辑时钟:
- 如果 a 发生在 b 之前,则 a 的逻辑时间应该小于进程 P i的 b 的逻辑时间
- 如果 a 是进程 P i发送的消息,b 是进程 P j收到的消息,那么
- 逻辑时钟与时间戳相关联。
因此,鉴于这些条件,我们通过简单地在从一个事件到另一个事件时增加进程自己的时钟来定义一个进程内的时钟函数,即;每个过程 P i在任意两个连续事件之间递增 C i 。
因此,现在我们在分布式系统中对事件进行了部分排序,并且我们有一种方法可以为这些事件分配编号,以便我们可以从中构造逻辑时钟。