GH GambleHub

Algoritmi di consenso

1) Che cosa è il consenso e perché è necessario

Consenso: coerenza dello stesso valore/sequenza di valori tra più nodi in caso di guasti e ritardi. La replica di stato (State Machine Replication, SMR) è una soluzione tradizionale, con una macchina di stato determinata e un ordine generale delle operazioni.

Differenziare:
  • Consenso (SMR) - Un unico ordine totale dei comandi di storage/registro lineare, metadati del cluster, coordinatori transazionali.
  • Operazioni quorum senza ordine totale (Dynamamo-simili, CRDT): consentono la divergenza e la successiva fusione; non sostituiscono il consenso quando c'è bisogno di una serializzazione globale.

2) Modello tempo e guasti

2. 1 Modello di tempo

Rete asincrona: i ritardi sono illimitati; il teorema FLP non può essere garantito sia da safety che da liveness senza ulteriori presupposti.
Parzialmente sincrona (spesso in pratica): dopo una T sconosciuta, il sistema si comporta in modo sincrono: la maggior parte degli algoritmi (Raft, Paxos) si basa su questo.
Sincrone: limiti di tempo rigidi per canale (raramente in vendita, tranne reti speciali/PTP).

2. 2 Modello di guasto

Crash-fault tolerant (CFT) - I nodi possono cadere/appendere, ma non comportarsi male.
Byzantine-fault tolerant (BFT) - I nodi possono mentire/falsificare messaggi. Sono necessari 3f + 1 nodi per tollerare f bizantini.

3) Proprietà consenso

Safety (protezione) - Coerenza (i due nodi corretti non risolvono valori diversi).
Liveness - Se la rete è sana, la soluzione viene raggiunta.
Linearità (linearità) - Le operazioni vengono viste come atomiche in un unico ordine.
Durata: le decisioni prese non vengono ritrattate (protezione registro/quorum).

4) Quorum, maggioranza e intersezioni

Nel mondo CFT il classico è quorum> N/2. Le registrazioni e l'elezione del leader utilizzano l'intersezione dei quorum, quindi le due operazioni «validi» non sono in conflitto.
Nel mondo BFT, i quorum 2f + 1 di 3f + 1 consentono l'intersezione di un minimo di f + 1 nodi onesti.

Regola di intersezione: tutti i due quorum devono avere un nodo comune equo (CFT) o un (BFT).

5) Replica dello stato (registro + applicazione)

I comandi vengono memorizzati con ID (indice/epoca). Principio: «Prima concordare la voce di registro (commit), poi applicarla determinatamente allo stato». Per controllare la crescita:
  • Snapshot (taglio di stato dopo il quale è possibile eliminare/compilare i record iniziali).
  • Compagine del registro e login-triim.
  • Controlli di determinismo (identica versione codice/configure).

6) Diagrammi di leadership e non ideali

Leader (Raft, Multi-Paxos, ZAB): Un leader serializza le registrazioni in modo più semplice mentalmente e operativamente, meglio latency su un leader stabile.
Illimitati/multi-ideali (APaxos, Caesar): più parallelismo e tolleranza verso il leader, ma più difficile da implementare e risolvere conflitti; il profitto è visibile nei piccoli conflitti dei comandi.

7) Algoritmi CFT classici

7. 1 Paxos/Multi-Paxos (e pratiche)

L'idea è di due fasi (predare/propose), promesse di accettatori, quorum maggioritari. Multi-Paxos lascia il «leader stabile» e trasforma le operazioni in un singolo round (per nuovi record) dopo «riscaldamento».

Caratteristiche:
  • Modello flessibile ma complesso da implementare.
  • E-configurazioni tramite record speciali (joint consensus).
  • In pratica, librerie/motori (Chubby/Spanner Generation).

7. 2 Raft

Decomposizione per l'apprendimento: scelta del leader, replica dei logi, configurazione della re.

Election: timeout casuale, voto per termini; Un leader per un mandato.
AppendEntries Il leader stravolge le registrazioni, controlla la corrispondenza del prefisso (indice/term), il commit di fissazione maggioritaria.
Read-path: lease-reads (con un forte leader) o read-index per le letture lineari.
Riconfig - Configurazione congiunta - I nodi votano in due cluster prima della transizione.

I vantaggi sono più semplici da sviluppare/debag, forti invarianti dell'ordine. Il leader è un punto di pressione.

7. 3 ZAB (ZooKeeper Atomic Broadcast) / Viewstamped Replication (VRR)

ZAB: il leader trasmette transazioni, fasi di ripristino, zxid (era + indice).
VRR: «viste» (views) con replica primaria, simile a Multi-Paxos per spirito.

8) CFT non ideali/multi-ideali

8. 1 EPaxos

Nessun leader permanente: qualsiasi nodo può avviare un comando.
I comandi di conflitto ottengono un ordine parziale; senza conflitto - si colloca in 1-2 RTT locale.
Vincite in georassistenza con bassa conflittualità, ma complessi codici di dipendenze/grafici.

8. 2 Caesar, Mencius

Variazioni che ottimizzano i ritardi/bilanciamenti e il funzionamento in WAN.

9) algoritmi BFT e famiglia PoS

9. 1 PBFT (Practical BFT)

Tre fasi (pre-predare/predare/commit) richiedono 3f + 1 nodi.
Bassa latitanza su reti locali, strade multifunzione e O (N m2) messaggi.

9. 2 Tendermint (stile BFT-PoS)

Round con proposal e due voci (prevote/precommit).
Costruttore determinatore, timeout, sincronità parziale.
Buono per le reti permissioned/PoS con decine/centinaia di valigatori.

9. 3 HotStuff (e derivati)

Lo schema trifase è unificato in «pacchetti» con certificati quorum (QC).
La complessità lineare delle comunicazioni, il supporto per la batch e la piplinazione parallela, è facile da implementare in blockchain (ad esempio Diem/Move Ecosistema).
Con le firme di soglia (threshold signature), il traffico diminuisce.

9. 4 PoW/consenso di risparmio (in breve)

Non BFT in senso rigoroso, ma convergenza plausibile (la catena con il lavoro più alto). Virtù: semplicità/apertura; i difetti sono energia, secondi o secondi prima della finalità.

10) Letture lineari, sequenziali e memorizzate nella cache

Letture lineari: il leader con lease attiva o tramite read-index (Raft) → la conferma attraverso il quorum.
Sequenziali: potete leggere da qualsiasi nodo, ma senza garanzie di freschezza.
Follower reads: validi in caso di requisiti deboli Ok per la cache.

11) Configurazione re (modifica composizione cluster)

Richiede due configurazioni sovrapposte (joint consensus): tutte le committenti vengono sottoposte a quorum di entrambe le configurazioni senza «buchi».
Aggiungi/rimuovi uno alla volta, mantieni la dimensione del quorum.
La migrazione della leadership (leadership transfer) riduce le interruzioni.

12) Prestazioni e tuning

12. 1 Ritardi

Algoritmi di leadership: 1 RTT per scrittura (con leader stabile) + replica.
Georassistenza: WAN RTT domina, usa le regioni locali + ripliking crociato-regionale o approcci EPaxos/HotStuff.

12. 2 Larghezza di banda

Batching (raggruppamento dei comandi), AppendEntries paralleli, file-cash del registro, applicazioni parallele (quando le operazioni vengono commutate).
Unità: NVMe/Registro su periferica separata, 'O _ DIRECT '/AIO, grande' fsync '- interstatale con vincoli SLA (compromesso durability/latency).

12. 3 Code p99

Evitare i nodi caldi (leader sempre uno): rotazione periodica o read-offload sui followers.
Controllare le pause GC (JVM/Go), i pin CPU, NUMERA.

13) Geografia e topologia

1 regione, 3 zone: classico cluster CFT (N = 3/5).
2 regioni: evitare - non si ottiene un quorum affidabile quando si divide 1-1.
3 + regioni: leader nel «mezzo» o algoritmi illimitati; sono disponibili proxy/fronti locali regionali con registro asincrono.

14) Questioni pratiche di funzionamento

14. 1 Snapshot e ripristino

Soglia per dimensione di registro/numero di operazioni.
Trasferire il snapshot ai nuovi nodi; Controllo degli importi di controllo.

14. 2 Monitoraggio

Leadership: chi è il leader, quanti tempi (term/epoch) sono cambiati.
Лаги: `append_latency`, `commit_index - applied_index`.

Quorum health: «La maggior parte/2f + 1 è viva?»

Dimensione del registro/velocità di compressione, coda di snapshot.
Per la BFT, percentuale di voti, cancellazione dei firmatari, ritardi del QC.

14. 3 Sicurezza/coerenza del codice

Versione del protocollo sul cavo, migrazione con la compatibilità dei registri.
Token Fencing sugli effetti esterni (vedere Blocchi distribuiti): tempo di leadership (term) trasmesso a CRON/jobs.

15) Anti-pattern

Mettere il consenso per la moda dove c'è abbastanza database o letture quorum senza serializzazione.
Miscelare CAP e AP senza limiti netti (CAP) con un UX imprevedibile.
Sovrastima le attività aziendali con decine di nodi (complessi/costosi).
Ignora la configurazione e i quorum di intersezione quando la composizione viene modificata.
L'assenza di read-barrier (lease/read-index) è una lettura «sporca».
Avvia cluster a 2 nodi (nessuna maggioranza).
Sottovalutazione dei dischi e fsync: «Tutto vola nella memoria» - prima del primo riavvio.

16) Assegno-foglio di selezione

1. Modello di guasto: CFT (crash) o BFT (malavitosi)?
2. Geografia: una regione/tre zone o WAN? La RTT decide.
3. Semantica di lettura: sono necessarie letture lineari? Lease/read-index/followers rids.
4. Carico: attesa p50/p99, throughput; se c'è bisogno di una leadership multi.
5. Complessità operativa: libreria/motore pronto (etcd/ZK/Consul/Raft-Lips) vs propria implementazione.
6. La riconfigurazione è frequente? Serve un joint consensus e strumenti di migrazione.
7. Integrazioni: effetti collaterali esterni - ci sono fencing per epoch/term?
8. Protezione: autenticazione dei siti, crittografia del canale, controllo delle versioni del protocollo.
9. Playbook di prova: partition, GC-stop, leader kill, slow disk, clock skew.
10. Le metriche del leader/lag/registro e gli alert sono configurati.

17) Mini-guida: quando prendere cosa

etcd/Raft-cluster per configurazioni/blocchi/coordinazione all'interno della DC.
ZooKeeper/ZAB per servizi già collegati a ZK (vecchie pile, code, leadership).
Multi-Paxos attraverso un servizio/libreria finiti in sistemi altamente specializzati.
EPaxos per la distribuzione geografica e la ridotta conflittualità dei comandi.
Tendermint/HotStuff per le reti permissionate/PoS-Leier con decine-centinaia di validatori e requisiti di finalità.
Dynamamo-simili/CRDT quando il consenso non è necessario, ma importante per la disponibilità/scala e la fusione successiva.

18) Esempi di interfaccia (pseudo)

18. 1 Commit di scrittura (stile raft)

pseudo client -> leader: Propose(cmd)
leader. appendLog(cmd)
leader. replicateToQuorum()
if quorum_acked:
leader. commit(index)
leader. apply(index)
leader. reply(client, ok)

18. 2 Read-index per la lettura lineare (Raft)

pseudo client -> any: LinearizableRead node -> leader: ReadIndex?
leader -> quorum: Heartbeat (barrier)
leader -> node: ReadIndex=commit_index node. wait_until(applied_index >= ReadIndex)
node. reply(client, state_at(ReadIndex))

18. 3 Configurazione congiunta

pseudo old_conf + new_conf # quorums must intersect commit (entries under joint)
switch_to(new_conf)

18. 4 BFT (HotStuff-approssimativamente)

pseudo propose(block)
collect votes -> QC lock on highest QC commit when have consecutive QCs across phases

19) FAQ

Q: Perché non usare due nodi e un tie breaker?
A: Due nodi senza un terzo arbitro non danno quorum durante la separazione. Deve essere ≥3 (CFT) o 3f + 1 (BFT).

Q: In che modo Raft «è più semplice» Paxos?
A: Decomposizione netta, comprensibili invarianti di loggia e configurazione più facile da realizzare e da accompagnare.

Come si legge velocemente senza caricare il leader?
A: Follower-reads (sequenziali) per non critici o lease-reads/read-index per lineari; nella cache.

Cosa uccide la p99?
A: WAN-RTT, dischi fsync, piedi GC, leader surriscaldato, grandi snapshot in «ora di punta».

Q: È necessario un consenso per la cache/catalogo?
A: Se c'è abbastanza eventual consistency, no. Se sono necessari invarianti transazionali, sì.

20) Riepilogo

Il consenso è uno strumento per la coerenza e l'ordinamento rigorosi. Selezionare un algoritmo in base al modello di errore e alla geografia; fornite intersezioni quorum, configurazione ra-lineare corretta, letture lineari dove è critico e osservabilità. Non dimenticare il fencing per effetti esterni, snapshot e disciplina dei registri. Allora la replica sarà prevedibile e gli incidenti rari e comprensibili.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.