Базы данных. Алгоритмы Paxos

preview_player
Показать описание
Курс «Методы использования СУБД в интернет-приложениях».
Лекция № 10 «Репликация ДКА, алгоритмы Paxos».
Лектор — Константин Осипов.

В этом видео
Задача репликации журнала. Требование к распределённому алгоритму в применении к Paxos. Распределённый ДКА: подход Paxos. Компоненты Paxos. Постановка проблемы взаимоисключающего выбора. Идентификация предложений. Основы, шаги, сценарии работы Paxos. Свойство Liveness. Multi-Paxos, его задачи. Выбор LSN для предложения. Способ выбора лидера. Оптимизация PREPARE-запросов. Протокол клиента. Изменение состава кворума.

VK Team — это миллион возможностей проявить себя. Мы делаем современные и быстрые интернет-сервисы, доступные каждому. На этом канале делимся опытом компании VK, рассказываем о технологиях, наших образовательных проектах и жизни команды.

Рекомендации по теме
Комментарии
Автор

Классная лекция! Отдельное спасибо лектору!

asvitin
Автор

Огромный респект лектору, так доступно paxos еще никто не объяснял. Просто на пальцах.

АндрейВоробьев-ты
Автор

Не до конца понял как именно нам следует поступать в момент, когда два разных узла одновременно принимают решение отослать сообщение другим узлам
Например:

Дано:
Есть узел А - ServerId = 1
Есть узел Б - ServerId = 2
Есть узел С (он у нас будет только слушать, поэтому нам не важен его Server Id)
У нас Round = 0

Ситуация:
Узел А решает отправить сообщение с Proposal Number "0.1"
Узел Б решает отправить сообщение с Proposal Number "0.2"
Узел С принимает сообщение от узла А и от узла Б

Вопрос:
Каким образом мы решаем эту конфликтную ситуацию, чье сообщение мы принимаем на узле С?
То, которое пришло первым, допустим, первым пришло сообщение с Proposal Number "0.1", следом идет сообщение с Proposal Number "0.2", которое мы бросаем в топку, т.к. его Round не больше уже имеющегося?


На 1:03:30 как раз-таки такая ситуация и происходит у нас одна нода отсылает сообщение "3.1", а другая "3.5"
Есть узел S3, который почему-то сначала принимает сообщение "3.1", а потом также принимает сообщение "3.5"

Константин говорит, что все окей, т.к. сообщение с Proposal Number "3.5" (зеленого цвета) имеет бОльший Proposal Number чем сообщение с Proposal Number "3.1", однако это не так, мы ведь сами до этого говорили о том, что Server Id нужен только, чтобы различать сообщения с одинаковым Round от разных серверов


И второй вопрос:
Что делать если у нас есть узел, на который мы отправили сообщение с Prepare, но который мы не подтвердили, т.е. не дослали на него сообщение Accept?
Мы просто оставляем этот Prepare висеть на узле в надежде, что когда-нибудь этот узел примет более свежий Prepare, а старый отбросит как неподтвержденный?

Dhaizkcnekxockrnr