предположим сеть распределенных систем. Каждая система измеряет значение. Существует правильное решение, которое должно быть принято консенсусом всеми системами в зависимости от всех значений. коммуникационные каналы могут обрываться. Есть ли алгоритм голосования и синхронизации для этого случая?
алгоритм голосования в распределенных системах
Ответы (2)
Примеры алгоритма голосования в распределенных системах:
- Алгоритм запугивания (http://en.wikipedia.org/wiki/Bully_algorithm)
- Алгоритм Чанга и Робертса (http://en.wikipedia.org/wiki/Chang_and_Roberts_algorithm)
Я решил аналогичную проблему. Это схема обнаружения сбоев, поэтому я буду описывать ее в этих терминах, а не в общих терминах OP.
Клиенты периодически пингуют наши серверы, и после некоторого времени отсутствия пинга клиент считается мертвым или находящимся за сетевым разделом. (Для нас они одинаковы.) Поскольку клиенты могут выбирать произвольный сервер для подключения, разные серверы имеют разные взгляды на то, мертв клиент или жив.
Наши серверы используют протокол сплетен/эпидемии для обмена мнениями о клиентах друг с другом. Именно здесь возникает логика, согласно которой данные одного сервера лучше, чем данные другого. Преимущество эпидемического протокола в том, что он легкий в сети, но все равно будет сходиться.
Когда принимается решение (в нашем случае - объявление клиента мертвым), на любом из серверов есть сносно актуальная таблица всех сердцебиений клиента. Любой сервер волен принимать решение, что мы и делаем через протокол консенсуса между собой (Paxos или Raft). Учтите, что сервер может ошибиться в своем решении, но маловероятно, что у него нет обновленной таблицы, но все же успешно проведен раунд Paxos.