Согласованный алгоритм Рафта, взаимодействие лидера с последователями - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть концептуальное сомнение относительно алгоритма Рафта, который я реализую, используя GO.

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

  1. Правильно ли сохранять сервер в состоянии сервера до тех пор, пока он Умеете разговаривать с большинством, независимо от ответов последователей? Я могу запустить новое сердцебиение, как только ответит хотя бы большинство?

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

НО

Проблема с этим подходом состоит в том, что, если я прекращаю итерацию как только большинство ответит, я упущу некоторых подписчиков, которые ответили с опозданием и нуждались в уменьшении их «следующего индекса», поскольку они могут не совпадать с сервером c. Это заставляет меня ждать, пока все ответят.

Моя идея:

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

...