Pular para o conteúdo

Dual-Write Problem

O problema de dual-write acontece quando um sistema tenta persistir a mesma mudanca em dois sistemas diferentes ao mesmo tempo, por exemplo:

  • Banco de dados + broker
  • Banco + cache
  • Dois bancos diferentes

Nao existe transacao ACID entre banco e broker de forma confiavel em sistemas distribuidos.

BEGIN TRANSACTION
write DB
publish event
COMMIT

Entre as operacoes podem acontecer falha de rede, timeout, crash da aplicacao e retries duplicados.

Tentativas de correcao podem gerar eventos duplicados e efeitos colaterais inesperados.

  • Dados inconsistentes entre servicos
  • Eventos fantasmas
  • Quebra de invariantes de negocio
  • Bugs dificeis de reproduzir

So fazer dois writes

save DB
publish event

Nao garante consistencia.

2PC

Tem alta complexidade e baixa adocao em microsservicos modernos.

Persiste dados e evento no mesmo banco, na mesma transacao. Um processo separado le a tabela outbox e publica no broker.

Vantagens: atomicidade local, eventos nao se perdem, desacoplamento.

Trade-offs: latencia maior e complexidade operacional.

Ferramentas como Debezium observam mudancas direto no banco.

Vantagens: transparente para a aplicacao.

Desvantagens: infraestrutura mais complexa.

O proprio servico publica e consome os eventos, derivando o estado a partir deles.

Eventos se tornam a fonte de verdade:

append event -> event store -> projecoes derivadas
EstrategiaConsistenciaComplexidadeControle
Dual-write ingenuoNenhumaBaixaBaixo
2PCForteMuito altaAlto
OutboxEventualMediaAlto
CDCEventualAltaMedio
Event sourcingForteMuito altaMuito alto

O problema nao e escrever duas vezes. E tentar garantir consistencia sem um mecanismo confiavel.

  • Idempotencia em consumidores
  • Retry seguro
  • Ordenacao de eventos quando necessario
  • Monitoramento de inconsistencias
  • Dead letter queues
  • Dual-write gera inconsistencias entre sistemas
  • A causa principal e a falta de transacao distribuida
  • Retry sozinho nao resolve
  • Outbox, CDC e event sourcing sao caminhos reais

Voltar ao indice