Повторное использование номера бюллетеня Paxos

Получив сообщение о подготовке от предлагающего, акцептор отвечает либо обещанием, либо отказом.

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

Если перезапуск происходит только из-за тайм-аута, а не из-за отказа, можем ли мы повторно использовать тот же номер бюллетеня?


person hailinzeng    schedule 11.04.2013    source источник


Ответы (2)


Краткий ответ: не делайте этого.

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

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

Во-вторых, базовый алгоритм на самом деле ничего не говорит об отказах/отказах; это просто оптимизации. (Помните, что они могут быть удалены в любое время.) Таким образом, неполучение подготовки следует рассматривать как отказ.

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

В-четвертых, отсутствие кворума ответов означает, что у вашей системы проблемы: сетевой раздел; половина большинства хостов не отвечает достаточно быстро. Это важные вещи, о которых следует подумать. Как отправка одного и того же сообщения поможет решить проблему?

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

person Michael Deardeuff    schedule 12.04.2013
comment
Что, если два предлагающих сделают предложение с одинаковым номером предложения одновременно? Как Paxos справляется с этим, распознает ли он их от двух разных предлагающих или Paxos предполагает, что одно и то же сообщение предложения дублируется сетью? - person user; 11.06.2014
comment
Двум предлагающим не разрешается использовать один и тот же номер предложения. На практике это не очень сложно. Например: взять всех предлагающих, отсортировать по имени хоста, и каждый хост использует только indexOf(hostname) + k*numHosts - person Michael Deardeuff; 11.06.2014
comment
Да, я знаю, что двое предлагающих не допускаются. Но как с этим справится алгоритм Paxos? Распознает ли он два предложения как повторяющиеся сообщения, доставленные по сети? - person user; 11.06.2014
comment
Это зависит от реализации; вы определенно можете написать акцептор для проверки работоспособности значения (или хэша значения) перед отправкой и подтверждением. В худшем случае вы получите разделенный мозг: два разных значения выбираются одновременно. - person Michael Deardeuff; 11.06.2014
comment
разделенный мозг также был моей интуицией, но я не мог убедиться, является ли проверка работоспособности частью фактического алгоритма Paxos или деталями реализации. Спасибо - person user; 11.06.2014

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

person imzhenyu    schedule 20.06.2014