X/Open XA
У обробці транзакцій у обчислювальній техніці стандарт X/Open XA (скорочення від «eXtended Architecture») — це специфікація, випущена в 1991 році[1] організацією X/Open (яка пізніше об'єдналася з The Open Group) для розподіленої обробки транзакцій (DTP).
Метою XA є гарантія атомарності в «глобальних транзакціях», які виконуються через неоднорідні компоненти. Транзакція — це одиниця роботи, така як переказ грошей від однієї особи до іншої. Розподілені транзакції оновлюють кілька сховище даних (наприклад, бази даних, сервер додатків, черги повідомлень, транзакційні кеші тощо). Для гарантії цілісності XA використовує двофазне фіксування (2PC), щоб забезпечити, що всі зміни транзакції або набувають чинності (фіксація), або ні (відкат), тобто атомарно.
Конкретно, XA описує інтерфейс між глобальним менеджер транзакцій та конкретним застосунком. Застосунок, що хоче використовувати XA, звертається до менеджера транзакцій XA через бібліотеку або окрему службу. Менеджер транзакцій відстежує учасників транзакції (тобто різні сховища даних, до яких застосунок записує дані) і взаємодіє з ними для виконання двофазного фіксування. Іншими словами, менеджер транзакцій XA є окремим від взаємодії застосунка з серверами. XA веде журнал своїх рішень про фіксацію або відкат, який можна використовувати для відновлення в разі збою системи.[1]
Багато постачальників програмного забезпечення підтримують XA (це означає, що їх ПЗ може брати участь у транзакціях XA), зокрема різні реляційні бази даних та брокери повідомлень.[1]
Оскільки XA використовує двофазне фіксування, до нього загалом застосовуються переваги та недоліки цього протоколу. Основною перевагою є те, що XA (використовуючи 2PC) дозволяє атомарну транзакцію через кілька неоднорідних технологій (наприклад, одна транзакція може охоплювати кілька баз даних від різних постачальників, а також сервер електронної пошти та брокер повідомлень), тоді як традиційні транзакції баз даних обмежені однією базою даних. Основним недоліком є те, що 2PC — це блокуючий протокол: інші сервери повинні чекати, поки менеджер транзакцій прийме рішення про фіксацію або скасування кожної транзакції. Якщо менеджер транзакцій стає недоступним під час очікування фінального рішення, ці транзакції будуть заблоковані та утримуватимуть блокування бази даних доти, доки менеджер транзакцій знову не вийде в онлайн і не прийме рішення. Це тривале утримання блокувань може заважати іншим застосункам, які використовують ті самі бази даних.[1]
Більше того, якщо менеджер транзакцій зламається і його журнал рішень не можна буде відновити (наприклад, через помилку в процесі журналювання рішень або через пошкодження даних на сервері), може знадобитися ручне втручання. Багато реалізацій XA надають «аварійний вихід» для транзакцій, який дозволяє самостійно вирішити, чи фіксувати, чи скасовувати транзакцію (не чекаючи рішення менеджера транзакцій), але це несе ризик порушення гарантії атомарності і тому використовується лише в екстрених випадках.[1]
Специфікація XA описує, що повинен робити менеджер ресурсів для підтримки транзакційного доступу. Менеджери ресурсів, які відповідають цій специфікації, називаються сумісними з XA.
Специфікація XA була заснована на інтерфейсі, що використовувався в системі Tuxedo, розробленій у 1980-х роках, але згодом була прийнята кількома іншими системами.[2]
- ↑ а б в г д Kleppmann, Martin (2 квітня 2017). Designing Data-Intensive Applications (вид. 1). O'Reilly Media. с. 361—364. ISBN 978-1449373320.
- ↑ Philip A. Bernstein; Eric Newcomer (2009). Principles of transaction processing. Morgan Kaufmann. с. 330—336. ISBN 978-1-55860-623-4.
- Розподілена обробка транзакцій: Специфікація XA (див. також метадані)