-
Movable tree CRDTs and Loro's implementation
-
पृष्ठभूमि
- distributed systems और collaborative software में hierarchical relationships को मैनेज करना जटिल है
- data structures में delete और insert को जोड़कर move को मॉडल करने पर conflict resolution और user expectations को पूरा करना कठिन होता है
- उदाहरण के लिए, एक ही node को अलग-अलग parents के पास एक साथ move करने पर एक ही content वाले duplicate nodes बन सकते हैं
-
स्थानांतरित किए जा सकने वाले tree में conflicts
- movable tree की मुख्य operations: create, delete, move
- concurrent operations को sync करते समय होने वाले संभावित conflicts:
- एक ही node delete भी हो और move भी हो
- एक ही node अलग node के नीचे move हो
- दूसरे nodes move होकर cycle बना दें
- ancestor node delete हो रहा हो जबकि descendant node move हो रहा हो
-
एक ही node का delete और move
- तुलनात्मक रूप से हल करना आसान है
- distributed system के timestamp या application की specific requirements के अनुसार एक operation लागू किया जाता है और दूसरे को ignore किया जाता है
-
एक ही node को अलग parent के नीचे move करना
- concurrent move operations को merge करना अधिक जटिल है
- application के अनुसार अलग-अलग approaches अपनाई जा सकती हैं:
- node को delete करके दूसरे parent node के नीचे उसकी copy बनाना
- node को दो parents से linked रहने देना (आमतौर पर अनुमति नहीं होती)
- सभी operations को sort करके sequentially apply करना
-
अलग nodes की movement से cycle बनना
- concurrent move operations से बनी cycle को resolve करना जटिल है
- कई समाधान मौजूद हैं:
- error उत्पन्न करना
- cyclic node को विशेष "timeout" area में render करना
- server पर move operations को process करना
- topological sort का उपयोग करना
- cycle पैदा करने वाले edge को hide करना
-
ancestor node का delete और descendant node का move
- ancestor node delete होने पर descendant node का move आसानी से नजरअंदाज हो सकता है
- सभी descendant nodes को सीधे delete कर देने से data loss जैसा लग सकता है
-
लोकप्रिय applications में conflict handling के तरीके
- Dropbox: file move को delete के बाद create की तरह handle किया, लेकिन data loss का जोखिम था
- Figma: central server cycle detect करके operation को reject करता है, जिससे consistency बनी रहती है
-
movable tree CRDTs
- centralized solution की जगह CRDTs का उपयोग
- शुरुआती CRDT-आधारित algorithms को implement करना कठिन था और storage overhead बड़ा था
- लगातार optimization के कारण कुछ CRDT-आधारित tree sync algorithms production environment के लिए उपयुक्त बन गए
-
replicated tree के लिए high-availability move operations
- tree की तीन operations (create, delete, move) को move operation में एकीकृत किया जाता है
- move operation को
Move t p m c के रूप में परिभाषित किया जाता है
- node deletion को
TRASH node में move करके handle किया जाता है
-
globally sorted logical timestamps
- Lamport timestamps का उपयोग करके distributed systems में events के causal order का निर्धारण किया जाता है
- छोटा अंक पहले event को दर्शाता है
-
remote operations लागू करना
- operation की safety इस पर निर्भर करती है कि apply करते समय tree की state क्या है
- remote updates को handle करते समय हाल की operations को rollback करके नई operation insert की जाती है, फिर rollback की गई operations को दोबारा apply किया जाता है
-
CRDT: mutable tree hierarchy
- हर node सभी historical parent nodes को track करता है और उन्हें counter देता है
- sync के दौरान cycle बनने पर उसे सबसे नजदीकी historical parent node से फिर जोड़ा जाता है
-
Loro में movable tree CRDTs का इम्प्लीमेंटेशन
- Martin Kleppmann के algorithm को implement करके उच्च performance प्रदान की गई है
- child nodes को sort करने के लिए
Fractional Index algorithm को integrate किया गया है
-
child node sorting में संभावित conflicts
- एक ही position पर कई nodes insert करने पर एक जैसा
Fractional Index assign हो सकता है
- समान
Fractional Index वाले nodes की relative order तय करने के लिए PeerID का उपयोग किया जाता है
-
इम्प्लीमेंटेशन और encoding size
Fractional Index node order प्रदान करता है
- worst case में encoding size के लिए अतिरिक्त bytes की जरूरत पड़ सकती है, लेकिन यह दुर्लभ स्थिति है
-
संबंधित कार्य
Fractional Index के अलावा movable list CRDT भी मौजूद हैं
Fractional Index का implementation सरल है और जब केवल relative order की जरूरत हो तब यह उपयोगी है
-
benchmarks
- Loro के movable tree implementation की performance benchmarking की गई
- real-time collaboration और seamless historical version checkout को support किया जा सकता है
-
सारांश
- movable tree CRDTs के implementation की कठिनाइयों और दो innovative algorithms का परिचय
- Loro, Martin Kleppmann के algorithm और
Fractional Index को integrate करके विभिन्न application scenarios को पूरा करता है
-
GN⁺ की संक्षिप्त प्रस्तुति
- movable tree CRDTs distributed systems में hierarchical data structures को मैनेज करने में महत्वपूर्ण भूमिका निभाते हैं
- Loro उच्च performance और efficient conflict resolution प्रदान करता है, इसलिए यह real-time collaboration applications के लिए उपयुक्त है
Fractional Index का उपयोग child node ordering की समस्या को हल करता है
- समान सुविधाओं वाले अन्य projects में Figma और Dropbox शामिल हैं
1 टिप्पणियां
Hacker News की राय
एक नया multiplayer editor विकसित कर रहा/रही हूँ
React Table Library को open source के रूप में उपलब्ध कराया है
सलाह माँग रहा/रही हूँ
Google Docs/Zoho Writer जैसे formatted text content के साथ काम करते समय tree manipulation की ज़रूरत होती है
सोच रहा/रही हूँ कि image (pixel) और 3D model जैसे data-dense applications के लिए कोई practical CRDT है या नहीं
लगता है कि पहला paragraph ChatGPT की आवाज़ जैसा है