Почему двухфазный совершается лучше, чем наивная репликация Master-Slave?

cs.stackexchange https://cs.stackexchange.com/questions/123681

  •  29-09-2020
  •  | 
  •  

Вопрос

В контексте распределенной базы данных я пытаюсь понять, почему 2PC (как описано в EG, например, href="https://www.cs.princeton.edu/courses/archive/fall16/cos418/docs /L6-2PC.PDF "rel=" nofollow noreferrer "> https://www.c.cs.princeton.edu/courses/Archive/fall16/cos418/docs/L6-2Pc.pdf ) лучше После гипотетического протокола между клиентом, мастером и рабом:

    .
  • клиент говорит мастеру, чтобы совершить
  • Мастер совершает его
  • Master говорит клиенту, совершившись успешно
  • Master рассказывает раб реплицировать коммит. Если рабом не удается, MASTER продолжает пытаться, пока он не удастся и получает добитый раб на всех редакциях.

Это кажется, чтобы я удовлетворил те же свойства, что и 2 шт.:

    .
  • Безопасность: если мастер совершает, раб также в конечном итоге совершит. Если подчиненный совершает, мастер должен был совершить сначала. Я полагаю, что преимущество в 2 шт. - это то, что если участник не удается перед запуском Commit, транзакция будет проходить неудачу, а не только совершать только в TC. Тем не менее, в предлагаемом протокол, совершение на мастере все еще в конечном итоге попадает в раб.
  • live: этот протокол не висит.
  • оба полагаются на Master / TC, прочно записывающие решение для совершения. Оба предполагают, что неудачные работы / участники в конечном итоге просыпаются и догоняются с мастером / TC.
  • оба выходит из строя, если мастер / TC снижается.
  • В обоих протоколах можно иметь временные несоответствия, в которых мастер / TC завершил решение, но рабы / участники еще не совершили.
Мне кажется, что ключевое теоретическое различие в 2 шт. США заключается в том, что участник (раб) может проголосовать «нет» в комминдацию, в отличие от просто временно отказа. Это нарушило бы заключение выше, где раба в конечном итоге захватывает. Тем не менее, я не понимаю, почему раб должен проголосовать «нет» в первую очередь. Учитывая предположение, что раб / участник не потерпел неудачу, кажется, что он должен проголосовать «да», либо не отвечать. (В отличие от примера банковского учета, я ожидаю, что рабслевой слепо повторял мастер.)

Distaling все это вниз, мне кажется, что предположение, что Участники не навсегда не дают ненужным дать участникам возможность голосовать «Нет» в фазе «готовности». < / P >.

Что я здесь не хватает? Предположительно, есть некоторое преимущество для 2 шт. Через вышеизложенное, что я не понимаю, поскольку 2PC фактически используется для создания распределенных баз данных.

    .
  • Я неверно заключать, что раб не должен быть явно проголосовать "нет", в отличие от временного провала? (Я только говорю о корпусе репликации данных, а не пример банковского счета.)
  • Учитывая те же предположения, что и 2 шт., И при условии, что рабы только говорят «успех» или «попробуйте еще раз», есть ли некоторые гарантия 2PC предлагает, чтобы наивную репликацию не было?

Целью вопроса, я хотел бы игнорировать практичность, если они не имеют решации для ответа. В частности, я хотел бы игнорировать вещи, которые могут быть интерпретированы как запрещены предположением без постоянного отказа, такими как диск полный, раб, неиспользованный, раб, поврежден, ошибка оператора, Buggy Software и т. Д. >

Это было полезно?

Решение

Вы запутаете цель алгоритмов.2PC является алгоритмом голосования, где обе стороны имеют разные данные и разные критерии для выбора голосования.Master-Place - это алгоритм избыточности, который стремится иметь идентичные копии в двух местах.

Кроме того, ваш Master-Place Asynchronous, где вы вернетесь к клиенту перед репликацией.Клиент видит завершение, но мастер все еще может стать безвозвратно перед репликацией, в какой момент у вас есть данные по данным.2шт не подлежит этому.

Это сказано, организации могут использовать 2 шт. В реализации Master-Place, сделав «раб» всегда голосовать да.Это, по сути, мастер-раба в синхронном режиме, с ненужным сообщением наверху.

То, что вы хотите, чтобы выдержать, вероятно, синхронный мастер-раб, где вы вернетесь к клиенту после подтверждения раба.Это быстрее, чем 2 шт., Потому что вам нужно только обмен сообщениями только для каждого раба, вместо двух биржи, необходимых для 2 шт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top