Kotlin Multiplatform-এ CRDTs: আপনার Sync Server বিদায় জানান
বেশিরভাগ টিম ডেটা কনফ্লিক্ট (data conflicts) সামলানোর জন্য একটি সেন্ট্রাল সার্ভার তৈরি করে। সার্ভারটি রাইট (writes) গ্রহণ করে, একটি বিজয়ী নির্বাচন করে এবং সব ঠিক থাকার আশা করে। এটি একটি single point of failure তৈরি করে এবং রক্ষণাবেক্ষণের জন্য জটিল কোড তৈরি করে।
Conflict-Free Replicated Data Types (CRDTs) এই ধারণাটি বদলে দেয়। কোনো কেন্দ্রীয় নিয়ন্ত্রণ ছাড়াই প্রতিটি ডিভাইস একই অবস্থায় (state) পৌঁছাতে পারে। এটি একটি গাণিতিক নিশ্চয়তা।
আপনি আপনার sync backend-কে একটি সাধারণ blob storage দিয়ে প্রতিস্থাপন করতে পারেন। আপনার সার্ভার তখন একটি relay হিসেবে কাজ করবে যা ডেটা blob গুলো ধরে রাখে। আপনার ডেটা বোঝার জন্য সার্ভারের কোনো প্রয়োজন নেই।
আপনার মোবাইল অ্যাপের জন্য এই primitives গুলো ব্যবহার করুন:
• LWW-Register: ইউজার প্রোফাইল এবং সেটিংসের জন্য ব্যবহার করুন। • G-Counter: অ্যানালিটিক্স বা ভিউ কাউন্টের জন্য ব্যবহার করুন। • PN-Counter: ইনভেন্টরি বা কার্ট টোটালের জন্য ব্যবহার করুন। • OR-Set: ট্যাগ এবং ফেভারিটসের জন্য ব্যবহার করুন।
বেশিরভাগ মোবাইল অ্যাপের জন্য, LWW-Registers এবং OR-Sets প্রায় সবকিছুই কভার করে।
বাস্তবায়নের টিপস (Implementation Tip): যখন আপনি একটি LWW-Register তৈরি করবেন, সবসময় একটি nodeId অন্তর্ভুক্ত করবেন। যদি দুটি আপডেটের টাইমস্ট্যাম্প (timestamp) একদম হুবহু এক হয়, তবে nodeId একটি tiebreaker হিসেবে কাজ করবে। এটি ছাড়া আপনার ডিভাইসগুলো একই অবস্থায় সিঙ্ক (sync) করতে পারবে না।
State-based বনাম Operation-based:
মোবাইলের জন্য State-based (CvRDT) বেছে নিন। এটি অনির্ভরযোগ্য নেটওয়ার্কেও কাজ করে কারণ এর merge প্রসেসটি idempotent। যদি সিঙ্ক মাঝপথে ব্যর্থ হয়, আপনি শুধু আবার চেষ্টা করবেন।
শুরুতেই Operation-based (CmRDT) এড়িয়ে চলুন। এর জন্য exactly-once delivery প্রয়োজন। মোবাইল নেটওয়ার্কে এই ধরনের ইনফ্রাস্ট্রাকচার তৈরি করা কঠিন এবং এটি সেই জটিলতা বাড়িয়ে দেয় যা আপনি এড়াতে চান।
আর্কিটেকচার (The Architecture):
- আপনার Kotlin Multiplatform প্রজেক্টের commonMain মডিউলে CRDT লজিক তৈরি করুন।
- ডেটা লোকালি স্টোর করার জন্য SQLDelight ব্যবহার করুন।
- ডেটা blob গুলো S3 বা Cloud Storage-এর মতো কোনো সার্ভিসে সিঙ্ক করুন।
- আপনার ব্যাকএন্ড সহজ এবং সাশ্রয়ী থাকবে।
জটিল sync engine তৈরি করা বন্ধ করুন। লজিক ক্লায়েন্টে নিয়ে আসার জন্য CRDTs ব্যবহার করুন। এটি আপনাকে সার্ভার রোটেশন ম্যানেজ করার পরিবর্তে ফিচার তৈরিতে মনোযোগ দিতে সাহায্য করবে।
Source: https://dev.to/software_mvp-factory/crdts-in-kotlin-multiplatform-kill-your-sync-server-28n8