Алгоритм выборов лидера плота один голос за срок? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть сомнение в недостаточности оценки алгоритма выбора лидера алгоритма Плот. В статье я прочитал, что каждый узел может дать только один голос за каждый член. Я сомневаюсь, потому что термины в каждом узле могут быть разными, что называется термином узла, запрашивающего голос, или термином узла, дающего узел? Спасибо

1 Ответ

1 голос
/ 11 февраля 2020

В плотном кластере давайте создадим узел, который хочет стать лидером, и назовем его кандидатом. Все остальные узлы, включая текущего лидера, мы будем просто называть пирами.

Давайте посмотрим, что произойдет, когда пир получит RequestVoteRPC от кандидата.

Если термин пира больше, чем получено в запросе (срок кандидатов), в голосовании будет отказано. Ответ будет содержать термин однорангового узла, поэтому кандидат перейдет в состояние последователя и обновит его, как только получит ответ. Это обеспечит, чтобы срок запроса равным голосом равноправного члена равнялся сроку подачи равным голосом равного.

В противном случае равноправный участник должен решить, что делать.

Если Срок однорангового узла меньше полученного в запросе (срок кандидатов), этот участник преобразуется в последователя и обновляет свой текущий срок до полученного от кандидата, прежде чем продолжить решение. Это обеспечит совпадение срока запроса равноправного участника, запрашивающего голос.

Существует вероятность того, что несколько равных преобразуются в состояние кандидата, и равный нам " Наблюдатели уже проголосовали за кандидата. В этом случае переменная votedFor не будет null, и мы не можем предоставить право голоса второму (или любому другому) кандидату. Но мы также должны быть осторожны, потому что мы можем получить повторный запрос RequestVoteRPC (от того же кандидата) и из-за этого нам нужно проверить, равно ли votedFor идентификатору кандидата, чей запрос мы наблюдаем. Если votedFor равно текущему идентификатору кандидата, мы предоставим голос.

Подведем итог, мы предоставим голос, если переменная votedFor равна null или равна идентификатору кандидата. ,

Я намеренно исключил условие, что для предоставления права голоса журнал кандидата должен быть хотя бы актуальным в примере, но не забывайте, что это также важно.

Каждый участник может предоставить один голос в течение одного срока , и поскольку условия будут синхронизировать c во время общения, срок участника, отдавшего голос, будет будет таким же, как термин, требующий голосования.

...