𝗖𝗥𝗗𝗧𝘀 𝗶𝗻 𝗞𝗼𝘁𝗹𝗶𝗻 𝗠𝘂𝗹𝘁𝗶𝗽𝗹𝗮𝘁𝗳𝗼𝗿𝗺: 𝗞𝗶𝗹𝗹 𝗬𝗼𝘂𝗿 𝗦𝘆𝗻𝗰 𝗦𝗲𝗿𝘃𝗲𝗿
Timu nyingi hujenga server kuu ili kushughulikia migongano ya data (data conflicts). Server inapokea maandishi (writes), huchagua mshindi, na kutumaini matokeo bora. Hii inatengeneza sehemu moja ya hitilafu (single point of failure) na kodi tata inayohitaji matengenezo.
Conflict-Free Replicated Data Types (CRDTs) zinabadilisha hili. Kila kifaa hufikia hali sawa bila kuhitaji mamlaka kuu. Ni uhakika wa kimahesabu.
Unaweza kubadilisha backend yako ya sync kwa kutumia blob storage rahisi. Server yako inakuwa kama kiunganishi (relay) kinachohifadhi data blobs. Hauna haja ya kuelewa data yako.
Tumia primitives hizi kwa programu zako za simu:
• LWW-Register: Itumie kwa wasifu wa watumiaji (user profiles) na mipangilio (settings). • G-Counter: Itumie kwa uchambuzi (analytics) au idadi ya watazamaji (view counts). • PN-Counter: Itumie kwa hesabu za bidhaa (inventory) au jumla ya mkokotoni (cart totals). • OR-Set: Itumie kwa lebo (tags) na vitu unavyovipenda (favorites).
Kwa programu nyingi za simu, LWW-Registers na OR-Sets zinatosheleza karibu kila kitu.
Kidokezo cha Utekelezaji:
Unapojenga LWW-Register, kila wakati jumuisha nodeId. Ikiwa sasisho mbili zina timestamp sawa kabisa, nodeId inafanya kazi kama mpatanishi (tiebreaker). Bila hili, vifaa vyako havitafanya sync hadi hali sawa.
State-based vs. Operation-based:
Chagua State-based (CvRDT) kwa ajili ya simu. Inafanya kazi kwenye mitandao isiyo na uhakika kwa sababu mchakato wa kuunganisha (merge process) ni idempotent. Ikiwa sync itafeli katikati, unajaribu tena tu.
Epuka Operation-based (CmRDT) mwanzoni. Inahitaji utoaji wa mara moja tu (exactly-once delivery). Kujenga miundombinu hiyo kwenye mitandao ya simu ni vigumu na inaongeza utata unaotaka kuepuka.
Muundo (The Architecture):
- Jenga mantiki (logic) yako ya CRDT kwenye moduli ya
commonMainya mradi wako wa Kotlin Multiplatform. - Tumia SQLDelight kuhifadhi data ndani ya kifaa (locally).
- Fanya sync ya data blobs kwenye huduma kama S3 au Cloud Storage.
- Backend yako inabaki kuwa rahisi na ya gharama nafuu.
Acha kujenga injini za sync tata. Tumia CRDTs kuhamishia mantiki kwa client. Hii inakuwezesha kuzingatia ujenzi wa vipengele (features) badala ya kusimamia mzunguko wa server (server rotations).
Chanzo: https://dev.to/software_mvp-factory/crdts-in-kotlin-multiplatform-kill-your-sync-server-28n8