Raft Consensus

Algoritmo de consenso distribuído usado em etcd, CockroachDB e TiKV

Node States👂FollowerPassivo🗳️CandidateEleição👑LeaderCoordenatimeoutmajorityElection TimeoutTimeout: 150-300ms (aleatório)Randomizado para evitar split voteHeartbeat interval << election timeoutRANDOMIZEDCluster (5 nós — tolera 2 falhas)👑Node 1LEADERTERM 3👂Node 2FOLLOWER👂Node 3FOLLOWER👂Node 4FOLLOWER👂Node 5FOLLOWER✓ Vote✓ VoteQUORUM = 3/5💻ClientWrite RequestwriteLog Replication (AppendEntries RPC)Leader → AppendEntries(term, prevLogIndex, prevLogTerm, entries[], leaderCommit)Follower valida: prevLogIndex e prevLogTerm devem bater (Log Matching Property)Se inconsistente: Leader decrementa nextIndex e reenvia (backtracking)Commit (Quorum)Quando maioria (3/5) confirma →Entry é committed (durável)commitIndex avança, notifica followersMAJORITY ACKApply to State MachineCommitted entry → apply ao state machineState machine: key-value store (etcd)Resposta enviada ao client após apply💥Leader FailureTimeout → ElectionAUTO RECOVERYSafety Guarantees✓ Election Safety: 1 leader/term✓ Log Matching: same idx+term = same✓ Leader Completeness: committed entries in all future leaders✓ State Machine Safety: same order⚡ Availability: requires majority

3 estados possíveis: Follower (passivo), Candidate (eleição), Leader (coordena writes)

0/9