矢量时钟与版本矢量的用例是什么?

ara*_*lel 6 replication synchronization distributed-computing distributed-system data-structures

我一直无法找到适合Vector ClocksVersion Vectors 的用例以及它们可能有何不同的示例。我知道它们在很大程度上以相同的方式工作,向量时钟使用receivesend函数,版本向量使用sync函数,但我不明白这两个选项之间的区别。它只是表达同一事物的两种不同方式,还是它们之间的用例存在真正的差异?

我只能找到一个有点相关的问题:“我什么时候使用像 Paxos 这样的共识算法与使用像 Vector Clock 这样的算法?”

尽管链接的答案陈述了以下内容并引用了一篇短文,但我仍然不清楚这些差异。

您可能希望将版本向量用于无领导分布式存储。您可能会为此使用矢量时钟(尽管它更适合;本文还建议您将其用于一致的快照,用于在一般分布式系统中实现因果排序等)。

Lui*_*uis 1

这里有同样的问题,对我来说仍然不是绝对清楚,但我发现版本向量更适合确定分布式系统中复制节点的特定网络中事件的因果关系,其中您唯一的东西感兴趣的是首先发生的事情和之后发生的事情。

相比之下,矢量时钟确定分布式系统中未确定的事件序列中的事件顺序。

从这个意义上说,使用整数作为版本向量过于复杂,因为如果我们只想确定哪个节点 A 或 B 更新得更多,给定最初 A[2,2] 和 B[2,2] (因此同步)。

从版本向量角度来看,A[3,2] > B[2,2]与 A[10,2] > B[2,2] 的含义相同。这可以解释为什么我们可以对版本向量使用一组固定的值,并且唯一重要的操作就是同步版本

从矢量时钟的角度来看,A[10,2]和A[3,2]之间存在差异。这意味着+7事件同时发生。这可以解释为什么我们需要跟踪所有事件,并且有发送接收操作来同步网络中的所有矢量时钟。

无论如何,我像你一样缺少一些清晰的文档,可以清楚地解释一个与另一个相比的区别和用法。