Семейство алгоритмов Paxos Евгений Чемерицкий План доклада § § § 2 История создания Конструирование алгоритма Paxos Модификации алгоритма Алгоритм Paxos основан на алгоритме Синода [The Part-Time Parliament, 1998] § § 3 В начале прошлого тысячелетия Paxos процветало государство Паксонов (Paxons) с парламентарной формой правления Парламентарии Paxons Алгоритм Paxos основан на алгоритме Синода [The Part-Time Parliament, 1998] § § 4 У каждого парламентария была своя собственная книга декретов Свои обязанности парламентарии совмещали с управлением Распределённая система как конечный автомат С1 S1 С2 St1 St2 St3 St1 St2 St3 S1 5 Задача обеспечения согласованного выполнения С1 S1 6 St1 S1 С2 S1 St2 St3 Алгоритмы Консенсуса Задана группа объектов, делающих взаимоисключающие предложения § Цель алгоритма консенсуса – выбрать единственное St1 и St2 St3 S1предложение оповестить об этом группу § S2 7 St1 St2 St3 Статьи по Paxos § § § § § 8 2001 - Paxos made simple 2007 - Paxos made live 2007 - Paxos made practical 2009 - Paxos made code 2011 - Paxos made moderately complex Распределённая система в роли парламента 9 Распределённая система в роли парламента 10 [глобальные часы вводятся лишь для удобства описания алгоритма] Требования к алгоритму § Безопасность § § § § Алгоритм выбирает из поступивших значений Выбирается единственное значение Процесс никогда не считает, что значение выбрано, если это на данный момент не так Живучесть § 11 [Выбираем значение переменной] § [Оригинальный Paxos невсегда византийский] Алгоритм выбирает значение Роли объектов группы § § § 12 Proposer делает предложение [значение] Acceptor принимает предложение [значение] P1 A1 L1 Learner узнаёт о сделанном выборе P1 A1 L1 P1 A1 L1 Конструируем алгоритм (1) P1 A1 L1 P2 Среди объектов только один Acceptor 13 Конструируем алгоритм (1) P1 A2 A1 P2 L1 A3 Среди объектов только один Acceptor Acceptor аварийно завершается => Существует множество acceptor-ов Опр. Значение выбрано, если оно принято большинством acceptor-ов 14 Конструируем алгоритм (2) P1 A2 A1 P2 L1 A3 Значение должно быть выбрано, даже если оно единственное => Каждый Acceptor принимает первое поступившее к нему значение 15 Конструируем алгоритм (3) P1 A2 A1 P2 L1 ??? A3 Каждый Acceptor может принять поступившее значение, но ни одно из них не будет выбрано => Acceptor может принимать более одного значения 16 Конструируем алгоритм (4) P1 A2 A1 P2 17 L1 ??? A3 => Могут быть выбраны сразу несколько предложений Конструируем алгоритм (5) Как гарантировать, что не будут выбраны разных значения? Принятые предложения Каждое выбранное предложение должно быть принято хотя бы одним acceptor-ом 18 T2 -> T1 Конструируем алгоритм L1 A2 P1 A1 P2 ??? A3 Time 19 T2 -> T1 Конструируем алгоритм L1 A2 P1 A1 P2 ??? A3 Time 20 T3 -> T2 -> T1 Конструируем алгоритм 21 Accept Prepare Алгоритм proposer-a 22 Алгоритм acceptor-а 23 Acceptor получает запросы prepare & accept Безопасность алгоритма не нарушаются если: § Не отвечать на запросы § Отвечать только на prepare § Отвечать на accept, если не отвечал на prepare для предложения с большим номером Алгоритм acceptor-а С учётом оптимизации acceptor должен знать лишь наибольший номер предложения, на чей propose-запрос он ответил, и предложение с наибольшим номером, которое он принял 24 Эти данные нужно хранить в постоянной памяти, иначе аварийное завершение и восстановление могут привести к нарушению безопасности Proposer может не сохранять данные алгоритма Алгоритм Paxos 25 Получение значения L1 A2 L3 A1 L2 A3 L4 A2 L3 L1 L4 L2 A1 A3 26 Продвижение алгоритма P1 A1 P2 Для продвижения необходим процесс-лидер 27 Процесс-Лидер L1 St1 St2 28 P2 P1 A1 Оптимизации Proposer-у достаточно пересылать предложение большинству acceptor-ов A2 P1 Вместо значения можно пересылать его хэш P1 P2 Лидер 29 A1 A3 P3 Можно использовать координатор, который будет следить за лидером Модификации Paxos § § § § § § § § 30 Multi-Paxos [1998] Cheap Paxos [2004] Fast Paxos [2004(2001)] Storage-free Paxos [2001] Disk Paxos [2001] Generalized Paxos [2005] Byzantine Paxos [2011] Stoppable Paxos [2011] Multi-Paxos cmd1 cmd2 cmd3 cmd4 31 #1 #2 #3 #4 #5 #6 Paxos используется для упорядочивания потока команд поступающих на разные машины Каждую команду можно определять независимо друг от Multi-Paxos P1 St1 St21 St22 32 A1 prepare n promise n Paxos используется для упорядочивания потока команд поступающих на разные машины Каждую команду можно определять независимо друг от Cheap Paxos 33 Fast Paxos Лидер P2 St1 P1 A1 A1 prepare ANY St2 34 [Исправление ошибок] Storage-free & Disk Paxos § § 35 Acceptor должны сохранять в постоянной памяти номер предложения, на чей prepare запрос он ответил, и принятое предложение с наибольшим номером Storage-free Paxos позволяет получать необходимые данные от других acceptor-ов Generalized Paxos Некоторые последовательности переходов конечного автомата приводят в одно и то же состояние, поэтому могут быть выполнены в произвольном порядке § St1 может St2 принять St3сразу St4 S1Алгоритм несколько операций, не заботясь о порядке их выполнения § S2 36 St1 St3 St2 St4 Byzantine Paxos 37 Спасибо за внимание! 38 This is PAXOS! 39