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.
→
→
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, 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.
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, 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.
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, 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, 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.
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.
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.
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.
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.