Kotlin Multiplatform में CRDTs: अपने Sync Server को खत्म करें

अधिकांश टीमें डेटा संघर्षों (conflicts) को संभालने के लिए एक केंद्रीय सर्वर बनाती हैं। सर्वर writes प्राप्त करता है, एक विजेता चुनता है, और सबसे अच्छे परिणाम की उम्मीद करता है। इससे विफलता का एक एकल बिंदु (single point of failure) और बनाए रखने के लिए जटिल कोड बन जाता है।

Conflict-Free Replicated Data Types (CRDTs) इसे बदल देते हैं। हर डिवाइस बिना किसी केंद्रीय बॉस के एक ही स्थिति (state) तक पहुँच जाता है। यह एक गणितीय गारंटी है।

आप अपने sync backend को साधारण blob storage से बदल सकते हैं। आपका सर्वर एक रिले (relay) बन जाता है जो डेटा ब्लॉब्स (data blobs) को रखता है। इसे आपके डेटा को समझने की आवश्यकता नहीं है।

अपने मोबाइल ऐप्स के लिए इन primitives का उपयोग करें:

• LWW-Register: यूजर प्रोफाइल और सेटिंग्स के लिए उपयोग करें। • G-Counter: एनालिटिक्स या व्यू काउंट के लिए उपयोग करें। • PN-Counter: इन्वेंट्री या कार्ट टोटल के लिए उपयोग करें। • OR-Set: टैग्स और फेवरेट्स के लिए उपयोग करें।

अधिकांश मोबाइल ऐप्स के लिए, LWW-Registers और OR-Sets लगभग सब कुछ कवर कर लेते हैं।

Implementation Tip: जब आप LWW-Register बनाते हैं, तो हमेशा एक nodeId शामिल करें। यदि दो अपडेट का टाइमस्टैम्प बिल्कुल समान है, तो nodeId एक tiebreaker के रूप में कार्य करता है। इसके बिना, आपके डिवाइस एक ही स्थिति (state) में सिंक नहीं होंगे।

State-based बनाम Operation-based:

मोबाइल के लिए State-based (CvRDT) चुनें। यह अविश्वसनीय नेटवर्क पर भी काम करता है क्योंकि मर्ज प्रक्रिया idempotent होती है। यदि सिंक बीच में विफल हो जाता है, तो आप बस फिर से प्रयास करते हैं।

शुरुआत में Operation-based (CmRDT) से बचें। इसके लिए exactly-once delivery की आवश्यकता होती है। मोबाइल नेटवर्क पर उस इंफ्रास्ट्रक्चर को बनाना कठिन है और यह उस जटिलता को बढ़ाता है जिससे आप बचना चाहते हैं।

आर्किटेक्चर:

  1. अपने Kotlin Multiplatform प्रोजेक्ट के commonMain मॉड्यूल में अपना CRDT लॉजिक बनाएं।
  2. डेटा को स्थानीय रूप से स्टोर करने के लिए SQLDelight का उपयोग करें।
  3. डेटा ब्लॉब्स को S3 या Cloud Storage जैसी सेवा पर सिंक करें।
  4. आपका backend सरल और सस्ता बना रहता है।

जटिल sync engines बनाना बंद करें। लॉजिक को क्लाइंट पर ले जाने के लिए CRDTs का उपयोग करें। यह आपको सर्वर रोटेशन प्रबंधित करने के बजाय फीचर्स बनाने पर ध्यान केंद्रित करने देता है।

Source: https://dev.to/software_mvp-factory/crdts-in-kotlin-multiplatform-kill-your-sync-server-28n8