Смущает процесс проверки P2b на бумаге.

Я читаю газету Paxos, сделанную простой, но застрявшую на части для P2b.

Содержание правила P2b:

Если выбрано предложение со значением v, то каждое предложение с более высоким номером, выданное любым заявителем, имеет значение v.

И это доказательная часть Лесли Лэмпорта:

Чтобы выяснить, как удовлетворить P2b, давайте рассмотрим, как мы докажем, что оно выполняется. Мы предположили бы, что выбрано какое-то предложение с номером m и значением v, и покажем, что любое предложение, выданное с номером n> m, также имеет значение v. Мы упростили бы доказательство, используя индукцию по n, чтобы мы могли доказать, что предложение n имеет значение v при дополнительном допущении, что каждое предложение, выпущенное с номером в m., (n-1) имеет значение v, где i., j обозначает набор чисел от i до j. Чтобы предложение, пронумерованное m, было выбрано, должен быть некоторый набор C, состоящий из большинства акцепторов, чтобы каждый акцептор в C принял его. Комбинируя это с предположением индукции, гипотеза о том, что выбрано m, предполагает:

Каждый акцептор в C принял предложение с номером в m . . (n-1), и каждое предложение с номером в m . . (n-1), принятое любым акцептором, имеет значение v

Итак, индукционный процесс:

  • Базовый случай: выбрано предложение m со значением v
  • Индуктивный шаг: любое предложение в номере m . . (n-1) имеет значение v

Почему это означает, что:

Каждый акцептор в C принял предложение с номером в m . . (n-1)

Я просто не могу преодолеть разрыв, почему каждый акцептор в C должен принять предложение с номером в m . . (n-1)?

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

2 ответа

Решение

Вот графическое объяснение всего доказательства правильности.

  1. Предположим, что значения были получены для двух предложений, пронумерованных P и Q, где P

шаг 1

  1. Кроме того, предположим для противоречия, что выученное значение для P было X, а выученное значение для Q было Y, где X ≠ Y:

шаг 2

  1. Это означает, что значения, предложенные для P и для Q, были X и Y соответственно. Каждое предложение может иметь не более одного значения:

шаг 3

  1. Теперь рассмотрим все другие предложения, которые были сделаны между P и Q:

шаг 4

  1. Пусть R будет первым предложением, значение которого было ≠X. Надеемся, что P

шаг 5

  1. Другими словами, предложения с номерами ≥ P и

шаг 6

  1. Пусть S будет набором узлов, которые отправили сообщения фазы 2b в P. (S в вашем вопросе называется C, но я уже нарисовал эти картинки, поэтому придерживаюсь S). Поскольку большинство пересекаются, этот набор узлов должен перекрывать набор узлов, которые отправили сообщения фазы 1b в R:

шаг 7

  1. Созерцайте один из узлов, который был в перекрытии. Он должен был отправить свое сообщение фазы 2b в P перед отправкой своего сообщения фазы 1b в R, потому что это то, для чего предназначены сообщения фазы 1b.

шаг 8

  1. Возможно, он также отправил сообщение фазы 2b для предложения, пронумерованного>P, но не смог отправить сообщение для предложения, пронумерованного ≥R, потому что это правило для сообщений фазы 1b. Но все предложения с ≥ P и

шаг 9

  1. Теперь рассмотрите все другие узлы, которые отправили сообщения фазы 1b для предложения R. Некоторые из них, возможно, не приняли никакого предыдущего предложения; некоторые, возможно, приняли предложения, пронумерованные

шаг 10

В этом заключается противоречие: по правилам для сообщений фазы 2а это означает, что значение, предложенное в точке R, должно быть X в конце концов.

Это может показаться вам существенно отличным от доказательства, приведенного в статье Paxos Made Simple, поскольку, похоже, оно работает противоречием и в нем нет явной индукции. На самом деле, техника "предположим, что существует контрпример, а затем рассмотрим наименьшее из таких" на шаге 5, на самом деле является просто скрытой индукцией, и мой опыт показывает, что это более доступный способ ее представления. Это интересное упражнение - превратить этот шаг в явную индукцию, если вам нравится такая вещь.

Упомянутый в вашем вопросе набор C - это набор акцепторов, отправивших сообщения фазы 2b для принятия предложения в P. Это не обязательно тот же набор, что и те, которые отправили сообщения фазы 1b в R, но эти наборы пересекаются, и это важный фактор.

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

Каждый акцептор в C принял предложение с номером в m ..(n - 1) Поскольку предложение m со значением v было выбрано, должен быть некоторый набор C, состоящий из большинства акцепторов, чтобы каждый акцептор в C принял его, и m ..(n - 1) содержит m

Другие вопросы по тегам