Я пишу управляемый стек облака (поверх облачных провайдеров аппаратного уровня, таких как EC2), и проблема, с которой я столкнусь, - это:
Как несколько идентичных узлов определяют, какой из них становится мастером? (Например, подумайте о 5 серверах, работающих на EC2. Один из них должен стать мастером, а другие должны стать подчиненными.)
Я прочитал описание алгоритма, используемого MongoDB, и кажется довольно сложным, а также зависит от концепции голосов - то есть двух узлы, оставленные одни, не смогут ничего решить. Также их подход имеет значительную задержку, прежде чем он даст результаты.
-
Интересно, существуют ли менее сложные подходы KISS-embrasing? Используются ли они широко или они рискованны для принятия?
-
Предположим, что у нас уже есть список серверов. Затем мы можем просто выбрать ту, которая находится вверху и имеет численно наименьший IP-адрес. Каковы недостатки этого подхода?
-
Почему алгоритм MongoDB настолько сложный?
Это дубликат Как выбрать нового мастера в кластере?, который дает меньше деталей и не получил ответа в течение 6 месяцев, поэтому я считаю, что это подходит для начала нового вопроса.
(Стек, над которым я работаю, является открытым исходным кодом, но он находится на очень ранней стадии разработки, поэтому не дает ссылки здесь.)
UPDATE: на основе ответов я разработал простой консенсусный алгоритм, вы можете найти реализацию JavaScript (CoffeeScript) на GitHub: majority.js.