Eventual consistência

Consistência eventual é um modelo de consistência de dados que garante que, se não forem feitas novas atualizações a um dado, eventualmente todos os acessos a esse dado retornarão o último valor atualizado. O termo foi cunhado pela primeira vez por Leslie Lamport em seu artigo de 1978 "Time, Clocks, and the Ordering of Events in a Distributed System".

A consistência eventual é frequentemente usada em sistemas distribuídos onde é impraticável ou impossível alcançar uma consistência forte. A consistência real é uma garantia mais fraca do que a consistência forte, mas muitas vezes é suficiente para muitas aplicações. Por exemplo, um site de rede social pode permitir que os usuários adicionem e removam amigos, e atualizem suas informações de perfil. Desde que a lista de amigos e informações de perfil de cada usuário seja eventualmente consistente com as listas e perfis de seus amigos, a aplicação funcionará corretamente.

Existem várias formas de alcançar uma eventual consistência, incluindo replicação, métodos baseados em log e métodos baseados no quórum. Como se consegue uma eventual consistência na Microservices? A consistência eventual é um modelo de consistência de dados onde os dados são eventualmente consistentes se convergem para um estado único e correto em todos os nós de um sistema distribuído. A consistência eventual é freqüentemente usada em sistemas distribuídos onde é impraticável ou impossível alcançar uma consistência forte.

Existem algumas maneiras diferentes de alcançar uma eventual consistência em microserviços:

1. Usando um sistema de mensagens: Nesta abordagem, cada microserviço tem a sua própria base de dados e quando é feita uma alteração nos dados de uma base de dados, é enviada uma mensagem aos outros microserviços para actualizar as suas bases de dados. Esta abordagem funciona bem quando há um pequeno número de microserviços e os dados não são muito complexos.

2. 2. Usando uma base de dados compartilhada: Nesta abordagem, todos os micro-serviços partilham uma única base de dados. Quando é feita uma alteração nos dados de um microserviço, ela é imediatamente refletida nos outros microserviços. Esta abordagem funciona bem quando há um grande número de micro-serviços e os dados não são muito complexos.

3. usando uma base de dados distribuída: Nesta abordagem, cada micro-serviço tem a sua própria base de dados e as bases de dados são sincronizadas usando um sistema de base de dados distribuída. Esta abordagem funciona bem quando há um grande número de micro-serviços e os dados são complexos.

Como você evita duplicações em Kafka?

Existem algumas maneiras diferentes de prevenir duplicações em Kafka. Você pode usar chaves únicas para suas mensagens, ou pode usar um id de mensagem.

Se você estiver usando chaves únicas para suas mensagens, você pode garantir que cada mensagem tenha uma chave única, definindo as propriedades key.serializer e key.deserializer em seu produtor e consumidor Kafka. Isto assegurará que cada mensagem tenha uma chave única e que a chave seja utilizada para determinar qual mensagem é consumida por qual consumidor.

Se você estiver usando uma message id, você pode definir as propriedades message.id.serializer e message.id.deserializer em seu produtor e consumidor Kafka. Isto irá garantir que cada mensagem receba um id único, e que o id seja usado para determinar qual mensagem é consumida por qual consumidor.

A Cassandra é eventualmente consistente?

A Cassandra é eventualmente consistente, o que significa que eventualmente irá convergir para o estado correcto, embora possa haver algum atraso enquanto o faz. Isto é diferente de ser fortemente consistente, o que garantiria que o sistema está sempre em um estado consistente. A consistência eventual é muitas vezes vista como um trade-off entre consistência forte e disponibilidade, pois permite que o sistema continue a funcionar mesmo que alguns nós não estejam disponíveis. O que acontece se o corretor desce Kafka? Se o corretor cair, os produtores serão incapazes de enviar mensagens e os consumidores serão incapazes de receber mensagens. Isto resultará em perda de dados.

Os bancos usam eventual consistência?

Sim, os bancos usam uma eventual consistência em alguns casos. Por exemplo, quando um cliente faz um depósito em uma agência bancária, o caixa pode não atualizar imediatamente o saldo da conta do cliente na base de dados central. Em vez disso, o caixa pode agrupar as informações do depósito e enviá-las para a base de dados central posteriormente. Neste caso, o saldo da conta do cliente seria eventualmente actualizado, mas não seria actualizado de imediato.

Outro exemplo em que os bancos podem utilizar uma eventual consistência é quando um cliente faz um levantamento em um caixa eletrônico. A ATM pode não atualizar imediatamente o saldo da conta do cliente na base de dados central. Ao invés disso, o caixa eletrônico pode agrupar as informações do saque e enviá-las para a base de dados central posteriormente. Neste caso, o saldo da conta do cliente seria eventualmente atualizado, mas não seria atualizado imediatamente.