Algoritmus konsensu Raft je počítačový algoritmus, který distribuuje stavový stroj v klastru počítačových systémů. Zajišťuje, že každý uzel v klastru souhlasí se stejnou řadou přechodů stavů i v případě selhání. Algoritmus byl navržen jako snáze srozumitelná alternativa k protokolům Paxos pro řešení poruch. Má implementace referencí s otevřeným zdrojem, jako je C ++, Java a Scala.
Co je shoda
Konsenzus je proces získávání více serverů, aby se dohodli na konkrétní hodnotě na základě hlasů každého serveru. Jakmile je rozhodnuto o hodnotě, je rozhodnutí konečné. Hodnotu, o které se rozhodne, musí odeslat server, což znamená, že konsensuální algoritmus nemůže sám o sobě vymyslet hodnotu. Nejjednodušší může být hodnota 0 nebo 1, což umožňuje všem serverům rozhodnout se, zda něco udělat nebo ne. Konsenzus se používá v kontextu replikovaných stavových strojů, matematického modelu výpočtu.
Jak Raft funguje
Raft funguje zvolením vůdce v klastru. Server v klastru je vedoucí nebo následovník a může být případně kandidátem, pokud vedoucí není k dispozici. Vedoucí spravuje replikaci protokolu na jiné servery a přijímá požadavky klientů. Vedoucí vede, dokud selže nebo se neodpojí. V takovém případě je z kandidátů vybrán nový vedoucí. Toky dat v jednom směru: od vedoucího k dalším serverům.
Raft rozkládá konsenzus na tři nezávislé dílčí problémy:
- Volby vůdce: Když současný vůdce selže, je třeba zvolit nového vůdce.
- Replikace protokolu: Díky replikaci musí vedoucí udržovat svůj vlastní server synchronizovaný s protokoly všech ostatních serverů.
- Bezpečnost: Žádný jiný server nemůže požádat o položku protokolu u konkrétního indexu, pokud se server již zavázal k položce protokolu pro tento index. Tím je zajištěno, že protokoly jsou konzistentní a stavově zpracovaný provádí stejnou sadu příkazů.
Raft lze použít pro replikaci v distribuovaných systémech. Vytváří silné a konzistentní systémy bez obětování výkonu nebo přesnosti. Distribuované databáze jako TiDB a YugabyteDB používají Raft pro volby vůdců a replikaci dat pro správu databází NewSQL.