Двофазна транзакція
Двофазна транзакція — патерн проєктування, який дозволяє координувати транзакції здійснені до різних баз даних у вигляді однієї операції.
Проблема
Необхідно виконати декілька транзакцій до різних баз даних у вигляді єдиної операції.
Вирішення
Перевіряти стан кожної транзакцій допоки вони не будуть виконані.
Опис
![](../I/%D0%9F%D1%80%D0%B8%D0%BA%D0%BB%D0%B0%D0%B4_%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8_%D0%94%D0%B2%D0%BE%D1%84%D0%B0%D0%B7%D0%BD%D0%BE%D1%97_%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D1%96%D1%97.png.webp)
Фаза підготовки
На цьому етапі вузол-координатор запитує всіх учасників, чи готові вони здійснити транзакцію. Учасники тоді відповідають так або ні.
- Координатор надсилає запит про можливість здійснення транзакції та очікує відповіді від кожного учасника.
- Учасники виконують операцію та зупиняються у точці здійснення транзакції.
- Учасники надсилають координатору повідомлення про можливість здійснити транзакцію або про помилку.
Фаза фіксації
На цьому етапі, якщо всі вузли відповіли про можливість здійснення транзакції, координато попросить їх зафіксуватись, в іншому випадку — скасувати операцію.
Успішне виконання
Якщо координатор отримав повідомлення від всіх вузлів про можливість здійснення транзакції, відбуваються наступні кроки:
- Координатор надсилає запит усім вузлам про здійснення транзакції.
- Усі вузли здійснюють транзакцію.
- Усі вузли надсилають повідомлення про успішність транзакції.
Невдале виконання
Якщо хоч один учасник надіслав повідомлення про неможливість здійснення транзакції (або час очікування координатора сплив):
- Координатор надсилає запит на скасування операції.
- Усі вузли скасовують свої дії.
- Усі вузли надсилають повідомлення про успішність скасування операції.
Недоліки
- Координатор є слабким місцем системи та при його несправності не можливо здійснити транзакції.
- Даний підхід блокує роботу системи. Кожному вузлу доводиться очікувати повідомлення від решти вузлів.