𝗖𝗥𝗗𝗧 𝗲𝗻 𝗞𝗼𝘁𝗹𝗶𝗻 𝗠𝘂𝗹𝘁𝗶𝗽𝗹𝗮𝘁𝗳𝗼𝗿𝗺: 𝗘𝗹𝗶𝗺𝗶𝗻𝗮 𝗶𝗹 𝘁𝘂𝗼 𝘀𝗲𝗿𝘃𝗲𝗿 𝗱𝗶 𝘀𝗶𝗻𝗰𝗿𝗼𝗻𝗶𝘇𝘇𝗮𝘇𝗶𝗼𝗻𝗲
La maggior parte dei team costruisce un server centrale per gestire i conflitti dei dati. Il server riceve le scritture, sceglie un vincitore e spera nel meglio. Questo crea un singolo punto di guasto e codice complesso da mantenere.
I Conflict-Free Replicated Data Types (CRDT) cambiano tutto questo. Ogni dispositivo raggiunge lo stesso stato senza un supervisore centrale. È una garanzia matematica.
Puoi sostituire il tuo backend di sincronizzazione con un semplice blob storage. Il tuo server diventa un relay che ospita blob di dati. Non ha bisogno di comprendere i tuoi dati.
Usa queste primitive per le tue app mobile:
• LWW-Register: Usalo per profili utente e impostazioni. • G-Counter: Usalo per analytics o conteggio delle visualizzazioni. • PN-Counter: Usalo per l'inventario o il totale del carrello. • OR-Set: Usalo per tag e preferiti.
Per la maggior parte delle app mobile, LWW-Register e OR-Set coprono quasi tutto.
Consiglio di implementazione:
Quando crei un LWW-Register, includi sempre un nodeId. Se due aggiornamenti hanno lo stesso identico timestamp, il nodeId funge da tiebreaker. Senza questo, i tuoi dispositivi non si sincronizzeranno allo stesso stato.
State-based vs. Operation-based:
Scegli State-based (CvRDT) per il mobile. Funziona su reti inaffidabili perché il processo di merge è idempotente. Se una sincronizzazione fallisce a metà, basta riprovare.
Evita Operation-based (CmRDT) nelle fasi iniziali. Richiede una consegna exactly-once. Costruire un'infrastruttura del genere sulle reti mobili è difficile e aggiunge la complessità che vuoi evitare.
L'architettura:
- Costruisci la logica CRDT nel modulo
commonMaindel tuo progetto Kotlin Multiplatform. - Usa SQLDelight per memorizzare i dati localmente.
- Sincronizza i blob di dati su un servizio come S3 o Cloud Storage.
- Il tuo backend rimane semplice ed economico.
Smetti di costruire complessi motori di sincronizzazione. Usa i CRDT per spostare la logica sul client. Questo ti permette di concentrarti sulla creazione di funzionalità invece di gestire la rotazione dei server.
Fonte: https://dev.to/software_mvp-factory/crdts-in-kotlin-multiplatform-kill-your-sync-server-28n8