L'algoritmo di consenso Raft è un algoritmo informatico che distribuisce una macchina a stati attraverso un cluster di sistemi informatici. Assicura che ogni nodo del cluster concordi sulla stessa serie di transizioni di stato anche di fronte a guasti. L'algoritmo è stato progettato come un'alternativa più facilmente comprensibile ai protocolli Paxos per la risoluzione dei guasti. Ha implementazioni di riferimento open source come C ++, Java e Scala.
Cos'è il consenso
Il consenso è il processo con cui più server concordano su un valore specifico in base ai voti di ciascun server. Una volta presa una decisione su un valore, la decisione è definitiva. Il valore deciso deve essere inviato da un server, il che significa che l'algoritmo di consenso non può elaborare un valore da solo. Più semplicemente, il valore può essere 0 o 1, consentendo a tutti i server di decidere se fare qualcosa o meno. Il consenso viene utilizzato nel contesto delle macchine a stati replicate, un modello matematico di calcolo.
Come funziona Raft
Raft funziona eleggendo un leader nel cluster. Un server in un cluster è un leader o un follower e può eventualmente essere un candidato se il leader non è disponibile. Il leader gestisce la replica del registro su altri server e accetta le richieste dei client. Un leader conduce finché non fallisce o si disconnette, nel qual caso viene scelto un nuovo leader tra i candidati. I dati fluiscono in una direzione: dal leader ad altri server.
Raft scompone il consenso in tre sotto-problemi indipendenti:
- Elezione del leader: Quando l'attuale leader fallisce, deve essere eletto un nuovo leader.
- Replica del registro: Attraverso la replica, il leader deve mantenere il proprio server sincronizzato con i log di tutti gli altri server.
- Sicurezza: Nessun altro server può richiedere una voce di registro in un particolare indice se un server ha già eseguito il commit di una voce di registro per quell'indice. Questo per garantire che i log siano coerenti e che lo stato elaborato esegua lo stesso set di comandi.
Raft può essere utilizzato per la replica in sistemi distribuiti. Crea sistemi robusti e coerenti senza sacrificare le prestazioni o la precisione. I database distribuiti come TiDB e YugabyteDB utilizzano Raft per l'elezione del leader e la replica dei dati per la gestione del database NewSQL.