Camada Zero · 29 · Consenso & Eleição de Líder (Raft)
Como cinco máquinas que falham e se desconectam concordam numa única verdade? Raft resolve isso com eleição por maioria. Roda uma eleição aqui embaixo, derruba o líder, parte a rede, e olha o cluster reconvergir sem nunca aceitar dois líderes ao mesmo tempo.
Raft elege um líder único por term. Só commita uma entrada quando a maioria dos nós confirma. Como duas maiorias sempre se cruzam em pelo menos um nó, é impossível dois líderes commitarem coisas diferentes no mesmo term. É isso que mata o split-brain. Roda em produção no etcd (control plane do Kubernetes), Consul, CockroachDB e no Kafka moderno (KRaft).
Estado de um nó Raft em Go
typeEntrystruct { Term int; Cmd string }
typeRaftstruct {
currentTerm int// relógio lógico, sempre cresce
votedFor int// em quem votei neste term (-1 = ninguém)
log []Entry // entradas replicadas
state string// follower | candidate | leader
}
// Candidato pede voto. Concede se o term dele não é antigo// e eu ainda não votei neste term.func (r *Raft) RequestVote(term, cand int) bool {
if term < r.currentTerm { returnfalse }
if r.votedFor == -1 || r.votedFor == cand {
r.votedFor = cand
returntrue
}
returnfalse
}
// Líder replica entradas e serve de heartbeat.func (r *Raft) AppendEntries(term int, e []Entry) bool
🧠 Desafio — Consenso & Raft
Mexe no cluster aqui de cima antes de responder (elege, derruba o líder, parte a rede). As duas últimas são de reflexão: escreve a sua e só então revela o modelo.