Изменения

Перейти к: навигация, поиск

Распределенные транзакции

1714 байт добавлено, 19:06, 4 сентября 2022
м
rollbackEdits.php mass rollback
== Задача двух генералов ==
На === Описание === [[Файл:Distributed TwoGenerals.png|300px|right]] Две армии, каждая руководимая своим генералом, готовятся к штурму города. Лагеря этих армий располагаются на двух холмах по войску, разделённых долиной. Единственным способом связи между ними враггенералами является отправка посыльных с сообщениями через долину. Одновременная атака ведет к победеНо долина занята противником и любой из посыльных может быть перехвачен. Одиночная атака ведет к поражениюПроблема заключается в том, что, генералы заранее (пока была связь) приняли принципиальное решение о штурме, но не согласовали точное время штурма.<br>Посылают гонцов Для успешного штурма генералы должны атаковать город одновременно. Штурм, предпринятый только одной армией, приведет к катастрофическим последствиям для атакующих. Требуется найти алгоритм обмена сообщениями, после которого каждый генерал был бы уверен, что они оба атакуют в указанное время. Гонца может перехватить враг и убить.<br>
=== Вероятностное решение ===
== Протокол двухфазной фиксации ==
 
Протокол двухфазной фиксации (фаза подготовки и фаза фиксации) нужен для того, чтобы при завершении транзакции все изменения, произведенные над всеми ресурсами, либо полностью фиксировались, либо полностью откатывались. После завершения транзакции результат сообщается всем участникам.
=== Описание алгоритма ===
 
[[Файл:Двухфазная_фиксация.png|600px|right]]
Один из узлов выбирается координатором, обычно узел, к которому пришел исходный запрос.<br>
В реальности в системе могут исполняться параллельно несколько транзакций, у которых разные координаторы.<br>
1 Фаза: координатор всем участникам посылает сообщение приготовиться к коммиту.<br>
Ему узлы, участвующие в транзакции, присылают информацию что они готовы зафиксировать данные, что нет несогласованности в данных, ничего не сломалось.<br>
Когда координатор подтверждение от всех, он принимает решение.<br>
Если от всех узлов было положительное решение, то он примет решение выполнить.<br>
Начнется 2 Фаза==== Первая фаза ====* Координатор всем участникам посылает сообщение приготовиться к коммиту;<br>* Узлы, участвующие в которой транзакции, присылают информацию что они готовы зафиксировать данные, что нет несогласованности в данных, ничего не сломалось;<br>* Когда координатор подтверждение от всех, он принимает решение;<br>* Если от всех узлов было положительное решение, то он примет решение выполнить.<br> ==== Вторая фаза ====* Координатор всем участникам пришлет свое положительное решение, а они ему присылают информацию в ответ, что запрос был выполнен.<br>
После завершения второй фазы, когда было получен положительный ответ от всех участников, координатор говорит, что транзакцию была завершена и шлет это в ответ на исходный запрос.<br>
* Неизвестная транзакция {{---}} фиксировать.<br>
а) Работает, когда количество фиксированных транзакций сильно превышает количество откаченных, экономим таким образом память.<br>
б) Может произойти ложная фиксация.<br>
в) Сбой на первой фазе.<br>
* Происходит Если происходит «потеря» транзакции, а информация не была записана в лог, то участникам придет ответ «фиксировать»<br>
====Протокол предполагаемого отката====
* Неизвестная транзакция {{---}} откатить.<br>
а) Не можем случайно зафиксировать транзакцию {{---}} надежнее.<br>
б) Тратим гораздо больше памяти, но не всегда это критично.<br>
1632
правки

Навигация