Konsenzus (agreement, shoda) je fundamentální problém koordinace: Jak dosáhnout shody mezi procesy na jedné hodnotě, i když některé uzly selhávají nebo je síť nespolehlivá?
Je to jeden z nejtěžších a nejdůležitějších problémů v distribuovaných systémech.
[!note] Vztah k uspořádání (komunikace v distribuovaných systémech)#Totální uspořádání (total ordering) Totální uspořádání a dosažení konsensu je ve své podstatě ten samý problém. V totálním uspořádání se uzly musejí dohodnout jaká je jedna korektní sekvence zpráv. Algoritmy na tyto dva problémy se dají použít na oba
Konsenzus je základní stavební kámen pro:
Bez konsenzu nelze stavět spolehlivé distribuované systémy.
Proces $P_i$ navrhuje hodnotu $v_i$. Konsenzus algoritmus musí zajistit:
Každý správný (nehavarovaný) proces se nakonec rozhodne pro nějakou hodnotu.
Všechny správné procesy se rozhodnou pro stejnou hodnotu.
\(\forall i, j: \text{decide}_i = \text{decide}_j\)
Pokud se všechny procesy rozhodnou pro hodnotu $v$, pak $v$ byla navržena nějakým procesem.
Jinými slovy: Nelze “vymyslet” hodnotu, která nebyla navržena.
Každý proces se rozhodne nejvýše jednou.
V nespolehlivé síti nelze dosáhnout 100% jistoty o shodě (nekonečná regrese potvrzení).
V asynchronním systému nelze garantovat deterministický konsenzus při selhání byť jen jednoho procesu.
Jak to obejít v praxi?
Praktické algoritmy (paxos, RAFT):
Algoritmy pro systémy, kde procesy mohou lhát nebo se chovat libovolně špatně.
| Typ | Příklad | Leader? | Zprávy | Odolnost | | —————— | ———– | —————– | ——- | ——– | | Leader-based | Raft, Paxos | Ano (volený) | $O(N)$ | Failover | | Leaderless | PBFT, PoW | Ne | $O(N²)$ | Vysoká |
| Vlastnost | paxos | RAFT | proof of work (PoW) (Bitcoin) | | ———- | ——————– | —————————- | ————————————– | | Hlavní cíl | Bezpečnost, Obecnost | Srozumitelnost, Implementace | Sybil resistence, Open membership | | Lídr | Dočasný (Proposer) | Silný, stabilní | Probabilistický (kdo najde blok) | | Bezpečnost | Absolutní (Safety) | Absolutní (Safety) | Pravděpodobnostní (Confirmation depth) | | Komunikace | $O(N)$ zpráv | $O(N)$ zpráv | Gossip / Flooding |
| Systém | Algoritmus | Použití |
|---|---|---|
| Google Chubby | Multi-Paxos | Lock service, coordination |
| Google Spanner | Paxos | Globální SQL databáze |
| etcd | Raft | Kubernetes coordination |
| Bitcoin | Proof of Work | Public blockchain |