8 pontos por GN⁺ 2024-06-26 | 1 comentários | Compartilhar no WhatsApp
  • Software Local-First: software que armazena os dados principalmente no dispositivo local e só sincroniza ou faz backup pela internet quando necessário
  • Problemas do Local-First
    • É ótimo que o usuário possa possuir e controlar seus dados
    • Mas ainda é necessário um servidor de sincronização para sincronização online entre vários dispositivos
    • Se a empresa falir, o servidor de sincronização também desaparece, tornando a sincronização impossível
    • Como resolver isso?

Solução usando Dropbox

  • Sincronização em nuvem: é possível usar várias soluções de sincronização de arquivos baseadas em nuvem, como Dropbox, iCloud Drive, OneDrive e Google Drive
  • Vantagens: muita gente já usa esses serviços, e há várias implementações, então eles podem ser substituídos
  • Desvantagens: a sincronização de arquivos é um protocolo simples e carece de eventos de sincronização e recursos de resolução de conflitos

Versão 1: método muito simples

  • Salvar o estado em um arquivo e sincronizá-lo com o Dropbox
  • Se o estado for alterado em dois dispositivos, arquivos em conflito serão criados
  • Usando CRDT (Conflict-free Replicated Data Types), é possível resolver conflitos
    • CRDT é um conjunto de tipos de dados que sempre podem ser mesclados
  • A solução é abrir os arquivos em conflito, mesclar o estado e salvar novamente

Versão 2: arquivo por cliente

  • Evitar conflitos atribuindo um arquivo exclusivo a cada cliente
  • Quando o arquivo de outro cliente muda, detectar isso e fazer a mesclagem
  • Como as alterações são feitas apenas localmente, o Dropbox não relata conflitos

Versão 3: baseado em operações

  • Se o CRDT for operation-based, as operações podem ser registradas em um arquivo separado somente de anexação
  • Cada cliente grava em seu próprio arquivo, evitando conflitos
  • Quando o log de operações fica longo, o arquivo é dividido em chunks para aumentar a eficiência da sincronização

Conclusão

  • Para construir aplicações local-first em que o usuário tenha controle total e propriedade sobre os dados, é necessário sincronizar os dados
  • Serviços de sincronização de arquivos como o Dropbox oferecem uma forma simples, mas eficaz, de sincronização
  • Não é uma sincronização em tempo real no mesmo nível de uma solução sob medida, mas é suficiente para a sincronização do dia a dia
  • Por exemplo, como no Apple Photos, já basta poder ver suas próprias fotos de qualquer lugar no fim do dia
  • O usuário pode usar sua própria nuvem para ter sincronização permanente e gratuita

Opinião do GN⁺

  • Importância do software Local-First: o usuário pode possuir e controlar diretamente seus dados, o que é vantajoso para privacidade e segurança de dados.
  • Limites dos serviços de sincronização: serviços como o Dropbox permitem sincronização básica, mas têm limitações em cenários de sincronização mais complexos.
  • Uso de CRDT: com CRDT, a resolução de conflitos fica mais fácil, aumentando a confiabilidade da sincronização.
  • Soluções alternativas: também vale considerar soluções de sincronização open source como o Syncthing.
  • Pontos a considerar ao adotar a tecnologia: ao adotar software Local-First, é preciso avaliar bem a estabilidade do servidor de sincronização e as estratégias de resolução de conflitos.

1 comentários

 
GN⁺ 2024-06-26
Opiniões do Hacker News
  • É importante permitir que o servidor de sincronização de backend de aplicativos local-first possa ser hospedado localmente: a simples sincronização de arquivos não basta para oferecer certos recursos. O usuário deve poder salvar um workspace.zip a qualquer momento e baixar server.exe/.bin para hospedar o backend por conta própria.

  • Dificuldade de monetização de aplicativos local-first: há modelos como o do Obsidian, em que o app básico é oferecido gratuitamente e os recursos de rede são cobrados. Recomenda-se usar Yjs para criar apps local-first + colaborativos.

  • CRDTs nem sempre são a melhor escolha: podem ser adequados para sincronização de arquivos, mas pode ser melhor que um servidor central valide a lógica de negócio e resolva conflitos de merge. A abordagem de máquina de estados distribuída pode ser complexa e difícil de manter.

  • Protocolo RemoteStorage: qualquer aplicativo pode implementá-lo e permitir que o usuário forneça sua própria URL do RemoteStorage. Porém, a maioria das implementações não recebe manutenção.

  • Limitações das soluções de sincronização de arquivos baseadas em nuvem: elas não são adequadas para software colaborativo ou em tempo real. É necessário um modelo que ofereça recursos de colaboração sem vendor lock-in.

  • Vantagens do software local-first: o desenvolvimento fica mais fácil e a experiência do usuário melhora. É esperado que surjam frameworks local-first que ofereçam uma experiência para desenvolvedores parecida com a de Nuxt ou Next.

  • Riscos do armazenamento em nuvem: o provedor de nuvem pode apagar os dados ou bloquear o acesso. Ao usar armazenamento em nuvem local-first, é preciso configurar para baixar todos os arquivos.

  • Experiência de sincronização com PWA: foi criado um PWA que sincroniza usando AWS e WebDAV. Para reduzir o tempo de sincronização, é importante minimizar os tempos de leitura e escrita.

  • Limitações da ideia de cloud-first: quando ocorrer uma interrupção de rede em escala continental, os problemas da ideia de cloud-first ficarão evidentes.

  • Dificuldade da sincronização local-first no mobile: no iPhone, é difícil lidar com sincronização de arquivos em segundo plano, como a do Dropbox.