Двофазна транзакція

Двофазна транзакція — патерн проєктування, який дозволяє координувати транзакції здійснені до різних баз даних у вигляді однієї операції.

Проблема

Необхідно виконати декілька транзакцій до різних баз даних у вигляді єдиної операції.

Вирішення

Перевіряти стан кожної транзакцій допоки вони не будуть виконані.

Опис

Діаграма, що демонструє взаємодію компонентів у двофазній транзакції

Фаза підготовки

На цьому етапі вузол-координатор запитує всіх учасників, чи готові вони здійснити транзакцію. Учасники тоді відповідають так або ні.

  1. Координатор надсилає запит про можливість здійснення транзакції та очікує відповіді від кожного учасника.
  2. Учасники виконують операцію та зупиняються у точці здійснення транзакції.
  3. Учасники надсилають координатору повідомлення про можливість здійснити транзакцію або про помилку.

Фаза фіксації

На цьому етапі, якщо всі вузли відповіли про можливість здійснення транзакції, координато попросить їх зафіксуватись, в іншому випадку — скасувати операцію.

Успішне виконання

Якщо координатор отримав повідомлення від всіх вузлів про можливість здійснення транзакції, відбуваються наступні кроки:

  1. Координатор надсилає запит усім вузлам про здійснення транзакції.
  2. Усі вузли здійснюють транзакцію.
  3. Усі вузли надсилають повідомлення про успішність транзакції.

Невдале виконання

Якщо хоч один учасник надіслав повідомлення про неможливість здійснення транзакції (або час очікування координатора сплив):

  1. Координатор надсилає запит на скасування операції.
  2. Усі вузли скасовують свої дії.
  3. Усі вузли надсилають повідомлення про успішність скасування операції.

Недоліки

  • Координатор є слабким місцем системи та при його несправності не можливо здійснити транзакції.
  • Даний підхід блокує роботу системи. Кожному вузлу доводиться очікувати повідомлення від решти вузлів.

Див.також

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.