У меня есть концептуальное сомнение относительно алгоритма Рафта, который я реализую, используя GO.
У меня есть избранный лидер, который разговаривает с некоторыми последователями. Как и ожидалось, сервер не знает, будут ли эти подписчики отвечать на пульс.
Правильно ли сохранять сервер в состоянии сервера до тех пор, пока он Умеете разговаривать с большинством, независимо от ответов последователей? Я могу запустить новое сердцебиение, как только ответит хотя бы большинство?
Я не хочу ждать ответа от всех подписчиков, потому что некоторые из них могут быть отключены, и это будет заставлять подписчиков превышать время ожидания, даже когда мой сервер очень хорошо мог общаться с большинством.
НО
Проблема с этим подходом состоит в том, что, если я прекращаю итерацию как только большинство ответит, я упущу некоторых подписчиков, которые ответили с опозданием и нуждались в уменьшении их «следующего индекса», поскольку они могут не совпадать с сервером c. Это заставляет меня ждать, пока все ответят.
Моя идея:
Я могу сделать это, используя несколько программ. Как ожидание в программе, чтобы проверить условный флаг, когда он получает ответ от большинства, но также и завершение итерации, ожидая всех последователей. Это хороший метод? Существуют ли другие методы, если это законная заминка?