Изменения

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

2 Phase Commit

557 байт добавлено, 19:30, 4 сентября 2022
м
rollbackEdits.php mass rollback
[[Категория: Параллельное программирование]]
'''Алгоритм двухфазного коммита''' — классический централизованный оптимистичный алгоритм распределённого консенсуса из баз данных для подтверждения [[Транзакции в распределённых системах|распределённых транзакций]].
После того, как мы завершили транзакцию, её надо атомарно подтвердить на всех участниках(participants).
У каждой транзакции есть выделенный координатор (transaction coordinator).
Алгоритм работает в две фазы:
# '''Запрос (request)''': координатор спрашивает каждого участника: "готов ли ты ''очень быстрои гарантированно'' завершить транзакцию?". Если кто-нибудь ответил "нет", то отменяем транзакцию. Если кто-то отвечает "да", то он должен уметь обеспечить завершение транзакции даже если упадёт и поднимается (например, все данные уже в журнале).# '''Завершение''': координатор принимает решение о закреплении (commit) или отмене (rollback) транзакции и записывает его в свою надёжную память, после чего рассылает всем решение. После рассылки можно сообщить о фиксации транзакции, подтверждения от участников ждать не нужно(но тогда может быть проблема с тем, что следующие чтения из СУБД будут возвращать старые данные, пока не закоммитили).
При этом проблемы двух генералов на практике обычно нет: после того, как координатор принял решение о транзакции, он будет его доносить до всех любопытствующих узлов.
 
Всего на коммит требуется $3N$ сообщений ($N$ — количество участников транзакции) и задержка порядка $3\cdot RTT$ (round-trip time).
== Ограничения ==
1632
правки

Навигация