Специалист, отвечающий на ваш вопрос, не может сделать различие между потерянными сообщениями, отложенными сообщениями, сбойными или потерянными получателями.В каждом случае вы не получите ответа.Как правило, реализация получает тайм-аут при получении ответа меньше, чем кворум, и повторно отправляет предложение, если сообщения о допущении были отброшены или акцепторы перезагружаются.
Часто реализации добавляют сообщения "nack" как отрицательное подтверждение в качестве оптимизации для ускорения восстановления.Предлагающий получает только «откровенные» ответы от достижимых узлов, которые приняли более высокое обещание.«Nack» может показывать как самое высокое обещание, так и самый высокий экземпляр, который, как известно, исправлен.Как это поможет, будет описано ниже.
Я написал реализацию Paxos под названием TRex , в которой некоторые из этих методов максимально приближены к описанию алгоритма в статье Paxos Made Simple .Я написал описание практических соображений о тайм-аутах и нэках в блоге .
Один из интересных методов, которые он использует, заключается в том, что узел с тайм-аутом делает первое предложение с очень низким числом.Это всегда будет получать "Nack" сообщения.Зачем?Рассмотрим кластер из трех узлов, где одно сетевое соединение разрывается между стабильным предложителем и другим узлом.Другой узел прекратит работу и выдаст подготовку.Если он выдает высокую подготовку, он получит обещание от третьего узла.Это прервет стабильного лидера.Тогда у вас будет симметрия, в которой два узла, которые не могут сообщать друг другу, могут бороться с заменой руководства без продвижения вперед.
Чтобы избежать этого, тайм-аут узла может начинаться с низкой подготовки.Затем он может просмотреть сообщения «nack», чтобы узнать от третьего узла, что есть лидер, который делает успехи.Он увидит это, так как самый высокий экземпляр, известный как фиксированный в nack, будет больше, чем локальное значение.Узел тайм-аута не может затем выполнить высокую подготовку и вместо этого попросить третий узел отправить ему последние фиксированные и принятые значения.Благодаря этому усовершенствованию узел времени ожидания теперь может различать стабильный сбой предлагающего или сбой соединения.Такие методы, основанные на «недолговечности», не влияют на правильность реализации, они являются лишь оптимизацией, обеспечивающей быстрое восстановление после отказа и продвижение вперед.