Розподілена транзакція

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Розподілена транзакція — транзакція бази даних, в якій беруть участь два або більше мережевих хостів. Зазвичай хости надають транзакційні ресурси, тоді як менеджер транзакцій відповідає за створення та керування глобальною транзакцією, яка охоплює всі операції з такими ресурсами. Розподілені транзакції, як і будь-які інші транзакції, повинні мати всі чотири властивості ACID: атомарність, узгодженість, ізоляція та довговічність, де атомарність гарантує як результат «все або нічого» для одиниці роботи (пакету операцій).

Open Group[ru], консорціум постачальників, запропонував модель X/Open Distributed Transaction Processing (DTP) (X/Open XA[en]), яка стала де-факто стандартом поведінки компонентів моделі транзакцій[джерело?].

Бази даних є звичайними транзакційними ресурсами, і часто транзакції охоплюють декілька таких баз даних. У цьому випадку розподілену транзакцію можна розглядати як транзакцію бази даних, яка повинна бути синхронізована (або надати властивості ACID) між кількома учасниками баз даних, які розподілені між різними фізичними місцями. Властивість ізоляції (I ACID) створює особливу проблему для транзакцій з кількома базами даних, оскільки (глобальна) властивість серіалізації може бути порушена, навіть якщо кожна база даних надає її (див. також глобальна серіалізація). На практиці більшість комерційних систем баз даних використовують сильне суворе двофазне блокування[ru] (SS2PL) для контролю паралельності, що забезпечує глобальну серіалізацію, якщо її використовують усі бази даних, що беруть участь. (див. також упорядкування зобов'язань[en] для багатьох баз даних).

Поширеним алгоритмом забезпечення коректного завершення розподіленої транзакції є двофазна фіксація (2PC). Цей алгоритм зазвичай використовується для оновлень, які можуть фіксуватися за короткий проміжок часу, від кількох мілісекунд до кількох хвилин.

Існують також довгострокові розподілені транзакції, наприклад транзакція з бронювання поїздки, яка складається з бронювання авіаквитка, оренди автомобіля та готелю. Оскільки для підтвердження бронювання авіарейсу може знадобитися до одного дня, двоетапна фіксація тут не застосовується, це заблокує ресурси на довгий час. У цьому випадку використовуються більш складні методи, які включають кілька рівнів скасування. Оскільки ви можете відмінити бронювання готелю, зателефонувавши на стійку та скасувавши бронь, можна створити систему для відміни певних операцій (якщо вони не завершені безповоротно).

На практиці довготривалі розподілені транзакції реалізуються в системах на основі вебсервісів. Зазвичай ці транзакції використовують принципи компенсаційних транзакцій, оптимізму та ізоляції без блокування. Стандарт X/Open не поширюється на довготривалі DTP.

Кілька сучасних технологій, включаючи Enterprise JavaBeans (EJB) і Microsoft Transaction Server[en] (MTS), повністю підтримують стандарти розподілених транзакцій.

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]

  • Web-Services Transactions. Архів оригіналу за 11 травня 2008. Процитовано 2 травня 2005.
  • Nuts And Bolts Of Transaction Processing. Article about Transaction Management. Архів оригіналу за 13 липня 2018. Процитовано 3 травня 2005.
  • A Detailed Comparison of Enterprise JavaBeans (EJB) & The Microsoft Transaction Server (MTS) Models. Архів оригіналу за 9 березня 2018. Процитовано 16 грудня 2021.

Подальше читання[ред. | ред. код]

  • Герхард Вейкум, Готфрід Фоссен, Транзакційні інформаційні системи: теорія, алгоритми та практика контролю і відновлення паралельності, Морган Кауфманн, 2002,ISBN 1-55860-508-8