Изменения

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

2 Phase Commit

231 байт добавлено, 3 июнь
Ограничения
Если у нас есть отказы узлов или связи, то 2PC будет ждать, пока связь не восстановится:
* Если отказ произошёл на первой фазе, то координатор может отменить транзакцию по таймауту.
* После того, как координатор перешёл на вторую фазу, он не имеет права успокоиться, пока не донесёт своё решение до всех узлов.
* Если узел отказал, а потом восстановился, то он спрашивает координатора, какое решение было принято. Если "да", то обязан закрепить транзакцию (т.е. координатор должен хранить все подтверждённые транзакции, которые подтвердили не все узлы).
* Если отказал координатор, то, если узел ответил "да", он не имеет права забить на транзакцию, пока координатор не восстановится.
Но алгоритм классический, простой, на практике неплохо работает, потому что сложно только с отказами координатора и отказами узлов на второй фазе (когда решение о коммите уже принято), а такое бывает не так часто.
292
правки

Навигация