Я читал, как современные алгоритмы выбора мастера, такие как Raft, Paxos или Zab, выбирают мастера в кластере, и не мог понять, почему они используют сложные алгоритмы вместо простого алгоритма хулигана.
Я разрабатываю кластерную библиотеку и использую UDP Multicast для контрольных сообщений. Каждый узел присоединяется к многоадресному адресу, а также периодически отправляет пакеты дейтаграммы на этот адрес. Если узлы обнаруживают, что существует новый узел, который отправляет пакеты на этот многоадресный адрес, узел просто добавляется в кластер, и аналогично, когда узлы в кластере не получают никаких пакетов от узла, они удаляют его из кластера. Когда мне нужно выбрать главный узел, я просто перебираю узлы в кластере и выбираю самый старый.
Я прочитал несколько статей, в которых говорится, что этот подход неэффективен, и для выбора мастера или обнаружения сбоев следует использовать более сложные алгоритмы, такие как Paxos, с помощью сообщений Heartbeat. Я не мог понять, почему Paxos лучше для сценариев с разделенным мозгом или других сбоев сети, чем традиционный алгоритм хулигана, потому что я могу легко узнать, когда кворум узлов уходит из кластера, не используя Raft. Единственное преимущество, которое я вижу, - это количество пакетов, которые каждый сервер должен обработать; только мастер отправляет контрольные сообщения в Raft, в то время как в этом случае каждый узел должен отправлять контрольные сообщения друг другу. Однако я не думаю, что это проблема, так как я могу просто реализовать аналогичный алгоритм сердцебиения, не меняя свой главный алгоритм выбора.
Может кто-нибудь уточнить это?