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:

  1. Construa sua lógica de CRDT no módulo commonMain do seu projeto Kotlin Multiplatform.
  2. Use SQLDelight para armazenar os dados localmente.
  3. Sincronize os blobs de dados com um serviço como S3 ou Cloud Storage.
  4. 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