Saltar al contenido
Explorar conocimiento

concepto · intermedio · 2 min de lectura

Raft

Raft es un algoritmo de consenso distribuido diseñado para ser más comprensible que Paxos, usado en etcd, Consul y TiKV para replicar logs y elegir líderes de forma confiable.

No requiere conocimientos previos.

Alcance en breve

Cubre

  • Raft as a concept

No cubre

  • implementation details

Supone

  • The reader understands relevant fundamentals.

Resumen

Raft es un algoritmo de consenso diseñado por Diego Ongaro y John Ousterhout en 2014 con el objetivo explícito de ser comprensible. A diferencia de Paxos —notoriamente difícil de entender e implementar correctamente—, Raft descompone el problema en piezas independientes: leader election, log replication y safety.

En Raft, el cluster tiene un líder que recibe todas las escrituras, las replica a los seguidores, y hace commit cuando la mayoría confirma. Si el líder falla, se dispara una elección con timeouts aleatorios para evitar que dos nodos compitan simultáneamente. El término —un número de época que crece monótonamente— garantiza que nunca haya dos líderes para el mismo término.

Alcance y supuestos

Cubre Raft como algoritmo, sus componentes y su adopción. Asume familiaridad con el problema del consenso.

Modelo mental

Una fila de votación donde todos levantan la mano. El primero que levanta la mano —timeout más corto— se convierte en líder y propone una decisión. Si la mayoría levanta la mano también, la decisión se aprueba. Si dos levantan la mano al mismo tiempo, se espera un tiempo aleatorio y se vuelve a votar.

Uso práctico

  • ✅ etcd, Consul, TiKV, CockroachDB usan Raft para replicación y leader election.
  • ❌ Sistemas con un solo nodo o que no necesitan consenso fuerte.

Ejemplo trabajado: Raft en acción

Líder recibe SET x = 42. Lo escribe en su log, lo envía a seguidores. Dos de tres confirman → commit. Un seguidor que estaba caído se reincorpora y recibe las entradas que se perdió. El log converge.

Evidencia

  • Raft está documentado en el paper original y en el sitio web interactivo raft.github.io.

Fuentes citadas