2007 г.
Влияние исследований на технологию промежуточного программного обеспечения
Вольфганг Эммерих, Микио Аояма, Джо Свентек
Перевод: Сергей Кузнецов
Назад Содержание Вперёд
5. Распределенные транзакции
5.1. Распределенные транзакции в J2EE
В Java-ориентированных серверах приложений обычно реализуется спецификация J2EE, введенная компанией Sun Microsystems. Она состоит из ряда составных частей: Java Server Pages (JSP) и Servlets, Java Messaging System (JMS) и Enterprise Java Beans (EJB). Ядром J2EE является спецификация EJB [42], поскольку она предоставляет компонентную модель на стороне сервера, которая может обеспечивать сервисы персистентности, репликации, транзакций, безопасности и управления параллелизмом прозрачным для программиста приложений образом.
В этом подразделе мы исследуем один из частных аспектов происхождения технологии EJB. Невозможно представить полный отчет, но мы постараемся выделить некоторые ключевые идеи, на которых основывается спецификация EJB. Мы намеренно игнорируем воздействие, которое оказали исследования на определения языка программирования Java, поскольку этот аспект обсуждается в сопутствующем отчете [122]. Мы обратимся к обработке распределенных транзакций в стандарте J2EE. Этот аспект особенно важен, поскольку серверы приложений, поддерживающие J2EE, были бы не слишком полезны, если бы не обеспечивали возможность нескольким пользователям одновременно взаимодействовать с приложениями, или если бы непременно возникающие сбои могли испортить данные, содержащиеся в различных распределенных хранилищах данных. Прежде чем исследовать происхождение распределенных транзакций в J2EE, охарактеризуем экономическую значимость рынка серверов приложений, основанных на J2EE.
Рис. 10. Рынок серверов приложений, основанных на J2EE, в 2001 г.
По данным компании Forrester Research доход от продажи лицензий на рынке серверов приложений, основанных на J2EE, составил в 2001 г. 2.19 миллиарда долларов США. В это время основными двумя продуктами на этом рынке являлись IBM Websphere J2EE Application Server и WebLogicServer компании BEA Systems, доля рынка каждого из которых составляла 34%. В число других продуктов входили iPlanet компании Sun, Oracle 9i, а также сервер приложений компании Sybase и Arjuna компании HP. Заметим, что широко используемым и свободно доступным является основанный на J2EE сервер приложений JBoss [53], воздействие которого не отражается в приведенных выше цифрах.
Рис. 10. Трассы воздействий для распределенных транзакций
На рис. 10 показаны общий вид временной шкалы и ключевые трассы воздействий, относящиеся к управлению распределенными транзакциями в J2EE. Поставщики серверов приложений, основанных на J2EE, неявно подтверждают факт использования ими спецификации J2EE, утверждая, что их продукты соответствуют этому стандарту. Что касается управления транзакциями, имеются две важных спецификации J2EE, которым основанный на J2EE сервер должен соответствовать: Java Transaction Service (JTS) и Java Transaction API (JTA) [34]. В спецификации EJB определяются две модели управления транзакциями. В первой модели транзакциями управляет контейнер. В этом случае контейнер, управляющий жизненным циклом компонентов EJB, определяет, когда следует начинать и завершать транзакции. Второй подход позволяет программисту приложений определять границы транзакций, и для этого они используют интерфейсы, определенные в спецификации JTA. И реализация контейнеров, и реализация JTA, используемого программистами приложений, для корректной поддержки транзакций основываются на реализации JTS.
Во введении в спецификацию JTS утверждается, что «в JTS для обеспечения интероперабельности и переносимости используются интерфейсы CORBA Object Transaction Service (OTS) [...]. Эти интерфейсы определяют стандартный механизм для любой реализации, использующей IIOP (Internet InterORB Protocol) для порождения контекста транзакции и его распространения между менеджерами транзакций JTS. Заметим, что это также позволяет применять другой API поверх используемого транспортного механизма IIOP, например, допускается применение RMI поверх IIOP» [33]. Следовательно, в спецификации JTS определяется всего лишь привязка языка программирования Java к подмножеству возможностей CORBA OTS, и поэтому в оставшейся части этого раздела для нас особый интерес представляет именно CORBA OTS.
5.2. Объектные транзакции в CORBA
Основной целью OTS являлась инкапсуляция протоколов, требуемых для обработки распределенных транзакций, в объектно-ориентированные интерфейсы, при сохранении интероперабельности различных мониторов транзакций и баз данных, достигнутой в более ранних стандартах.
Мы не можем рассматривать OTS в изоляции от CORBA Concurrency Control Service (CCS), поскольку в OTS для обеспечения изолированности транзакций используется CCS. Обе эти службы были определены членами OMG в 1993-1994 гг. во время второго сбора предложений относительно служб CORBA. Полный набор спецификаций CORBAservices, включающий спецификации OTS и CCS, опубликован в [108].
По поводу OTS поступило пять предложений. Достаточно влиятельная группа членов OMG включала представителей компаний IBM, Transarc и Tandem при поддержке Hewlett Packard, Objectivity и NCR. Соавторами предложения этой группы [105] являлись Эдвард Кобб (Edward Cobb) из IBM, Кен Мак-Кой (Ken McCoy) из Tandem и Грейм Диксон из Transarc. Соавторами второго влиятельного предложения были Эрве Лежен (Herve Lejeune) из компании Bull, Крис Хорн (Chris Horn) из Iona и Жуан Антрейд (Juan Andrade) из Novell. Поскольку компании IBM, Tandem, Novell и Transarc владели основными мониторами транзакций (CICS, Pathway, Tuxedo и Encina соответственно), у них имелся законный интерес к OTS. Окончательная спецификация OTS была получена путем слияния наиболее важных положений всех конкурирующих предложений, и в ее создании участвовали представители компаний IBM, Transarc, Tandem, Novell, Iona, ICL, Bull и Sun. Хороший обзор окончательной спецификации OTS приведен в [38].
Предложение от IBM/Tandem/Transarc включало ключевые абстракции транзакционных клиента, сервера и менеджера, которые в итоге вошли в стандарт. В нем также определялось понятие неявной транзакции (не идентифицируемой явным образом посредством идентификатора транзакции), являющееся ключевым компонентом стандарта OTS. Важнейшим вкладом предложения от Bull/Iona/Novell было понятие менеджера ресурсов и требовавшаяся в запросе предложений интероперабельность с протоколом XA [153], который является частью стандарта X/Open DTP. Модель интероперабельности вошла в окончательную спецификацию OTS.
Эдвард Кобб также являлся ведущим автором патента США 6070197 под названием «Объектно-ориентированный монитор транзакций для распределенных сред обработки транзакций» («Object oriented transaction monitor for distributed transaction processing environments»), заявка на который была подана IBM в 1997 г. В этом патенте признается известный уровень техники, утвержденный в предложении IBM, Tandem и Transarc по поводу OTS. Патент был выдан в 2000 г., и он служит для защиты прав интеллектуальной собственности IBM в области служб объектных транзакций. Интересно также отметить, что во время написания данного отчета Эдвард Кобб является вице-президентом по архитектуре и стандартам компании BEA Systems, и мы можем полагать, что в этом качестве он оказал некоторое воздействие на архитектуру обработки транзакций в WebLogicServer.
Для достижения свойства изоляции служба объектных транзакций опирается на службу управления параллелизмом (Concurrency Control Service, CCS). Были представлены два предложения по поводу CCS. Первое предложение было написано Греймом Диксоном из Transarc, а второе было представлено консорциумом Emeraude при поддержке членов консорциума PCTE (ICL, Bull, Siemens). На собрании в Дублине в августе 1994 г. технический комитет OMG единогласно проголосовал за принятие предложения Диксона, поскольку оно было сопряжено со спецификацией OTS и обеспечивало истинно объектно-ориентированное представление управления параллелизмом, в то время как в документе от PCTE предлагалось всего лишь принять механизмы управления параллелизмом этого консорциума.
Итак, откуда Диксон, Кобб и Антрейд почерпнули идеи, внедренные в спецификации CCS и OTS? Рис. 11 представляет собой уточнение фрагмента рис. 10, более подробно показывающее происхождение предложения CORBA OTS.
Рис. 11. Трассы воздействия для службы транзакций в CORBA
Во время создания спецификации OTS Антрейд работал в департаменте компании Novell, в котором разрабатывался монитор транзакций Tuxedo. Позже Tuxedo был приобретен компанией BEA, и опыт обработки транзакций, полученный при создании Tuxedo, явился тем фундаментом, на котором был построен продукт Web Logic Server. Антрейд также работал над стандартом Open Software Foundation ODTP (Open Distributed Transaction Processing) и участвовал в разработке протокола XA. До этого компания Novell получила Tuxedo от компании AT&T Bell Labs, где Антрейд был одним из разработчиков экспериментального монитора транзакций, называвшегося System/T.
В спецификациях и CCS, и OTS для определения интерфейсов к соответствующим службам использовался CORBA IDL в том виде, в каком он описан в [142]. При описании двухфазных блокировок в спецификации CCS приводится явная ссылка на [17]. В ней также содержится ссылка на [60] по поводу понятия транзакции. В мониторах транзакций Encina и Transarc поддерживается выполнение вложенных транзакций, и Диксон ссылается на [99, 100] в спецификации CCS, чтобы обеспечить включение в спецификацию поддержки вложенных транзакций.
В предложении спецификации OTS от Novell содержится обширный список ссылок. Транзакция CORBA OTS определяется в духе ACID-транзакций Джима Грея (Jim Gray), хотя авторы ссылаются на [59], а не на исходную статью [60], опубликованную в серии LNCS. В предложении Novell также содержатся ссылки на спецификации X/Open DTP и утверждается, что менеджер ресурсов должен иметь возможность общения с хранилищами данных по протоколу XA [153]. Спецификация DTP XA, в конечном счете, является спецификацией API. Базовые протоколы и службы определялись в стандарте ISO 10026, на который в спецификации DTP XA имеется явная ссылка; кроме того, в ней имеются ссылки на стандарты ISO 9804 и ISO 9805, в которых определены базовые протоколы двухфазной фиксации и двухфазных блокировок. Как и в предложении спецификации CCS, в предложении спецификации OTS от Novell поддерживается понятие вложенных транзакций, и снова в качестве первоисточника признается [99].
Диксон получил свою степень PhD в группе распределенных систем университета Ньюкасл, в которой он являлся основным исполнителем проекта Arjuna [128]. Его исследования посвящались управлению параллелизмом и транзакциями в персистентных распределенных объектных системах [47]. В своей диссертационной работе он исследовал, как объектно-ориентированный подход может содействовать обработке распределенных транзакций, и ключевые понятия, на которых основываются CORBA CCS и OTS, впервые появились в ходе его работы над диссертацией в Ньюкасле. В число этих понятий входит концепция серверных объектов, которые могут принимать участие в атомарных действиях, а также потребность в интеграции служб объектных транзакций с управлением параллелизмом и персистентностью. Таким образом, вопреки утверждениям, содержащимся в патенте IBM, именно в проекте Arjuna в 1985-1990 гг. была выполнена первая объектно-ориентированная реализация средства управления распределенными транзакциями.
В Arjuna использовался основанный на RPC механизм Rajdoot [112], поддерживающий методы обнаружения «сирот» (orphan) для отслеживания вышедших из строя транзакционных клиентов и серверов. В [112] имеется ссылка на [21] для подтверждения того, что автором первых идей по поводу RPC являлся Биррелл. Интересно отметить, что после своего принятия спецификации OTS и JTS оказали ответное воздействие на проект Arjuna. Подробности этого воздействия зафиксированы в [90], и они не могут быть приведены в этом отчете из-за ограниченности его объема. По существу, при выполнении проекта Arjuna отслеживалась разработка стандартов, и выпущенные версии промежуточного программного обеспечения Arjuna соответствовали спецификациям OTS и JTS. Затем право интеллектуальной собственности на это программное обеспечение было передано дочерней компании Arjuna Labs, которая была приобретена компанией BlueStone. BlueStone, в свою очередь, была поглощена компанией Hewlett Packard, и реализация JTS в программном обеспечении Arjuna теперь служит средством управления транзакциями в сервере приложений HP. Недавно Arjuna была продана компании JBoss, которая, в свою очередь, была поглощена компаний RedHat, и теперь Arjuna JTS интегрируется в Linux-среду от RedHat.
5.3. Резюме
Мы показали важность роли, которую сыграли исследования при определении средств обработки распределенных транзакций, являющихся важнейшей составляющей спецификаций и продуктов J2EE и CORBA. Мы показали, что результаты фундаментальных исследований, которые были опубликованы в литературных источниках, посвященных инженерии программного обеспечения и базам данных, в также в диссертациях, оказали ключевое воздействие в этой важной области.
Распределенные транзакции играют важную роль и в другой важной составляющей спецификации J2EE – в Java Messaging Service (JMS). Именно протоколы распределенных транзакций, обсуждавшиеся выше, обеспечивают возможность компонентам в рамках транзакции ставить в очередь или получать сообщения, и в большинстве реализаций JMS является транзакционными менеджерами ресурсов, поддерживающими протокол XA. В следующем разделе мы исследуем происхождение JMS и вообще промежуточного программного обеспечения, ориентированного на сообщения.
Назад Содержание Вперёд