CRDTs em Kotlin Multiplatform: Mate seu servidor de sincronização
A maioria das equipes constrói um servidor central para lidar com conflitos de dados. O servidor recebe as gravações, escolhe um vencedor e espera pelo melhor. Isso cria um ponto único de falha e um código complexo para manter.
Conflict-Free Replicated Data Types (CRDTs) mudam isso. Cada dispositivo alcança o mesmo estado sem um chefe central. É uma garantia matemática.
Você pode substituir seu backend de sincronização por um simples armazenamento de blobs. Seu servidor torna-se um relay que armazena blobs de dados. Ele não precisa entender seus dados.
Use estas primitivas para seus aplicativos móveis:
• LWW-Register: Use para perfis de usuário e configurações. • G-Counter: Use para analytics ou contagem de visualizações. • PN-Counter: Use para inventário ou totais de carrinho. • OR-Set: Use para tags e favoritos.
Para a maioria dos aplicativos móveis, LWW-Registers e OR-Sets cobrem quase tudo.
Dica de Implementação:
Ao construir um LWW-Register, sempre inclua um nodeId. Se duas atualizações tiverem exatamente o mesmo timestamp, o nodeId atuará como um desempate. Sem isso, seus dispositivos não sincronizarão com o mesmo estado.
State-based vs. Operation-based:
Escolha State-based (CvRDT) para dispositivos móveis. Funciona em redes não confiáveis porque o processo de merge é idempotente. Se uma sincronização falhar no meio do caminho, basta tentar novamente.
Evite Operation-based (CmRDT) no início. Isso requer entrega "exactly-once". Construir essa infraestrutura em redes móveis é difícil e adiciona a complexidade que você deseja evitar.
A Arquitetura:
- Construa sua lógica de CRDT no módulo
commonMaindo seu projeto Kotlin Multiplatform. - Use SQLDelight para armazenar os dados localmente.
- Sincronize os blobs de dados com um serviço como S3 ou Cloud Storage.
- Seu backend permanece simples e barato.
Pare de construir mecanismos de sincronização complexos. Use CRDTs para mover a lógica para o cliente. Isso permite que você foque em construir funcionalidades em vez de gerenciar a rotação de servidores.
Fonte: https://dev.to/software_mvp-factory/crdts-in-kotlin-multiplatform-kill-your-sync-server-28n8