
Nous sommes tous tellement habitués à la synchronisation et à la co-création dans le cloud Dropbox dans Google Docs que la combinaison des résultats des actions de différents utilisateurs peut sembler un problÚme de longue date. Mais en fait, il y a de nombreux écueils à ce sujet, et les travaux sur les algorithmes CRDT sont toujours en plein essor.
, â (Martin Kleppmann): Automerge. Hydra , . Google Drive «unknown error»? CRDT , , ? ?
, . â , .
CRDT (Conflict-free Replicated Data Types, ). , , , . , . (collaborative software).
, , - . . Google Docs Office 365 . Figma. Trello , . , .
( ).
, . , , «Hello!». «World», :

, , . : «Hello World! :-)».
. , , . , . , . , Git. , , .
, :
- (operational transformation, OT), Google Docs .
- 15 : CRDT.
, .
. , , «Helo», . «l», â . :

. â . , . . «l» â 3, â 4.
- . , 3 «l», . . 4, «Hell!o», 3, - . 4 5. â . .
, . Bluetooth, ( Google Docs Google). , . , , â Bluetooth, P2P .

CRDT . , . , , . , , CRDT.
CRDT . , , , . ; , .
. , , â . , , .
, , â , . , , , â . . , CRDT, , , â . CRDT .
. :
, .
, . CRDT ; . . . , 0 1, 0 â , 1 â . «Helo» 0.2, â 0.4, â 0.6, â 0.8.
«l» «l» «o» 0.6 0.8 â , 0.7. 0.9.

. , , , , . , , . . , .
, , , .
. , . .

«Hello!». « Alice» , « Charlie». . ? , , .

«o» 0.64, â 0.95. , 0.64 0.95. , .
, . , , , , . , - , .
, . . â , . , . , .
CRDT , .

â Logoot LSEQ. - . , . Treedoc WOOT , , , . , , LSEQ, Treedoc WOOT. . , Astrong â , , . , .
RGA
â RGA. , , , , , . .

, « reader» «Hello» «!», « reader» « dear». . « Alice» «Hello» «!». RGA : «Hello dear Alice reader!». , , .
, . RGA , .

, . . â «Hello!». â «reader», «Alice» «dear». RDA , . , , , . .
RGA â . , . , - - , RGA , . RGA .
Logoot LSEQ , , , , , - . RGA, , . , PaPoC 2019 . .

. , , , , , .
CRDT-. , , CRDT . CRDT . . , .
, , â .

: «phone joe» . , . , , . , «phone joe» . , .
: ?

, . «phone joe» , â «buy milk». ? , , «phone joe», , «buy milk». . . , , , . , «phone joe» .
? CRDT, . , , . last writer wins register. , , .
, . . last writer wins register, , â . «phone joe» , «buy milk», , . .
CRDT (last writer wins register). , . -, , , -, ( , ). , .
, . CRDT . , , CRDT. , Treedoc , Logoot â , RGA â . CRDT . . , , last writer wins register.
, last writer wins . : CRDT add-wins set (AWSet ):

add-wins set, , , (, ) last writer wins . last writer wins AWSet, CRDT last writer wins register. , CRDT CRDT, CRDT . â , , . , CRDT . CRDT .
. , , , . , . . :

, «Milk» , . «Milk» «Soy milk». «Milk», . , . ? â «Milk» «Soy milk». , , , .

, . «Milk» , . «Soy m». , , , . , , . , - .
â . , JSON XML â . , , â , JSON . . , , : , ?

( ) , B. C. , . -, â . B, â C. A . .
â A B, C. â , (DAG), . , . , A B, C. , , , .
. . «a», «b», «a» «b». «a» . , ? , . macOS «Invalid argument». , , , , , .
, , . CRDT . .

B A. A B. . , . .
, . â . A B, , , â . , - . , , , . A B, , .
? Google Drive, .

A B, â B A, . Google Drive . , Google . CRDT - . , , . .
:

op1, op3, mv A B op5. t. â 1, 3, 4 5. mv B A 6. , . , , .

â , . , . .
. 1 5. op2, . â 2, , .

op2 , . , , â , , .
, , . .

. , 2, 5. 2, op5, mv A B op3. op2, . , , , .
. - , , . , , , . . , . , , . , 600 . , , , , , . .
, (. ).

MoveOp. Timestamp. ; , , . , , . child â , parent â . Metadata meta â . , , meta . , . .
, LogEntry. . .
. , , a b. .

a b , (a, m, b) â , a b , c, , a c, c b. . , . , , . , . , . , .
. , , , , . , . , . , , CRDT. , â , . , , .
CRDT . CRDT . , .

, . , UTF-8 ; , , . ; . - , . , . , , . , , 100 , . , .
, Automerge, CRDT. , CRDT. .

. , â . ( plain text- LaTeX 100 ) , . 300 000 : , . , ( , ).
, CRDT. JSON, 150 . gzip 6 , 100 . , 700 ( - 200 ), . , 22%. , CRDT , , 228 . . gzip, 100 . , (tombstones), 50 . , . .
, . , . , . , . RGA, . , . , .

. â . , . , â . UTF-8, , . , , .
. . 1, 2, 3, 4, 5, 6. -, . 1, 1, 1, 1, 1, 1. , , 6 1. , . , â , . , , â . , . 0, 0, 0, 0, 0, 0. - , , , , .
UTF-8. , , . . UTF-8 UTF-8 6 . , , . , , , . . , , , .
. , CRDT . , â . , CRDT: , , . , , CRDT .
Logoot: Stéphane Weiss, Pascal Urso et Pascal Molli: « Logoot: un algorithme de réplication optimiste évolutif pour l'édition collaborative sur les réseaux P2P », ICDCS 2009.
LSEQ: Brice NeÌdelec, Pascal Molli, Achour Mostefaoui, and Emmanuel Desmontils: âLSEQ: an Adaptive Structure for Sequences in Distributed Collaborative Editing,â DocEng 2013.
RGA: Hyun-Gul Roh, Myeongjae Jeon, Jin-Soo Kim, and Joonwon Lee: âReplicated abstract data types: Building blocks for collaborative applications,â Journal of Parallel and Distributed Computing, 71(3):354â368, 2011.
Treedoc: Nuno Preguiça, Joan Manuel Marques, Marc Shapiro, and Mihai Letia: âA Commutative Replicated Data Type for Cooperative Editing,â ICDCS 2009.
WOOT: GeÌrald Oster, Pascal Urso, Pascal Molli, and Abdessamad Imine: âData consistency for P2P collaborative editing,â CSCW 2006.
Astrong: Hagit Attiya, Sebastian Burckhardt, Alexey Gotsman, Adam Morrison, Hongseok Yang, and Marek Zawirski: âSpecification and Complexity of Collaborative Text Editing,â PODC 2016.
, , .
Interleaving anomaly: Martin Kleppmann, Victor B. F. Gomes, Dominic P. Mulligan, and Alastair R. Beresford: âInterleaving anomalies in collaborative text editorsâ. PaPoC 2019.
Proof of no interleaving in RGA: Martin Kleppmann, Victor B F Gomes, Dominic P Mulligan, and Alastair R Beresford: âOpSets: Sequential Specifications for Replicated Datatypesâ, May 2018.
Moving list items: Martin Kleppmann: âMoving Elements in List CRDTsâ. PaPoC 2020.
Move operation in CRDT trees: Martin Kleppmann, Dominic P. Mulligan, Victor B. F. Gomes, and Alastair R. Beresford: âA highly-available move operation for replicated trees and distributed filesystemsâ. Preprint
Reducing metadata overhead: Martin Kleppmann: âExperiment: columnar data encoding for Automergeâ, 2019.
Local-first software: Martin Kleppmann, Adam Wiggins, Peter van Hardenberg, and Mark McGranaghan: âLocal-first software: You own your data, in spite of the cloudâ. Onward! 2019.
Hydra 2020 , , . Hydra 2021, 15 18 . , , â .