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