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