предисловие
В мире существует только один алгоритм консенсуса, которыйPaxos
. от одногоGoogle
Уста Бога.Paxos
также известныйЗатемнять, процесс рассуждения чрезвычайно сложен.
Paxos
Вроде того, что я сказал раньше2PC
,3PC
, но решает различные недостатки этих двух алгоритмов. Этот алгоритм был инженерной практикой на многих крупных фабриках, таких как Али.OceanBase
изРаспределенная база данных, используется нижний слойPaxos
алгоритм. Другой примерGoogle
изchubby
Распределенная блокировкаЭтот алгоритм также используется. Видно, что состояние алгоритма в распределенной системе даже,Paxos
этоРаспределенная согласованностьместоимение.
текст
1. Что такое алгоритм Paxos?
Paxos
Алгоритмна основе передачи сообщенийи имеетЭффективная отказоустойчивостьАлгоритм консенсуса признанного в настоящее время решенияПроблема распределенной согласованностиОдин из самых эффективных алгоритмов.
2. Алгоритм Paxos генерирует фон
2.1 Проблема византийских полководцев
Византия была столицей древней Восточной Римской империи, и из-за ее обширной территории множеству генералов, охранявших границу (множество узлов в системе), требовалось передавать сообщения через гонцов для достижения определенных согласованных решений. Но так как в мессенджере могут быть предатели (ошибки узлов в системе), то эти предатели будут пытаться отправлять разные сообщения разным генералам, пытаясь помешать консенсусу.
2.2. Происхождение алгоритма Paxos
Предыстория истории — Древняя Греция.Paxos
Несколько судей на острове голосуют по ходатайству в одном зале, как достичь единого результата. Записки между ними передаются обслуживающим персоналом, но судья может уйти или войти в зал, а обслуживающему персоналу может быть лень лечь спать.
2.3 Создать фон
в общемРаспределенные системы, всегда бываетУзел внизилисетевая аномалия(включая новостиповторение,потерял,Задерживать,вышел из строя,сетевой раздел) и т.д.
Paxos
Алгоритм в основном заключается в том, чтобы решить, какВышеуказанная неисправность возникаетраспределенная система, быстрая и правильная внутри кластерадоговориться о стоимости, и гарантияСогласованность в системе.
3. Подробный алгоритм
3.1 Роли и предложения
Предложение
Примечание: объем предложения>значение. Как будет упомянуто позже, [предложение=число+значение].Это также может быть выражено как [M,V]. Следующие описания являются предварительными: Proposal=P, Value=V.
Роль
-
Proposer :
Proposer
Можетсделать предложение (Proposal
). -
Accecptor :
Acceptor
Можетпринять предложение. Как только предложение будет принято,предложениевнутриvalue
выбрано значение. -
Learner :
Acceptor
РассказыватьLearner
какое предложение было выбрано, тоLearner
узнать выбранныйvalue
.
В конкретной реализации процесс может быть предлагающим, принимающим или обучающимся.
3.2 Описание проблемы
Paxos
Ядром алгоритма являетсяпоследовательность. Поэтому мы объясним, как алгоритм решает практические задачи, исходя из описания проблемы непротиворечивости.
3.2.1 Предварительные условия алгоритмов консенсуса
- в предлагаемом
P
, только одинV
Выбрано. - если нет
P
был поднят, не было быV
Выбрано. - существует
P
После выбора процессы могут изучить выбранныеP
.
3.2.2 Различные роли общаются, отправляя сообщения
-
Каждый символ выполняется с произвольной скоростью, может быть остановлен из-за ошибки или перезапущен. Один
value
После выбора все роли могут дать сбой и перезапуститься, и если те роли, которые сбой и перезапуск, не могут зарегистрировать некоторую информацию, выбранное значение не может быть определено после их перезапуска. -
Сообщения могут появляться во время доставкизадержка любой длины,может бытьповторение, также возможнопотерял, но сообщения не будетповреждать.
3.3 Процесс получения
3.3.1. Есть только один акцептор
ОдинAcceptor
принять одинP
, то есть только одинV
выбран.
Проблема: если этот Acceptor выходит из строя, вся системная служба становится недоступной.
3.3.2 Несколько акцепторов
Вопрос: Как выбрать значение в случае нескольких предлагающих и нескольких принимающих?
Шаги объяснения делятся на два этапа:соглашение P1
исоглашение P2
.
3.3.2.1. Конвенция P1
P1: Acceptor должен принять первый полученный P.
Если каждый предлагающий создает разные P, то несколько предлагающих должны сгенерировать несколько P и отправить их нескольким акцепторам. в соответствии ссоглашение P1
,Acceptor
получен отдельноP
, что приводит к разнымV
выбирается, как показано на следующем рисунке:
Как показано на фиг.P1
Проблемы, которые возникнут:v1
,v2
,v3
не были выбраны, потому что они были выбраны только однимAcceptor
принимать.
Для вышеуказанной проблемы нам нужно дополнительное соглашение:
P1a: Предложение P выбрано и должно быть принято более чем половиной Принимающих.
заP1a
, что на самом деле означаетАкцептор должен принять более одного предложения.
Очевидно, это то же самое, что иP1
Противоречиво, поэтому предложение необходимо переформулировать. Первоначальный дизайн был:[提案P = value]
, теперь переработан[提案P = 提案编号 + value]
Это может быть выражено как[M,V]
.
Новый вопрос: выбрано несколько предложений, как убедиться, что выбранные предложения P имеют одинаковое значение?
3.3.2.2. Конвенция P2
P2: Если выбрано предложение P[M0,V0], то все выбранные P с большим номером, чем M0, также имеют значение V0.
заP2
середина "выбран": Чтобы предложение было выбрано, оно должно быть сначала выбрано хотя бы однимAcceptor
одобрить. Поэтому понятноP2
за:
P2a: Если выбрано предложение P[M0,V0], то все P с более высоким номером, чем M0 и [одобренные Акцептантом], имеют значение также V0.
пока это устраиваетP2a
, удовлетворитP2
.Выбрано несколько предложенийПроблема решена, но из-занестабильность сетииливремя простояПричина (неизбежная) создаст новые проблемы:
Предположим, есть5
КусокAcceptor
.Proposer2
предложить[M1,V1]
предложение,Acceptor2~5
(больше половины) принял предложение, поэтому дляAcceptor2~5
иProposer2
говоря, они все думаютV1
выбран.Acceptor1
только что изнерабочее состояниевыздоровел (доAcceptor1
предложений не поступало), в настоящее времяProposer1
В направленииAcceptor1
послал[M2,V2]
предложение(V2≠V1 и M2>M1). заAcceptor1
говоря, это то, что он получаетпервое предложение. в соответствии сP1
(ОдинAcceptor
должен принять то, что он получаетпервое предложение),Acceptor1
Предложение должно быть принято. в то же времяAcceptor1
считатьV2
выбран.
Это представляет две проблемы:
-
Acceptor1
считатьV2
был выбран,Acceptor2~5
иProposer2
считатьV1
выбран. Появившийсянепоследовательный. -
V1
был выбран, нобольшее числоодеялоAcceptor1
принятое предложение[M2,V2]
изvalue
заV2
,иV2≠V1. Это то же самое, чтоP2a
(еслиvalue
заv
предложение выбрано, то каждоебольшее числоодеялоAcceptor
принятое предложениеvalue
также должно бытьv
)противоречие.
Судя по приведенным выше вопросам, у всехP2b
:
P2b: Если выбран P[M0,V0], значение P, сгенерированное любым Предлагающим, также равно V0.
заP2b
описано в , как обеспечитьP генерируется любым Proposer, его значение также равно V0? пока это устраиваетP2c
Просто:
P2c: Для любых M, V, если предлагается [M, V], то существует комбинация S, состоящая более чем из половины Акцепторов, удовлетворяющая любому из следующих двух условий: ① Ни один из S не принял предложение с номером меньше M. ② Стоимость предложения с наибольшим номером, принятого Акцептантом в S, равна V.
Вывод завершен. . .
3.4 Поток алгоритма
3.4.1 Предлагающий вносит предложение
Общая идея такова:
(1).Этап обучения: Подготовить запрос
Proposer
Выбрать новое предложениеP[MN,?]
В направленииAcceptor
собиратьS
(число вбольше половины) отправить запрос на запросS
каждый изAcceptor
Ответьте следующим образом:
-
если
Acceptor
не принял предложение,Proposer
гарантироватьПредложения с номерами меньше N больше не принимаются. -
если
Acceptor
принял заявку,Proposer
возвращениеПредложение с наивысшим номером с номером меньше N, которое было принято.
(2) Стадия принятия: запрос акцептора
-
если
Proposer
Получатьбольше половиныизAcceptor
ответ, тоНомер поколенияN
,value
заV
предложение[MN,V]
,V
для всех ответовмаксимальное количествопредложенияvalue
. -
если
Proposer
получил в ответнет предложения,Такvalue
Зависит отProposer
самогенерируемый, и отправьте это предложение наS
и ожидатьAcceptor
Могу принять это предложение.
3.4.2 Акцептант принимает предложение
Acceptor
может игнорировать любой запрос (включаяPrepare
запрос иAccept
запрос), не беспокоясь о нарушенииАлгоритм безопасности. Поэтому мы здесь, чтобы обсудить, когдаAcceptor
может ответить на запрос.
правильноAcceptor
Принятие предложения дает следующие ограничения:
P1b: Акцептор может принять предложение с номером N, если он не ответил ни на один запрос на подготовку с номером больше N.
еслиAcceptor
получил рядN
изPrepare
просьба, былоОтветилчисло больше, чемN
изPrepare
просить. в соответствии сP1b
,ДолженAcceptor
Невозможно принять числа какN
предложение. СледовательноAcceptor
МожетпренебрегатьНетN
изPrepare
просить. Конечно, вы также можете ответитьerror
,позволятьProposer
Знать свое предложение как можно скореене будет принято.
Следовательно,Acceptor
Просто помни:
- Предложение с наибольшим номером принято;
- Максимальное количество запросов, на которые был получен ответ.
4. Описание алгоритма Paxos
5. Предложение по обучению учащихся
Learner
Обучение (приобретение) выбраноvalue
Есть три следующих варианта:
6. Как обеспечить жизнеспособность алгоритма Paxos
резюме
Paxos
существуетВосстановление после простоя узла,Сообщения не по порядку или потеряны,Дифференциация сетигарантировано в сложившихся обстоятельствахсогласованность данных. иPaxos
Описание сосредоточено натеория, в фактическом проекте приложений, имел дело сN
После более практических деталей он мог стать другим алгоритмом, и в настоящее время его правильность больше не может быть гарантирована теорией.
Доказать правильность алгоритма распределенного консенсуса часто сложнее, чем реализовать алгоритм. Поэтому многие системы фактически используютPaxos
теорияВ качестве основыпроизводнаяВыходят варианты и упрощенные версии. НапримерGoogle
изChubby
,MegaStore
,Spanner
система и т. д.,ZooKeeper
изZAB
Соглашение, более понятноеRaft
протокол.
Большинство систем работают на практике в течение длительного времени.После проверки выясняется, что система в принципе может работать, и до производственной среды не может быть обнаружено никаких серьезных проблем.
Ссылки по теме
- Распределенная теория (1) - теорема CAP
- Распределенная теория (2) - BASE Theory
- Распределенная теория (3) - протокол 2PC
- Распределенная теория (4) — протокол 3PC
- Распределенная теория (5) - Алгоритм согласованности Paxos
- Распределенная теория (6) - плот протокола согласованности
Добро пожаловать в номер общественного интереса: Zero One Technology Stack
Эта учетная запись будет продолжать делиться сухими товарами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.