我在阅读以下有关向量时钟: http://book.mixu.net/distsys/time.html分布式系统时钟
我必须失去了一些东西。由于网络延迟,总会有一个“ack/nack”?如果节点B正在更新节点C并且正在更新节点B的节点C消息正在传输中,则还必须发生确认。
我在阅读以下有关向量时钟: http://book.mixu.net/distsys/time.html分布式系统时钟
我必须失去了一些东西。由于网络延迟,总会有一个“ack/nack”?如果节点B正在更新节点C并且正在更新节点B的节点C消息正在传输中,则还必须发生确认。
不,ack/nack来自与矢量时钟不同的层。您使用ack/nack来确认包是通过传输层正确传输/接收的(例如TCP)。
矢量时钟在应用程序层。他们确保您可以通过happened before逻辑来订购消息。这与您存储和复制/同步数据时的不同情况相关。
通常在分布式算法中,您可以异步地发送(因此也接收)消息来分割工作或更新结果,而不需要任何直接的答案。这种异步通信降低了网络开销,并增加了吞吐量以及节点可以通信的速度。
想象一下两个进程(人员)在同一个数据集(文档)上工作并相互更新。 过程A和B都开始从0,A的矢量时钟是(0,0)和B,以及(0,0) - 中的每个条目为(A,B)
现在,如果需要的一个与该变化等到B发送一个确认,发送另一消息之前,它会浪费了很多时间。最后,由于他们同时发送更新并需要合并它们,或者至少有一个流程需要撤销其更改,所以最终会有冲突。