Superando o desafio de sincronizar dados com Change Vectors

Para estar junto não é preciso estar perto, e sim do lado de dentro.
Leonardo Da Vinci
Sistemas distribuídos lidam constantemente com o desafio de sincronizar dados de processos. Não raro, vê-se adotar estratégias ingênuas como a adição de campos com registro de datas de última modificação que falham frente a problemas de sincronização de relógio ou gestão de concorrência para múltiplos repositórios.
0
Compartilhe alguma experiência com essa estratégiax

Uma abordagem consistente para sincronização de dados em diversos repositórios, com suporte melhorado para gestão de conflitos e concorrência, é a adoção de uma versão adaptada de Vector Clocks, uma estrutura de dados para sequenciamento de eventos, chamada Change Vectors.

Change Vector no RavenDB

Change Vector é a estrutura de dados adotada pelo RavenDB como fundamento para controlar gestão de dados sincronizados em bases de dados distribuídas, onde todos as instâncias operam como Master.

A lógica essencial é a seguinte:

  • Todos os repositórios que irão armazenar dados sincronizados recebem um id único e imutável.
  • Todas as tuplas para dados armazenados incluem um campo especial para o change vector.
  • Quando uma nova tupla é criada, o campo dedicado ao change vector recebe uma entrada com a chave correspondendo ao id do repositório e um valor de contagens iniciado em 1.
  • Toda vez que uma tupla é atualizada, o change vector tem o valor da entrada correspondente ao id do repositório incrementado em uma unidade.

Um mecanismo de sincronização pode usar, então, a informação do change vector para determinar qual versão da tupla é mais atualizada, executando a replicação.

As regras essenciais de comparação entre dois change vectors são:

  • São iguais se, e somente se, todas as entradas, nos dois change vectors,  tiverem valores iguais para todos os ids (ids não relacionados tem valor lógico zero)
  • Um change vector A é maior que um change vector B se, e somente se, todos os valores forem maiores ou iguais entre os ids de repositório correspondentes.
  • Um change vector A conflita com um change vector B se, e somente se, pelo menos um dos valores de A for maior ou igual ao correspondente B e pelo menos um dos valores de B for maior ou igual ao correspondente A.

Na ocorrência de um conflito, alguma estratégia de resolução precisa ser adotada, geralmente customizada pela natureza da própria tupla, geralmente, para isso, poderá ser recuperada a versão ancestral de todas as tuplas conflitantes, além da versão dessas tuplas.

As chances de conflitos reduzem bastante quando alterações em uma tupla acontecem preferencialmente em um único repositório, bem como, quando as comparações forem mais frequentes.

Eventualmente, os próprios repositórios podem manter change vectors globais para comparação rápida e determinar “sentido de atualização”

 

Referências bibliográficas

EINI, Oren. Change Vectors on RavenDB. 2019. Disponível em: https://ravendb.net/docs/article-page/4.2/csharp/server/clustering/replication/change-vector. Acesso em: 12 jul. 2021.

VAN STEEN, Maarten; TANENBAUM, Andrew S.. Distributed Systems. 3. ed. Gravenstein Highway North, Ca: Createspace Independent Publishing Platform, 2017.

Compartilhe este capítulo:

Compartilhe:

Comentários

Participe da construção deste capítulo deixando seu comentário:

Inscrever-se
Notify of
guest
0 Comentários
Feedbacks interativos
Ver todos os comentários

Fundador e CEO da EximiaCo, atua como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Mentoria

para arquitetos de software

Imersão, em grupo, supervisionada por Elemar Júnior, onde serão discutidos tópicos avançados de arquitetura de software, extraídos de cenários reais, com ênfase em systems design.

Consultoria e Assessoria em

Arquitetura de Software

EximiaCo oferece a alocação de um Arquiteto de Software em sua empresa para orientar seu time no uso das melhores práticas de arquitetura para projetar a evolução consistente de suas aplicações.

ElemarJúnior

Fundador e CEO da EximiaCo, atua como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

+55 51 99942-0609 |  contato@eximia.co

+55 51 99942-0609  contato@eximia.co

0
Quero saber a sua opinião, deixe seu comentáriox
()
x