The tree is an essential data structure in many applications. In a distributed application, such as a distributed file system, the tree is replicated.To improve performance and availability, different clients should be able to update their replicas concurrently and without coordination. Such concurrent updates converge if the effects commute, but nonetheless, concurrent moves can lead to incorrect states and even data loss. Such a severe issue cannot be ignored; ultimately, only one of the conflicting moves may be allowed to take effect. However, as it is rare, a solution should be lightweight. Previous approaches would require preventative cross-replica coordination, or totally order move operations after-the-fact, requiring roll-back and compensation operations. In this paper, we present a novel replicated tree that supports coordination-free concurrent atomic moves, and provably maintains the tree invariant. Our analysis identifies cases where concurrent moves are inherently safe, and we devise a lightweight, coordination-free, rollback-free algorithm for the remaining cases, such that a maximal safe subset of moves takes effect. We present a detailed analysis of the concurrency issues with trees, justifying our replicated tree data structure. We provide mechanized proof that the data structure is convergent and maintains the tree invariant. Finally, we compare the response time and availability of our design against the literature.
翻译:树是许多应用程序中必不可少的数据结构。 在分布式应用程序中, 如分布式文件系统, 树可以复制。 为了提高性能和可用性, 不同的客户应该能够同时更新其复制品, 并且没有协调。 如果同时更新能够同时进行, 效果通缩, 但是同时移动会导致不正确的状态, 甚至数据丢失。 这样严重的问题是不能忽视的; 最终, 只能允许互相冲突的动作之一生效 。 但是, 由于这个非常罕见, 解决办法应该是轻巧的。 先前的方法需要预防性交叉复制协调, 或者完全在事后操作中命令操作, 需要滚动和补偿操作 。 在本文中, 我们展示了一棵新型的复制树, 支持没有协调的同步原子移动, 并且可以维持树的不动性。 我们的分析找出了同时移动本身安全的案例, 我们为剩余案例设计了一个轻巧、 没有协调、 没有滚动的算法算法, 这样最安全的动作就能生效。 我们详细分析与树木的调和调和操作, 需要滚动的树数据结构 。 我们最后要对比我们的数据结构 。