Atlas Device Sync Protocol
Nesta pƔgina
- VisĆ£o geral
- Conceitos chave
- Conjunto de alteraƧƵes
- transformaĆ§Ć£o operacional
- Identificador de arquivo do cliente
- SeguranƧa de rede
- Processo da sessĆ£o de sincronizaĆ§Ć£o
- O cliente se conecta ao servidor de aplicativos
- O cliente inicia uma sessĆ£o de sincronizaĆ§Ć£o
- O App Services aloca um novo identificador de arquivo do cliente
- O cliente envia um identificador do cliente
- Uploads e downloads do cliente sincronizar conjuntos de alteraƧƵes
- O cliente encerra a sessĆ£o de sincronizaĆ§Ć£o
- Tipos de solicitaĆ§Ć£o
- Cliente -> Mensagens do servidor
- servidor -> Mensagens do cliente
VisĆ£o geral
O Atlas Device Sync usa um protocolo para sincronizar correta e eficientemente as alteraƧƵes de dados em tempo real em vĆ”rios clientes, cada um mantendo seus prĆ³prios arquivos Realm locais. O protocolo define um conjunto de tipos de solicitaĆ§Ć£o predefinidos, bem como um processo pelo qual um cliente, como um Realm SDK, pode se conectar a um servidor de aplicativos Atlas App Services e sincronizar dados.
ObservaĆ§Ć£o
Os SDKs do Realm implementam e managed internamente o protocolo de sincronizaĆ§Ć£o; portanto, para a maioria das aplicaĆ§Ć£o, vocĆŖ nĆ£o precisa entender o protocolo de sincronizaĆ§Ć£o para usar o Realm Mobile Sync. Esta pĆ”gina abrange o protocolo em um alto nĆvel e nĆ£o Ć© uma especificaĆ§Ć£o de implementaĆ§Ć£o.
Conceitos chave
Conjunto de alteraƧƵes
Um changeset Ć© uma lista de instruƧƵes que descrevem modificaƧƵes granulares feitas em um estado ou versĆ£o de objeto conhecido por uma ou mais operaƧƵes de gravaĆ§Ć£o. Os conjuntos de alteraƧƵes sĆ£o a unidade base do protocolo de sincronizaĆ§Ć£o. Os clientes do Realm sincronizados enviam conjuntos de alteraƧƵes para o servidor Realm Mobile Sync sempre que executam uma operaĆ§Ć£o de gravaĆ§Ć£o. O servidor envia a cada cliente conectado os conjuntos de alteraƧƵes para operaƧƵes de gravaĆ§Ć£o executadas por outros clientes.
O servidor do Realm Mobile Sync aceita conjuntos de alteraƧƵes de qualquer cliente de sincronizaĆ§Ć£o conectado (incluindo alteraƧƵes em um cluster MongoDB sincronizado) a qualquer momento e usa um algoritmo de transformaĆ§Ć£o operacional para serializar as alteraƧƵes em uma ordem linear e resolver conjuntos de alteraƧƵes conflitantes antes de enviĆ”-los aos clientes conectados.
ObservaĆ§Ć£o
SincronizaĆ§Ć£o do delta
Quando vocĆŖ faz uma alteraĆ§Ć£o em um objeto sincronizado, o Atlas App Services nĆ£o recarrega o objeto inteiro. Em vez disso, o Atlas App Services envia apenas a diferenƧa ("delta") entre antes e depois. O serviƧo comprime os deltas com zlib compressĆ£o. Isso reduz a carga da rede, o que Ć© especialmente Ćŗtil em condiƧƵes de rede mĆ³vel.
transformaĆ§Ć£o operacional
Uma transformaĆ§Ć£o operacional Ć© uma funĆ§Ć£o que, dado dois conjuntos de alteraƧƵes, produz um terceiro conjunto de alteraƧƵes que representa a aplicaĆ§Ć£o lĆ³gica de um dos conjuntos de alteraƧƵes fornecidos apĆ³s o outro. O Device Sync usa transformaĆ§Ć£o operacional para resolver conflitos entre conjuntos de alteraƧƵes de diferentes clientes de sincronizaĆ§Ć£o que se aplicam ao mesmo estado base.
O Realm Ć© um banco de dados local offline, mesmo quando a sincronizaĆ§Ć£o estĆ” ativada, o que significa que qualquer dispositivo pode realizar gravaƧƵes offline e carregar os conjuntos de alteraƧƵes correspondentes mais tarde, quando a conectividade de rede for restabelecida. O algoritmo de transformaĆ§Ć£o operacional foi projetado para lidar normalmente com conjuntos de alteraƧƵes que chegam "fora de ordem" em relaĆ§Ć£o ao relĆ³gio lĆ³gico do servidor, de modo que cada arquivo Realm sincronizado converja para a mesma versĆ£o de cada objeto alterado.
Dica
Uma transformaĆ§Ć£o operacional em conjuntos de alteraƧƵes de Realm Ć© anĆ”loga a uma operaĆ§Ć£o de rebase em Git.
Identificador de arquivo do cliente
Um identificador de Arquivo de Realm do cliente Ć© um valor que identifica exclusivamente um Arquivo de Realm do cliente sincronizado e seu arquivo de servidor correspondente. O servidor gera um identificador de arquivo do cliente sempre que um SDK solicita um durante a sincronizaĆ§Ć£o inicial de um Arquivo de Realm. Cada identificador Ć© um nĆŗmero inteiro assinado positivo de 64 bits, estritamente menor que 2^63.
ObservaĆ§Ć£o
O servidor garante que todos os identificadores gerados em nome de um arquivo de servidor especĆfico sejam exclusivos entre si. O servidor Ć© livre para gerar identificadores idĆŖnticos para dois arquivos de clientes se eles estiverem associados a arquivos de servidor diferentes.
SeguranƧa de rede
O SDK sincroniza com o servidor de aplicaĆ§Ć£o por meio de uma conexĆ£o WebSocket protegida por HTTPS usando TLS 1.3.
Processo da sessĆ£o de sincronizaĆ§Ć£o
Para iniciar, executar e encerrar uma sessĆ£o de sincronizaĆ§Ć£o do Realm Mobile Sync, um Realm SDK e um servidor de aplicaĆ§Ć£o enviam e recebem um conjunto de solicitaƧƵes especĆficas do protocolo.
O SDK negociar uma conexĆ£o WebSocket por HTTP e entĆ£o estabelecer uma sessĆ£o de sincronizaĆ§Ć£o enviando solicitaƧƵes do BIND
e IDENT
para o servidor pela conexĆ£o do WebSocket. Depois que a sessĆ£o Ć© estabelecida, o SDK e o servidor enviam conjuntos de alteraƧƵes sincronizados para um determinado Arquivo de Realm entre si por meio de mensagens UPLOAD
e DOWNLOAD
. Para encerrar a sessĆ£o, o SDK envia uma solicitaĆ§Ć£o UNBIND
.
Realm SDK App Server | | | <---- 1. HTTP Handshake -----> | | | | --------- 2. BIND -----------> | | | | <-- 3. IDENT (first time) ---- | | | | --------- 4. IDENT ----------> | | | | <---- 5. UPLOAD/DOWNLOAD ----> | | | | --------- 6. UNBIND ---------> |
O cliente se conecta ao servidor de aplicativos
O protocolo de sincronizaĆ§Ć£o Ć© tratado principalmente por meio de uma conexĆ£o WebSocket entre o SDK e o servidor. Para estabelecer uma conexĆ£o, o SDK envia uma solicitaĆ§Ć£o HTTP de handshake que inclui o seguinte:
uma versĆ£o de protocolo
uma chave WebSocket
um token de acesso vƔlido para um usuƔrio autenticado do aplicativo App Services
O servidor envia um protocolo de comutaĆ§Ć£o HTTP 101 que especifica uma conexĆ£o WebSocket para o SDK. O restante do protocolo de sincronizaĆ§Ć£o ocorre por essa conexĆ£o.
O cliente inicia uma sessĆ£o de sincronizaĆ§Ć£o
Para iniciar uma sessĆ£o de sincronizaĆ§Ć£o, um Realm SDK envia uma solicitaĆ§Ć£o do BIND
para um servidor do Device Sync. A solicitaĆ§Ć£o identifica um arquivo local especĆfico do Banco de Dados Realm para sincronizar e inclui uma chave de conexĆ£o WebSocket que o servidor usarĆ” para abrir uma conexĆ£o bidirecional com o SDK.
Se o SDK estiver tentando sincronizar um arquivo especĆfico do Realm Database pela primeira vez, ele ainda nĆ£o possui um identificador de cliente gerado pelo servidor para o arquivo. Nesse caso, a solicitaĆ§Ć£o BIND
tambƩm indica que o servidor do Device Sync deve alocar um.
O App Services aloca um novo identificador de arquivo do cliente
Se uma solicitaĆ§Ć£o BIND
indicar que o SDK precisa de um identificador de arquivo do cliente , o servidor Device Sync gerarĆ” um valor exclusivo para o arquivo do Realm Database especificado e o enviarĆ” para o SDK em uma resposta IDENT
. Quando o SDK recebe o IDENT
, ele armazena o novo identificador de cliente persistentemente no arquivo de banco de dados Realm local.
Um SDK sĆ³ precisa solicitar um identificador de arquivo do cliente na primeira vez que sincroniza cada reconhecimento de data center Realm. Para sessƵes de sincronizaĆ§Ć£o subsequentes, o SDK pode usar o identificador persistente.
O cliente envia um identificador do cliente
Depois que um SDK iniciar uma sessĆ£o de sincronizaĆ§Ć£o com uma solicitaĆ§Ć£o BIND
, ele deve identificar o arquivo local do banco de dados Realm que deseja sincronizar. Para isso, o SDK envia ao servidor de aplicaĆ§Ć£o uma mensagem IDENT
que contĆ©m o identificador de arquivo do cliente . Se o SDK tiver sincronizado anteriormente o Realm com o servidor, ele poderĆ” especificar a versĆ£o do servidor sincronizado mais recentemente para otimizar o processo de sincronizaĆ§Ć£o.
Ao receber a mensagem IDENT
, o servidor estabelece a sessĆ£o. O SDK e o servidor agora podem enviar livremente conjuntos de alteraƧƵes de sincronizaĆ§Ć£o de upload e download a qualquer momento.
Uploads e downloads do cliente sincronizar conjuntos de alteraƧƵes
Depois que uma sessĆ£o de sincronizaĆ§Ć£o Ć© estabelecida, o SDK e o servidor podem enviar e receber livremente mensagens UPLOAD
e DOWNLOAD
para sincronizar as alteraƧƵes sempre que elas ocorrerem.
O SDK envia uma mensagem UPLOAD
para cada conjunto de alteraƧƵes aplicado, exceto para aqueles que recebeu em uma mensagem DOWNLOAD
do servidor.
Quando o servidor recebe uma mensagem UPLOAD
, ele aplica transformaƧƵes operacionais para resolver quaisquer conflitos com outros conjuntos de alteraƧƵes e, em seguida, aplica o conjunto de alteraƧƵes transformado Ć versĆ£o do servidor do Realm. Isso aciona o servidor para enviar mensagens DOWNLOAD
para outros clientes conectados, incluindo o cluster Atlas sincronizado que espelha o Realm do servidor . Uma mensagem DOWNLOAD
agrupa um ou mais conjuntos de alteraƧƵes transformados em ordem cronolĆ³gica do mais antigo para o mais recente, de acordo com o histĆ³rico do servidor. O SDK aplica os conjuntos de alteraƧƵes na mesma ordem.
O cliente encerra a sessĆ£o de sincronizaĆ§Ć£o
Depois que uma sessĆ£o de sincronizaĆ§Ć£o for estabelecida, os servidores do Device Sync continuarĆ£o a aceitar UPLOAD
mensagens e enviar DOWNLOAD
mensagens atĆ© que o SDK encerre a sessĆ£o. Para encerrar uma sessĆ£o de sincronizaĆ§Ć£o , um SDK envia uma solicitaĆ§Ć£o UNBIND
para o servidor Device Sync .
Tipos de solicitaĆ§Ć£o
Cliente -> Mensagens do servidor
A tabela a seguir descreve os tipos de solicitaĆ§Ć£o que um cliente de sincronizaĆ§Ć£o pode enviar para um servidor do Device Sync:
Solicitar | DescriĆ§Ć£o |
---|---|
Inicia uma nova sessĆ£o de sincronizaĆ§Ć£o no servidor e fornece um token de autorizaĆ§Ć£o assinado para o usuĆ”rio atual do aplicaĆ§Ć£o . Se o cliente ainda nĆ£o possuir um identificador de arquivo do cliente para o Arquivo de Realm que deseja sincronizar, isso tambĆ©m indica que o servidor deve gerar um e enviĆ”-lo de volta ao cliente. Um cliente deve enviar um BIND antes de enviar qualquer outra solicitaĆ§Ć£o. | |
Fornece o identificador do arquivo do cliente que indica o seguinte:
Essa solicitaĆ§Ć£o estĆ” relacionada, mas distinta da mensagem enviada pelo servidor quando um cliente solicita um identificador de arquivo do cliente | |
Especifica um changeset que descreve uma transaĆ§Ć£o serializada que ocorreu no cliente. O cliente nĆ£o pode carregar nenhum outro conjunto de alteraƧƵes atĆ© que o servidor confirme ou rejeite a transaĆ§Ć£o. | |
Termina uma sessĆ£o de sincronizaĆ§Ć£o em execuĆ§Ć£o. Um cliente nĆ£o pode enviar quaisquer outros pedidos para uma sessĆ£o | |
Reautoriza uma sessĆ£o de sincronizaĆ§Ć£o atual com um novo token de usuĆ”rio. | |
Solicita que o servidor envie uma ou mais mensagens, que o cliente usa para baixar a versĆ£o atual do servidor do Arquivo de | |
Solicita que o servidor envie a versĆ£o do cliente do Ćŗltimo conjunto de alteraƧƵes que foi enviado pelo cliente e processado pelo servidor. Isso Ć© mais comumente usado quando um SDK executa uma redefiniĆ§Ć£o de cliente. | |
Indica que o cliente ainda estĆ” conectado e que o servidor deve manter a sessĆ£o de sincronizaĆ§Ć£o. Um cliente deve enviar pelo menos um PING para o servidor a cada 10 minutos. O servidor reconhece cada PING com Se o servidor nĆ£o receber um ping de um cliente em mais de 10 minutos, ele considerarĆ” que o cliente foi desconectado e poderĆ” encerrar automaticamente a sessĆ£o. |
servidor -> Mensagens do cliente
A tabela a seguir descreve os tipos de solicitaĆ§Ć£o que o servidor do Realm Mobile Sync pode enviar para um cliente de sincronizaĆ§Ć£o:
Solicitar | DescriĆ§Ć£o |
---|---|
Fornece um identificador de arquivo do cliente que o servidor gerou em resposta a um que solicitou o | |
Especifica um ou mais conjuntos de alteraƧƵes (atĆ© 16MB total) para operaƧƵes que ocorreram em outros clientes. Os conjuntos de alteraƧƵes sĆ£o listados por versĆ£o do servidor em ordem crescente. Os conjuntos de alteraƧƵes em um DOWNLOAD podem nĆ£o ser os conjuntos de alteraƧƵes exatos carregados por outros clientes. Em vez disso, eles podem ser conjuntos de alteraƧƵes equivalentes gerados pelo algoritmo de transformaĆ§Ć£o operacional do Device Sync. | |
Especifica que o servidor encerrou uma sessĆ£o de sincronizaĆ§Ć£o em resposta a | |
Indica se o servidor processou com ĆŖxito ou nĆ£o um changeset especificado em um do | |
ContĆ©m um ou mais segmentos de dados codificados que o cliente pode concatenar para construir a versĆ£o de servidor mais recente do Realm. Enviado em resposta a | |
Especifica a versĆ£o do cliente do Ćŗltimo changeset que foi enviado pelo cliente e processado pelo servidor. Enviado em resposta a | |
Indica que o servidor encontrou um problema que parece ter sido causado pelo cliente conectado. Para obter detalhes, consulte Erros do cliente de sincronizaĆ§Ć£o. | |
Reconhece um |