Seu navegador não parece suportar os recursos necessários para impress.js. Abra esta apresentação em um navegador moderno.
Designing Data-Intensive Applications · Capítulo 5

Replicação de dados e manutenção de consistência.

Uma apresentação sobre disponibilidade, latência, consistência e conflitos em sistemas distribuídos.

single-leader multi-leader leaderless replication lag
Iniciar pela premissa do capítulo. Manter cópias é simples quando os dados não mudam. Escritas em redes sujeitas a falhas introduzem decisões de engenharia.
Motivação

Quatro objetivos e uma dificuldade.

01

Disponibilidade

Continuar rodando quando máquinas ou datacenters falham.

02

Operação desconectada

Permitir trabalho durante interrupções de rede.

03

Latência

Colocar dados mais perto dos usuários.

04

Escala de leitura

Distribuir reads entre réplicas.

Dificuldade Toda escrita precisa chegar às réplicas, mesmo com atrasos, falhas e concorrência.

Relacionar com a abertura do capítulo. Replicação também apoia proximidade geográfica e read throughput. A dificuldade principal é propagar escritas corretamente.
O problema real

Mudanças nos dados ocorrem em redes sujeitas a atraso e falhas de nós.

write

ordem importa

replicação

pode atrasar

read

pode observar versão anterior

nó indisponível lag concorrência failover

Discussão

Se uma escrita foi confirmada ao cliente, mas ainda não chegou a outras réplicas, o que deve acontecer quando o líder falha?

Usar esta discussão para introduzir replicação síncrona e assíncrona. A resposta depende do trade-off aceito pela aplicação.
Abordagem 1

Single-leader tem menor complexidade conceitual, com risco de leituras atrasadas.

  • Writes vão para o líder.
  • Followers reaplicam o log de mudanças.
  • Reads podem ir a qualquer réplica.

A ordenação das escritas é centralizada, reduzindo conflitos de escrita.

Figura 5-1: Leader-based replication

Figura 5-1, replicação baseada em líder.

Explicar o fluxo. O cliente escreve no líder, o líder persiste a escrita e os seguidores recebem o log. Relacionar leituras em followers com throughput e latência.
Figura 5-2: um follower síncrono e outro assíncrono

Figura 5-2, um follower síncrono e outro assíncrono.

Síncrono × assíncrono

A confirmação ao cliente determina o comportamento sob falha.

Síncrono

Maior garantia de cópia atualizada; pode bloquear writes se a réplica não responder.

Assíncrono

Baixa latência em operação normal; lag pode crescer e failover pode perder writes recentes.

Mencionar a configuração semi-síncrona descrita no capítulo. Em geral, há um follower síncrono e os demais são assíncronos, para evitar que a queda de um nó interrompa todas as escritas.
Replication lag · efeito 1

Read-after-write exige que o usuário observe as próprias escritas.

Caso de anomalia com escrita no líder seguida de leitura em réplica stale.

Regras possíveis incluem leitura no líder para dados do próprio usuário, timestamps/versionamento ou sessão fixada em réplica fresca.

Figura 5-3: leitura de réplica stale após uma escrita

Figura 5-3, read-after-write consistency.

Usar o exemplo de foto de perfil. Se o usuário vê a foto antiga após atualizar, a experiência contradiz a expectativa, mesmo em um sistema eventualmente consistente.
Replication lag · efeitos 2 e 3

Consistência também envolve a ordem observada pelo usuário.

Figura 5-4: monotonic reads

Figura 5-4, leituras monotônicas.

Figura 5-5: consistent prefix reads

Figura 5-5, prefixo consistente.

Monotonic reads

Após observar uma versão nova, leituras posteriores não devem mostrar estado anterior.

Consistent prefix reads

Se B depende de A, a leitura não deve apresentar B antes de A.

Comparar os efeitos. Em monotonic reads, uma leitura posterior pode mostrar uma versão mais antiga. Em prefixo consistente, uma resposta pode aparecer antes da pergunta correspondente.
Mapa de decisões

Três famílias de replicação com custos distintos.

Modelo Write entra onde? Força Custo
Single-leader Um líder Ordem simples; ausência de conflito de escrita entre líderes. Failover e reads stale.
Multi-leader Vários líderes Boa latência local e operação entre datacenters. Conflitos e topologias difíceis.
Leaderless Várias réplicas Tolerância a falhas via quórum. Consistência fraca e resolução de versões.
Este slide faz a transição dos problemas de lag em single-leader para modelos que aceitam escrita em vários lugares.
Abordagem 2

Multi-leader usa writes locais com reconciliação global.

  • Vários líderes aceitam escrita.
  • Cada datacenter pode servir usuários próximos.
  • Conflitos deixam de ser exceção distante.

Maior disponibilidade e menor latência podem exigir garantias de consistência mais fracas.

Figura 5-6: multi-leader replication entre datacenters

Figura 5-6, replicação multi-leader entre datacenters.

Discutir casos em que conflitos de escrita podem ser aceitáveis, incluindo edição colaborativa, apps offline e múltiplos datacenters.
Figura 5-7: conflito de escrita com dois líderes

Figura 5-7, dois líderes atualizam o mesmo registro concorrentemente.

Concorrência

Sem ordem única, o conflito precisa ser preservado ou resolvido.

Problema

Líder 1 aceita A para B; líder 2 aceita A para C. Um líder não observou a escrita do outro.

Pergunta

O banco deve escolher, preservar as duas versões ou delegar para a aplicação?

Enfatizar que “última escrita vence” pode descartar dados. O capítulo chama atenção para a resolução explícita de conflitos.
Topologia e ordem

O caminho da mensagem afeta a ordem observada.

Figura 5-8: topologias de replicação multi-leader

Figura 5-8, circular, estrela e all-to-all.

Figura 5-9: writes chegam fora de ordem

Figura 5-9, mensagens podem chegar fora de ordem.

Circular

Simples, mas um nó pode interromper propagação.

Estrela

Centraliza caminho; o centro vira ponto sensível.

All-to-all

Mais direto; exige tratamento de ordem e duplicidade.

Explicar a Figura 5-9. O insert acontece antes do update, mas outro líder pode receber o update primeiro. Causalidade precisa ser rastreada.
Abordagem 3

Leaderless faz o cliente conversar com várias réplicas.

Figura 5-10: quorum write, quorum read e read repair

Figura 5-10, write/read por quórum e read repair.

Figura 5-11: interseção w + r > n

Figura 5-11, se w + r > n, os quóruns se cruzam.

Ponto principal Ler de várias réplicas ajuda a detectar valores stale; escrever em várias réplicas ajuda a sobreviver a falhas.

Definir n, w e r como número de réplicas, respostas exigidas na escrita e respostas exigidas na leitura. O capítulo mostra que a regra orienta o desenho, mas há exceções práticas.
Manutenção sem líder

Réplicas stale precisam ser detectadas e atualizadas.

Read repair

Durante uma leitura, o cliente percebe versões antigas e atualiza a réplica stale.

Anti-entropy

Processos de fundo procuram diferenças e copiam dados faltantes.

Sloppy quorum

Em falhas de rede, nós fora do conjunto original podem aumentar disponibilidade.

Hinted handoff

Quando o nó correto volta, as escritas temporariamente aceitas são entregues.

Ponto para discussão

Quórum reduz a chance de ler dado antigo, mas não elimina todos os cenários de inconsistência em sistemas reais.

Este slide cobre mecanismos de manutenção em leaderless. Evitar prometer consistência forte; o capítulo apresenta exceções à regra simples de quórum.
Leaderless e concorrência

Sem líder, “último valor” pode não estar bem definido.

Atrasos variáveis fazem réplicas discordarem sobre qual escrita venceu.

writes concorrentes network delay siblings merge
Figura 5-12: writes concorrentes em datastore estilo Dynamo

Figura 5-12, writes concorrentes em datastore estilo Dynamo.

Usar a figura para mostrar que cada nó pode observar uma ordem diferente. Guardar siblings preserva alternativas para resolução posterior.
Causalidade

Antes da resolução, é preciso identificar concorrência.

Figura 5-13: dependências causais em carrinho de compras

Figura 5-13, dependências causais em edições concorrentes.

Figura 5-14: grafo de dependências causais

Figura 5-14, grafo de dependências causais.

Happened-before

Se uma operação observou a outra, há ordem causal.

Concorrente

As operações não observaram uma à outra.

Version vectors

Generalizam versionamento por réplica para rastrear dependências.

Mostrar que conflito não é simplesmente “duas escritas”. Se uma escrita observou a outra, ela pode sobrescrevê-la; se não observou, as duas são siblings.
Resolver conflitos

A escolha técnica define uma regra de produto.

!

Last write wins

Simples, mas pode descartar atualizações concorrentes.

Merge

Preserva informação quando a regra do domínio permite, como união de itens de carrinho.

?

Aplicação

Algumas decisões exigem semântica do domínio e interação com usuário.

Replicação desloca decisões difíceis para pontos específicos do sistema.

Relacionar com engenharia de software. A política de resolução deve ser compatível com o domínio. Carrinho aceita união; edição textual ou saldo bancário exigem outro desenho.
Fechamento

O capítulo apresenta critérios para formular trade-offs de replicação.

Se você quer simplicidade

Single-leader reduz conflitos, mas exige considerar lag, failover e stale reads.

Se você quer escrita em vários lugares

Multi-leader e leaderless aumentam tolerância operacional, mas enfraquecem garantias e exigem resolução de conflito.

Síntese Replicação mantém cópias; consistência define o que uma leitura pode observar.

O próximo tópico no livro é particionamento, que divide o dataset em vez de copiar o dataset inteiro.

Encerrar retomando a premissa inicial. A cópia física é a parte direta; o desafio está em preservar expectativas de usuários e invariantes da aplicação.
Overview

Estrutura da apresentação

1. ObjetivosDisponibilidade, operação desconectada, latência, reads.
2. TensãoWrites, falhas, rede e replication lag.
3. Single-leaderFiguras 5-1 a 5-5.
4. Multi-leaderFiguras 5-6 a 5-9.
5. LeaderlessFiguras 5-10 a 5-12.
6. QuórunsInterseção, read repair, anti-entropy.
7. CausalidadeHappened-before, versões, vetores.
8. ConflitosLWW, merge, regra da aplicação.
9. TakeawayDisponibilidade, latência e consistência são trade-offs.
10. Próximo passoParticionamento.
Este slide final apresenta a visão geral do percurso e usa o zoom out do impress.js para mostrar a relação entre os conceitos.