Вкратце, набор узлов базы выбирает лидера, все операции записи идут через него, но он не подтверждает запись пока большинство не согласится, в случае смерти лидера, один из последователей выбирается следующим лидером, а в случае развала сети, если где-то оказалось большинство, эта часть сети продолжит работать
Такой системе можно доверять и при падении она самовостановится
В данной ситуации из CAP, мы взяли Consistent и немного Partition tolerance
Если мы выбираем лидером узел на целую базу, то никакого мульти-мастер не будет, а вот для master-slave репликации это будет самая надежная схема, но в современных условиях еще потребует и механизма ассинхронной репликации, чтобы иметь уменьшать нагрузку для баз чисто для чтения
Если будем выбирать лидером узел на таблицу, то все станет еще хуже, потому что сцепленность данных будет просто тормозить абсолютно всю систему
«И что же тогда делать?» – есть другие протоколы распределенных систем, которые в своем корне предполагают мульти-мастер (Couchbase, Cassandra, ElectricSQL, etc.), а вот чтобы система на RAFT заработала в мульти-мастер, нам нужно добавить чуть больше магии
Например, как это реализовано в CoackroachDB, YDB и новой ScyllaDB, мы можем разбить нашу таблицу на более мелкие группы (например, range по id-шникам) и теперь каждый отдельный узел отвечает только за свою группу, получается, что за одну целую таблицу начинают отвечать сразу много узлов, но каждый по чуть чуть