XA (от англ. extended architecture[1], X/Open XA) — спецификация распределённых транзакций, определяющая принципы совместного участия транзакционных ресурсов в транзакции в условиях распределённых вычислений. Впервые описана в 1992 году, является фактическим стандартом реализации в менеджерах распределенных транзакций и реляционных базах данных.

XA-транзакция — распределённая транзакция, выполняемая под управлением системы, удовлетворяющей спецификации XA.

История править

К началу 1990-х годов существовало несколько различных стандартов распределённых транзакций, например, TPF, используемый и в гражданской авиации США и в 2010-е годы[2], CISC, VMS и другие. Один из них, SNA от IBM стал к тому времени стандартом de facto. Под влиянием этого стандарта и стандарта LU6.2 ISO создала несколько новых стандартов[3]:

  • Remote Operations Services (ROSE), определяющий как клиент вызывает сервер
  • Commit, Concurrency Control, and Recovery (OSI-CCR), определяющий сообщение фиксации (commit) в пределах одной сессии
  • Transaction Processing (OSI-TP), определяющий, как следует создавать идентификаторы транзакций и как ими управлять

Основным недостатком этих стандартов было отсутствие API, таким образом, они сообщали как менеджеры транзакций должны взаимодействовать, но не предоставляли правил написания переносимых приложений.

X/Open решил эту проблему, предоставив модель распределённых транзакций, и, одновременно с этим, специфицировав процедурный интерфейс взаимодействия участников транзакции (CLI), спецификацию XA.

Модель править

В XA используется модель распределенных транзакций, состоящая из трёх компонент:

  1. Прикладная программа (AP) — программа, определяющая, из каких частей должна состоять транзакция, какие менеджеры ресурсов (RM) использовать и так далее. По сути именно здесь описывается бизнес-логика.
  2. Менеджер распределенных транзакций (TM) — он же координатор, координирует работу RM и принимает решение о закреплении или откате транзакции, используя двухфазный протокол фиксации транзакции (англ. Two-phase commit protocol).
  3. RM, такие как СУБД, используются для хранения информации.

Несмотря на то, что в модели фигурируют три компонента, спецификация XA определяет только взаимодействие между менеджерами ресурсов и транзакций.

Спецификация XA разделяет транзакции на локальные и глобальные. Локальные транзакции — самый простой вид транзакций, в них прикладная программа обращается только к одной СУБД и сама определяет, когда закреплять или откатывать транзакцию. То есть в них роль TM отводится AP. Глобальные (распределённые) транзакции — более сложный случай, в нём решение о фиксации изменений или откате ложится на плечи координатора, прикладная программа определяет только границы транзакций. Менеджер транзакций делит одну глобальную транзакцию на несколько выполняющихся локально веток (англ. branch), и при успешной фиксакции на каждой из веток осуществляет фиксацию всей глобальной транзакции, и осуществляет откат в противном случае.

Кроме того, спецификация поддерживает вложенные транзакции (nested transactions), которые полезны, например, для журналирования.

XA+ править

В спецификации XA+, выпущенной в 1994 году, определяются также транзакции, распределенные относительно приложений. В XA+ появляется ещё один участник транзакции — менеджер по ресурсному взаимодействию (Communication Resource Manager, CRM), который отвечает за координацию между несколькими менеджерами распределённых транзакций, в этой модели он отвечает за новые ветви транзакции, которые, в свою очередь, содержат ещё несколько ветвей, а также за генерацию идентификаторов транзакций.

Стандарты, основанные на XA править

Несмотря на то, что XA специфицирует API лишь для языка Си, существуют реализации и на других языках программирования.

Java Transaction API — реализация XA для платформы J2EE, впервые выпущенная в 1999 году. В .Net Framework поддержка распределённых транзакций появилась лишь в версии 2.0, кроме XA, реализация распределённых транзакций .NET поддерживает OLE[4].

XA и OTS править

В спецификации Object Transaction Service от Object Management Group 1991 года вносится транзакционность в CORBA. Благодаря тому, что спецификация не разделяет участников транзакции на RM и TM, только на клиент и сервер, имеется возможно использовать XA и OTS в одном клиент-серверном приложении. Кроме того, если один из RM не поддерживает XA, но поддерживает OTS, то эта связка является единственно возможным решением проблемы распределённых транзакций в таком окружении.

Связка XA и OTS используется в Java EE, где обёрткой над OTS является Java Transaction Service[англ.], а Java Transaction API в свою очередь отделяет JTS от AP.

Примечания править

  1. Oracle FAQ: What does XA stand for. Дата обращения: 22 августа 2015. Архивировано 24 сентября 2015 года.
  2. См Transaction Processing: Concepts and Techniques, раздел 1.5
  3. См Transaction Processing: Concepts and Techniques, раздел 2.7.4
  4. INFO: Connections May Not Participate in MTS/COM+ Transactions When You Use OLE DB Directly

Ссылки править

Литература править