Pular para o conteúdo

Arquitetura de software · Confiabilidade e segurança · 8 min de leitura

Consenso distribuído com Raft

Como vários servidores concordam sobre uma única sequência de decisões mesmo quando alguns caem: um líder eleito replica um log e só confirma o que a maioria gravou.

Cliente → Líder1Líder → Seguidor 1: AppendEntriesAppendEntries2Líder → Seguidor 2Líder → Seguidor 3Líder → Seguidor 4Cliente — SET x = 5ClienteSET x = 5Líder — mandato 7Lídermandato 7Seguidor 1 — gravouSeguidor 1gravouSeguidor 2 — gravouSeguidor 2gravouSeguidor 3 — lentoSeguidor 3lentoSeguidor 4 — fora do arSeguidor 4fora do ar

Arraste para o lado para ver o diagrama inteiro.

Líder + 2 seguidores = 3 de 5, a maioria: a entrada está confirmada mesmo com um nó lento e outro fora do ar.

O problema

Replicar dados entre servidores é fácil enquanto nada falha. O difícil é garantir que todos apliquem as mesmas operações na mesma ordem quando há quedas, redes partidas e mensagens atrasadas — sem dois servidores se achando “o chefe” ao mesmo tempo. Isso é consenso. O Paxos resolveu primeiro, mas é famoso por ser difícil; o Raft (2014) foi desenhado para ser entendido.

Eleição de líder

  • Cada nó é seguidor, candidato ou líder. O tempo é dividido em mandatos numerados.
  • Se um seguidor fica sem ouvir o líder por um tempo aleatório (no artigo, 150–300 ms), vira candidato, aumenta o mandato e pede votos.
  • Quem recebe a maioria vira líder e manda batimentos periódicos. O tempo aleatório evita empates repetidos.
  • Um nó só vota em candidato cujo log esteja pelo menos tão atualizado quanto o seu — assim nenhum líder novo “esquece” entradas confirmadas.

Replicação do log

Toda escrita vai ao líder, que acrescenta a entrada ao seu log e envia aos seguidores (AppendEntries). Quando a maioria gravou, a entrada está confirmada: o líder aplica à máquina de estados (o banco chave-valor, por exemplo) e responde ao cliente. Seguidores atrasados recebem as entradas que faltam depois.

Na prática

  • Com 2f + 1 nós, o cluster aguenta f falhas: 3 nós aguentam 1; 5 aguentam 2. Número par não ajuda.
  • Usado no etcd (o “cérebro” do Kubernetes), Consul, CockroachDB, TiKV e no modo KRaft do Kafka.
  • Raramente você implementa: usa um sistema pronto para eleição de líder, travas distribuídas e configuração.
  • Cada escrita espera a maioria: latência de rede entre regiões pesa.

Em resumo

Vantagens e custos

Vantagens
  • Consistência forte mesmo com falhas.
  • Mais fácil de entender e verificar que o Paxos.
  • Base de travas distribuídas e eleição de líder.
Custos e riscos
  • Toda escrita passa pelo líder (gargalo).
  • Sem maioria, o cluster para de aceitar escritas.
  • Latência alta entre regiões distantes.

Perguntar à IA

Monte um prompt pronto sobre Consenso distribuído com Raft na sua linguagem e no seu caso, e abra num chat gratuito.

ChatGPT Claude Perplexity

O prompt vai para o site que você escolher. Não cole senhas, tokens nem dados reais de clientes. Para Gemini e outros, copie e cole.

Referências

Continue aprendendo

Todos os temas de arquitetura de software →