A sincronização na nuvem dos dados do utilizador não envolve apenas carregamentos e transferências. Tem de proteger o conteúdo privado em trânsito, manter os custos de armazenamento baixos, serializar escritas de vários dispositivos, compreender diferentes formatos de dados, pedir confirmação antes de eliminações perigosas e preservar uma forma de voltar atrás quando uma decisão estiver errada.
O Orkas trata a sincronização na nuvem como um limite do produto, não como um utilitário em segundo plano. As conversas, os agentes, as competências, o estado da tarefa, os ficheiros de conhecimento e as definições têm de passar de um dispositivo para outro, mantendo uma cadeia de responsabilidade clara: o dispositivo prepara o conteúdo, o armazenamento de objetos contém os bytes e o servidor detém o índice de referência.
A estrutura abaixo é a que usamos para analisar o sistema: fluxo de conteúdo cifrado, armazenamento endereçado pelo conteúdo, bloqueio de sincronização ao nível da conta, confirmação sob responsabilidade do servidor, regras de sincronização determinísticas, tratamento de conflitos assistido por modelo, confirmação de eliminação, reciclagem e marcadores de recuperação.
O contrato de sincronização
Cada passagem de sincronização responde a quatro perguntas sobre o produto: que conteúdo pode ser transferido, como é protegido, quem tem permissão para publicar um novo índice na nuvem e como pode o utilizador recuperar os dados se a sincronização tomar a decisão errada?
Percurso do conteúdo cifrado
Os dados do utilizador são preparados no dispositivo antes de chegarem ao armazenamento. O mecanismo de sincronização normaliza o conjunto de candidatos, calcula a identidade do conteúdo, cifra as cargas úteis, carrega-as através de credenciais de curta duração e verifica os bytes transferidos antes de os voltar a gravar no dispositivo.
Armazenamento e índice
O Orkas separa os bytes armazenados do índice da nuvem. Os objetos de conteúdo contêm os dados cifrados. O índice regista que itens de dados lógicos devem existir, a sua identidade de conteúdo, os contadores de versão, o tamanho armazenado, a revisão na nuvem e o estado de eliminação. O dispositivo também mantém um estado de referência da última passagem bem-sucedida para poder distinguir o estado antigo das novas edições.
Uma passagem de sincronização
Uma passagem começa com um custo reduzido e só se torna rigorosa quando há trabalho real. O Orkas começa por verificar se algo mudou, depois obtém o bloqueio de sincronização da conta, recalcula as alterações enquanto mantém o bloqueio, transfere o conteúdo, pede ao servidor que confirme as operações do índice e, por fim, atualiza o estado de referência do dispositivo.
Bloqueio de sincronização e confirmação
O bloqueio de sincronização e a verificação da confirmação resolvem problemas diferentes. O bloqueio de sincronização reduz o desperdício de trabalho simultâneo entre dispositivos. O bloqueio do lado do servidor serializa as escritas do índice. A verificação da revisão esperada na nuvem evita que uma leitura mais antiga se torne o próximo estado de referência. As verificações de quota e esquema são executadas no mesmo processo de confirmação sob responsabilidade do servidor.
Regras antes dos conflitos
A maioria das decisões de sincronização não são conflitos. O dispositivo compara o estado de referência, os dados atuais do dispositivo e o índice da nuvem. Se apenas a nuvem mudou, transfira os dados para o dispositivo. Se apenas o dispositivo mudou, envie os dados para a nuvem. Se ambos foram alterados, encaminhe-os por tipo de conteúdo. Se algo desapareceu, siga o processo de proteção contra eliminações em vez de remover os dados imediatamente.
Tratamento de conflitos
Quando ambos os lados mudaram efetivamente, o Orkas não se limita a fazer prevalecer a última escrita. Os registos que só permitem acrescentar entradas podem ser combinados acrescentando as entradas em falta. As listas podem ser combinadas através da identidade estável dos registos. O JSON estruturado pode usar contadores de versão e marcas de data/hora. O tratamento de Markdown e de ficheiros binários é conservador: se o sistema não conseguir comprovar uma combinação sem perdas, mantém uma cópia completa da versão preterida.
Para conflitos ambíguos em texto ou conteúdo estruturado, o produto pode agrupar as versões relevantes para tratamento assistido por modelo. O modelo pode explicar o conflito, redigir uma versão combinada ou ajudar o utilizador a escolher. Não é a única proteção: a validação determinística, os originais arquivados e a recuperação visível para o utilizador continuam a fazer parte do processo.
Confirmação de eliminação
As eliminações são tratadas como transições de estado. Uma eliminação remota torna-se um marcador de eliminação. Uma eliminação do lado do dispositivo torna-se uma operação candidata. O Orkas verifica as escritas recentes, observa grandes vagas de eliminações e interrompe a passagem para pedir confirmação quando a quantidade de dados do utilizador que desaparecem parece arriscada.
Reciclagem e recuperação
Antes de uma eliminação válida remover uma cópia do dispositivo, o Orkas move-a para a reciclagem de sincronização. As versões preteridas nos conflitos são arquivadas para revisão. Os carregamentos pendentes são preservados se a confirmação falhar, para que a passagem seguinte possa reutilizar os bytes. Se um utilizador limpar deliberadamente os dados da nuvem, os outros dispositivos verão um marcador de limpeza e deixarão de reenviar conteúdo desatualizado.
O que isto nos traz
O resultado é um sistema de sincronização com limites claros. Os dispositivos preparam e verificam o conteúdo. O armazenamento de objetos contém bytes cifrados. O servidor publica o índice. O bloqueio de sincronização da conta e o bloqueio do servidor mantêm as passagens ordenadas. As regras tratam dos casos comuns. A assistência do modelo ajuda nos conflitos ambíguos. A confirmação de eliminação e a reciclagem protegem os utilizadores dos erros mais dispendiosos.
Este é o padrão de que o Orkas precisa para a sincronização na nuvem: não é magia, não é um espelho cego, mas um mecanismo cuidadoso que permite que os dados do utilizador passem de um dispositivo para outro e continuem a parecer consistentes.