Двофазна транзакція
Двофазна транзакція — патерн проєктування, який дозволяє координувати транзакції здійснені до різних баз даних у вигляді однієї операції.
Проблема
Необхідно виконати декілька транзакцій до різних баз даних у вигляді єдиної операції.
Вирішення
Перевіряти стан кожної транзакцій допоки вони не будуть виконані.
Опис
Фаза підготовки
На цьому етапі вузол-координатор запитує всіх учасників, чи готові вони здійснити транзакцію. Учасники тоді відповідають так або ні.
- Координатор надсилає запит про можливість здійснення транзакції та очікує відповіді від кожного учасника.
- Учасники виконують операцію та зупиняються у точці здійснення транзакції.
- Учасники надсилають координатору повідомлення про можливість здійснити транзакцію або про помилку.
Фаза фіксації
На цьому етапі, якщо всі вузли відповіли про можливість здійснення транзакції, координато попросить їх зафіксуватись, в іншому випадку — скасувати операцію.
Успішне виконання
Якщо координатор отримав повідомлення від всіх вузлів про можливість здійснення транзакції, відбуваються наступні кроки:
- Координатор надсилає запит усім вузлам про здійснення транзакції.
- Усі вузли здійснюють транзакцію.
- Усі вузли надсилають повідомлення про успішність транзакції.
Невдале виконання
Якщо хоч один учасник надіслав повідомлення про неможливість здійснення транзакції (або час очікування координатора сплив):
- Координатор надсилає запит на скасування операції.
- Усі вузли скасовують свої дії.
- Усі вузли надсилають повідомлення про успішність скасування операції.
Недоліки
- Координатор є слабким місцем системи та при його несправності не можливо здійснити транзакції.
- Даний підхід блокує роботу системи. Кожному вузлу доводиться очікувати повідомлення від решти вузлів.