分布式系统-向量时钟(Vector Clock)

分布式系统-向量时钟(Vector Clock)

Leslie Lamport的论文中《Time, Clocks and the Ordering of Events in a Distributed System》首次提出了逻辑时钟的概念,解决了分布式系统的事件全序关系,但是对于同时发生的事件无法定义,导致无法描述事件的因果关系。而Vector Clock是在Lamport时间戳基础上演进的另一种逻辑时钟方法,它通过vector结构不但记录本节点的Lamport时间戳,同时也记录了其他节点的Lamport时间戳,因此能够很好描述同时发生关系以及事件的因果关系。当系统有N个进程时,则存在N个逻辑时钟向量,一个进程对应一个时钟。

为什么需要向量时钟

我下面会举两个例子对这个问题进行说明,不过我们需要先回顾一下Lamport逻辑时钟算法,它提供了一种判断分布式系统中事件全序关系的方法:如果 a -> b,那么 C(a) < C(b),但是 C(a) < C(b) 并不能说明 a -> b。也就是说**C(a) < C(b) 是 a -> b 的必要不充分条件,我们不能通过 Lamport 时间戳对事件 a、b 的因果关系进行判断。**以下图为例

假设有三个进程在发消息,Ts(mi)表示消息mi的发送时间戳,Tr(mi)表示消息mi的接受时间戳,显然有Ts(mi)<Tr(mi),但是这个逻辑时钟无法直接对相应事件进行因果关系判断。

我们可以发现在进程P2中,Tr(m1)<Ts(m3),说明m3是在m1被接收之后发送的,也就是说m3的发送跟m1的接收有关系。但是我们可以观察Tr(m1)<Ts(m2),但实际上m2的发送和m1的接收没有因果关系。

再举一个例子:

在使用分布式数据库的时候,不同节点数据的一致性一向是一个经典且难以解决的问题,而这个问题的根源是难以实现一个全局统一的时钟。比如:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值