A coordination-free, convergent, and safe replicated tree
Un arbre répliqué, convergent et sûr sans coordination
Résumé
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.
L’arbre est une structure de données essentielle. Quand l’application est distribuée, par exemple dans un système de fichiers distribué, l’arbre est répliqué. Pour améliorer les performances et la disponibilité, les différents clients doivent pouvoir mettre à jour leurs répliques simultanément et sans coordination. Celles-ci convergent si les mises à jour commutent entre elles ; néanmoins, même dans ce cas, des opérations “move” concurrentes peuvent conduire à des états incorrects, et même à la perte de données. Au bout du compte, entre deux opérations “move” en conflit, seule l’une des deux peut être autorisée à prendre effet. Cependant, comme ce cas est rare, la solution doit être légère. Les approches précédentes nécessitaient une coordination préventive des répliques, ou des retours en arrière a posteriori. Dans cet article, nous présentons un nouvel arbre répliqué, qui met en œuvre une opération “move” atomique sans coordination, et dont nous prouvons qu’il maintient l’invariant d’arbre.
Notre analyse identifie les cas où les “move” concurrents sont intrinsèquement sûrs, et proposons un algorithme léger, sans coordination et sans retour-arrière, pour les autres cas, de sorte qu’un sous-ensemble maximal et sûr de “move” prenne effet. Nous présentons une analyse détaillée des problèmes de cohérence dans les arbres. Nous fournissons une preuve mécanisée que la structure des données est convergente et maintient
l’invariant d’arbre. Enfin, nous comparons le temps de réponse et la disponibilité de notre concept à la littérature.
Fichier principal
RR-9395/RR-9395.pdf (924.22 Ko)
Télécharger le fichier
RR-9395/RR-9395.blg (1.11 Ko)
Télécharger le fichier
RR-9395/RR-9395.fdb_latexmk (37.83 Ko)
Télécharger le fichier
RR-9395/RR-9395.fls (39.14 Ko)
Télécharger le fichier
RR-9395/RR-9395.log (84.63 Ko)
Télécharger le fichier
RR-9395/RR-9395.out (2.56 Ko)
Télécharger le fichier
RR-9395/RR-9395.synctex.gz (426.92 Ko)
Télécharger le fichier
RR-9395/logo-inria.png (275.12 Ko)
Télécharger le fichier
RR-9395/pagei.png (26.87 Ko)
Télécharger le fichier
RR-9395/rrpage1.png (47.58 Ko)
Télécharger le fichier
Origine | Fichiers produits par l'(les) auteur(s) |
---|