我正在阅读以下有关矢量时钟的内容: http://book.mixu.net/distsys/time.html
我一定错过了什么。由于网络延迟总是有“ack / nack”?如果节点B正在更新节点C并且正在更新节点B的节点C消息正在传输中,那么也必须发生确认。
答案 0 :(得分:0)
不,ack / nack来自与矢量时钟不同的层。您使用ack / nack确认通过传输层(例如TCP)正确传输/接收包。
矢量时钟位于应用层。它们确保您可以通过happened before逻辑订购消息。例如,对于存储和复制/同步数据的不同方案,这是相关的。
通常在分布式算法中,您可以异步发送(因此也可以接收)消息,以划分工作或更新结果,而不需要任何直接的答案。这种异步通信可以减少网络开销,提高吞吐量以及节点通信的速度。
想象一下,两个进程(人员)处理同一个数据集(文档)并相互更新。 进程A和B从0开始,A的向量时钟为(0,0),B也为(0,0) - 每个条目用于(A,B)
现在如果A需要等待更改,直到B发送确认,在发送另一条消息之前,它会浪费很多时间。最后,无论如何都会发生冲突,因为他们同时发送了更新,并且需要合并它们,或者至少有一个进程需要撤销它的更改。