0

对分布式系统非常陌生,刚开始阅读 dynamo 论文4.4 Data Versioning,所以我的理解可能会偏离。

以doc中的例子为例,最后一步是将D3和D4调和到D5,但是如果用户只检索到D3怎么办(IIUC这是可能的,因为系统中有多个版本的数据徘徊,我不保证要检索 D3 和 D4,我什至可以读取 D1/D2),并且在不知道 D4 的存在的情况下,用户将 D3 更新为 D5,巧合的是,D5 也由 Sz(处理 D4)处理。它不是让 D5 看起来像 D4 的后代吗?

D4([Sx,2],[Sz,1]) 与 D5([Sx,2],[Sy,1],[Sz,1])

但这是错误的,我描述的步骤是不可能的,或者矢量时钟有一些顺序要求?

我看到矢量时钟比线性历史日志携带更少的信息,即 ([Sx,2],[Sy,1]) 没有告诉我发生的动作的顺序,它可以扩展到不同的时间序列像 [Sx,Sy,Sx] 或 [Sy,Sx,Sx] 或 [Sx, Sx, Sy]?

在此处输入图像描述

4

1 回答 1

0

矢量时钟本身不足以防止您描述的数据不一致类型。

你需要更多的东西:共识算法。存在多种此类经过充分研究的协议,它们都旨在确保您的数据不会最终处于您所描述的状态。

例如,使用仲裁协议,您可以要求系统中的大多数节点必须“观察”更新才能有效。除非发生这种情况,否则写入将被视为无效并被拒绝。再加上一个矢量时钟,您最终会得到一个分布式系统,该系统对您展示的问题类型具有弹性

于 2021-10-09T07:18:51.943 回答