Протокол распределенного консенсуса, разработанный для простоты понимания. Он эквивалентен Paxos по отказоустойчивости и производительности.

Щелкните для источника

Raft - это алгоритм консенсуса, который прост для понимания. Он эквивалентен Paxos по отказоустойчивости и производительности. Разница в том, что она разбита на относительно независимые подзадачи и полностью решает все основные части, необходимые для практических систем. Мы надеемся, что Raft сделает консенсус доступным для более широкой аудитории, и что эта более широкая аудитория сможет разработать множество более качественных систем на основе консенсуса, чем те, которые доступны сегодня.

Консенсус - фундаментальная проблема отказоустойчивых распределенных систем. Консенсус предполагает, что несколько серверов согласовывают ценности. Когда они принимают решение о стоимости, это решение является окончательным. Типичные алгоритмы консенсуса работают, когда доступно большинство их серверов; например, кластер из 5 серверов может продолжать работать даже в случае отказа 2 серверов. Если несколько серверов выйдут из строя, они перестают работать (но никогда не вернут неправильный результат).

Консенсус обычно возникает в контексте реплицированных конечных автоматов, общего подхода к построению отказоустойчивых систем. У каждого сервера есть конечный автомат и журнал. Конечный автомат - это компонент, который мы хотим сделать отказоустойчивым, например хеш-таблица. Клиентам будет казаться, что они взаимодействуют с одним надежным конечным автоматом, даже если небольшая часть серверов в кластере выйдет из строя. Каждый конечный автомат принимает на вход команды из своего журнала. В нашем примере с хэш-таблицей журнал будет включать такие команды, как установка x в 3. Для согласования команд в журналах серверов используется алгоритм консенсуса. Алгоритм консенсуса должен гарантировать, что если какой-либо конечный автомат применяет набор x к 3 в качестве n-й команды, никакой другой конечный автомат никогда не применит другую n-ю команду. Как результат,каждый конечный автомат обрабатывает одну и ту же серию команд и, таким образом, производит одну и ту же серию результатов и достигает одной и той же серии состояний.