分布式系统时钟

时间:2014-03-19 13:05:09

标签: distributed clock

我正在阅读以下有关矢量时钟的内容: http://book.mixu.net/distsys/time.html

我一定错过了什么。由于网络延迟总是有“ack / nack”?如果节点B正在更新节点C并且正在更新节点B的节点C消息正在传输中,那么也必须发生确认。

1 个答案:

答案 0 :(得分:0)

不,ack / nack来自与矢量时钟不同的层。您使用ack / nack确认通过传输层(例如TCP)正确传输/接收包。

矢量时钟位于应用层。它们确保您可以通过happened before逻辑订购消息。例如,对于存储和复制/同步数据的不同方案,这是相关的。

通常在分布式算法中,您可以异步发送(因此也可以接收)消息,以划分工作或更新结果,而不需要任何直接的答案。这种异步通信可以减少网络开销,提高吞吐量以及节点通信的速度。

想象一下,两个进程(人员)处理同一个数据集(文档)并相互更新。 进程A和B从0开始,A的向量时钟为(0,0),B也为(0,0) - 每个条目用于(A,B)

  1. A进行更改并向B发送更新
    • A:(1,0); B:(0,0)
  2. B进行更改并向A发送更新
    • A:(1,0); B:(0,1)
  3. A进行另一次更改并向B发送更新
    • A:(2,0); B:(0,1)
  4. A接收B的更新,并在矢量时钟(0,1)上看到
    • 现在知道B尚未对文档应用A的任何更新,并且知道哪些数据需要合并
    • A:(2,1); B:(0,1)
  5. B接收A的两个消息,并且需要执行类似的合并
    • A:(2,1); B:(2,1)
  6. 现在如果A需要等待更改,直到B发送确认,在发送另一条消息之前,它会浪费很多时间。最后,无论如何都会发生冲突,因为他们同时发送了更新,并且需要合并它们,或者至少有一个进程需要撤销它的更改。