8

我理解向量时钟的需求,因为标量逻辑时钟无法提供足够的信息来判断键值存储更新中是否存在更新冲突。

但是我不确定向量时钟仍然没有解决什么问题,然后由更庞大的矩阵时钟解决?

4

2 回答 2

5

在最终一致性环境中,系统创建的所有消息都需要保留,直到每个对等方都收到消息(== 最终一致性)。但是您不想永远保留消息,因此您需要有一种方法来判断哪些消息已被所有节点接收并且可以删除,这就是您使用矩阵时钟的原因。

矩阵时钟是向量时钟的列表,因此您可以了解系统中每个节点的当前状态。基于此,您可以知道哪个对等方已经收到了哪些消息。当您与系统中的另一个节点交换消息时,您会比较矩阵时钟并始终记住每个节点的最高值。之后您可以删除之前发送的消息,因为节点必须已经收到它们。

这是对 TSAE(时间戳反熵)协议的非常简短的描述。您可以在 1992 年由 Richard Andrew Golding 撰写的论文项目弱一致性组通信和成员资格中了解更多信息(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.7385&rep=rep1&type= pdf ) 从第 5 章开始。

于 2014-01-28T01:48:04.400 回答
4

Lamport时钟(标量逻辑时钟,在你的术语中)、向量时钟和矩阵时钟之间的区别在于它们代表了不同的知识水平。

对于站点$i$ 中的向量时钟$vt_i[1 \ldots n]$,条目$vt_i[k]$ 表示站点$S_i$ 对站点$S_k$ 的了解。知识的形式为“$i$ 知道 $k$ that $\ldots$”。

对于站点 $S_i$ 中的矩阵时钟 $mt_i[1 \ldots n, 1 \ldots n]$,条目 $mt_i[k,l]$ 表示站点 $S_i$ 关于 $S_k$ 关于知识的知识站点 $S_l$。这里的知识形式为“$i$ know $k$ know $l$ that $\ldots$”。

直觉上,我们可以用更多的知识做更多的事情。

以下描述主要引自[1]:

矢量时钟和矩阵时钟广泛用于异步分布式消息传递系统。

使用向量时钟的一些示例领域包括检查点、因果存储器、保持复制文件的一致性、全局快照、全局时间近似、终止检测、共享变量的有界多写入器构造、互斥和调试(谓词检测)。

使用矩阵时钟的一些示例领域是设计容错协议和分布式数据库协议,包括丢弃分布式数据库中过时信息的协议,以及解决复制日志和复制字典问题的协议。

对于矩阵时钟,我们注意到 $min_k(mt_i[k,i]) \ge t$ 意味着站点 $S_i$ 知道每个其他站点 $k$ 知道它的进度,直到其本地时间 $t$。

正是这个属性允许站点不再发送具有本地时间 $\let$ 的信息或丢弃过时的信息。

[1]并发知识和逻辑时钟抽象Ajay D. Kshemkalyani 2000

于 2014-08-10T11:41:52.523 回答