显式DAG代替矢量时钟进行同步


13

我已经开始研究在一组同级之间进行数据同步的方法。对等方必须能够以断开连接的方式工作,然后同步在一起以合并其本地更改。

对等方应该能够使用“三种方式合并”来合并本地更新。因此,在同步时,对等方应该知道哪些事实是最新的,但是在没有严格排序的地方,他们应该能够基于公共根将这些事实合并在一起。

当独立的同级进行更改时,他们可以使用“时钟”为它们“打上时间戳”。我使用术语“时钟”和“时间戳”,但我不是在说壁钟。我的意思是某种事件的部分排序,使因果关系清晰明了。事件之间的“先发生”关系形成有向无环图(DAG)。

似乎使用矢量时钟来构建这种部分排序的“通常”方法。但是,这些可能会变得非常大。间隔树时钟等最新发展提供了更紧凑的时间戳存储。

我根本不清楚的是,为什么同步协议显然不会“简单地”显式存储DAG。(或者他们?)

对等方可以通过随机生成UUID(或通过其他方法,例如<peer-name> + <local-monotonically-increasing-counter>)来独立创建时间戳。该时间戳的顺序对于该对等点是完全清楚的。

当两个对等方彼此同步时,他们可以商定新的时间戳。同样,此时间戳的顺序对双方均清晰可见。

现在需要在对等方之间传递DAG之前发生的事件,但是此操作的存储和带宽要求很小。时间点是图顶点。因此,它们具有1个或2个传入边(1个用于客户端上的事件,2个用于客户端之间的同步)。这是有界的,与网络中对等方的数量无关。

要使用单个时间点,您需要导致该时间点的时间图。然而,据我所看到的,任何对即能知道的时间点(它产生它本身,或与其他同行产生的,或者与它同步时已被其他同行告诉它)已经有有机会了解到那个时间点之前的历史。我认为可能有一个归纳证明。

鉴于显式地存储和同步DAG似乎很简单:在实践中使用了吗?如果不是,为什么首选矢量时钟?


笔记

点对点

与客户端服务器解决方案相比,我更喜欢对等解决方案。

可能的最终拓扑将是许多客户端连接到在彼此之间复制的一小得多的服务器组。但是,最好有一个支持该特定拓扑的通用解决方案,而不是一个需要此特定拓扑的解决方案。


我可能会误解您的意思,但目前尚不清楚导致状态的所有事件的图形如何小于计数器的向量。除非您所处的系统中节点数量非常多,更改数量很少。
kdgregory 2015年

感谢@kdgregory –好点。为了将来能够计算三向合并,您需要了解过去(并能够确定过去时间点的DAG)。因此,如果您存储的是过去的时间点,那么显式存储DAG会更便宜。如果您存储这些过去的时间点,那么无论如何都无法计算出三种方式的数据合并。–我想知道这三方面的要求是否可能?如果您不想使用三路,也许矢量时钟比显式DAG更好?
约翰(Benjohn)2015年

我认为这可能是@kdgregory的关键点,因此我在问题中添加了一些内容。我假设可以执行3向合并,这也意味着所有历史都是已知的。如果知道所有历史,那么(我认为)显式DAG便宜。如果历史记录被截断,则矢量时钟可能是成本较低的方法。
Benjohn 2015年

1
是的,我对矢量时钟的理解是它们仅用于接受/拒绝决策:“节点C试图更新此数据,但它不知道节点B的更新”。
kdgregory 2015年

Answers:


1

据我所知,像Git和Mercurial这样的版本控制系统使用DAG方法而不是矢量时钟。


1
如果没有解释,那么如果有人发表相反的意见,此答案可能会变得毫无用处。例如,如果有人发布诸如“诸如Git和Mercurial之类的控制系统使用矢量时钟而非DAG方法”这样的声明,那么此答案将如何帮助读者选择两种相反的观点?考虑将其编辑为更好的形状,以满足“ 如何回答”质量标准。
t

2
我理解问题的方式是,他们问是否存在使用DAG而不是矢量时钟的真实示例。
bikeman868

1
Git和Mecurial都是使用DAG进行对等更改同步的真实示例,我希望即使您投票否决,benjohn也会对我的回答有所帮助。
bikeman868 '16

嗨,@ bikeman868,我为您投了净0票(对不起)。即使您充满不确定性,您的答案也会有所帮助!尽管引用或权威性的回答总是很好,但堆栈交换并没有强制要求这样做!通过对问题的评论中的观点,您的建议很有意义。似乎当您要存储历史记录并能够合并历史记录时,DAG是合适的。当您不存储历史记录并希望对当前状态进行同步和达成共识时,则需要矢量时钟。
约翰

1

看一下共识问题。根据您的任务要求(关于您有多少数据,多少个同步节点,多少频率等),针对该问题的现有解决方案(例如“筏”)可能适合您的情况。

解决此问题的另一种方法(可能是切线方法)是设计CRDT


编织HTTP尝试通过增强HTTP创建基于CRDT的状态同步协议。他们对Time DAG和Space DAG具有很好的可视化效果,以及这两个概念如何相互关联以实现最终的一致性。
杜安J

-1

Aleph协议是一种p2p无领导者协议,它以协商一致的方式构建一组交易(或事件)的分布式DAG

https://arxiv.org/pdf/1908.05156


您应该扩展答案以显示参考协议如何解决原始问题提出的要点。使答案自给自足很重要,因为这会使遇到此问题的所有人受益。
BobDalgleish
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.