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