Модель работы транзакции


Надо сказать, что понимание транзакции в отдельной СУБД и в распределённой среде немножко отличается.

Под транзакцией в БД фактически понимается набор операторов, которые переводят информационное состояние БД из одного устойчивого в другое. Ну, т.е. последовательность операторов типа “update”, “delete”, …, до и после должно полностью содержать БД в таком нормально состоянии.

Что же касается под транзакцией в распределённой среде, то там под транзакцией понимается любая передача данных, любая проводка, поскольку, так скажем, если есть один сервер, то передача данных на другой может быть, в общем-то, чревата тем, что может быть потеря данных, и поэтому её тоже, скажем так, фактически вкладывают в транзакцию, передачу данных, и понятие транзакции в распределённой среде шире, чем понятие транзакции в отдельном узле.

Ну, если говорить о наборе вызовов xA от менеджера транзакции до менеджера ресурсов, а точнее, собственно, в СУБД, собственно, в БД, то там есть такие команды, название которых начинается, типа такого, например, или xA_open, xA_close, xA_start, xA_end и т.п. Это набор функций, который можно посылать для инициализации и для остановки действия тех или иных команд.
Что касается прикладного интерфейса Tx, он также включает некий набор вызовов, с помощью которого реализуется взаимодействие клиента и сервера. Здесь, собственно, функции лишь немного отличаются от тех функций, которые присущи стандарту xA. Ну, например, тут есть такие, как, типа, Tx_open, они даже пишутся очень похоже, Tx_begin, Tx_roll back (roll back – это отмена транзакции), Tx_… и т.д. и т.д.

Ну, не все СУБД организовали на сегодня вот это ОПИ, вот этот вот интерфейс программный. Ну, если говорить о больших СУБД, в частности, Oracle, то этот набор вызовов в нём реализован.

Несколько слов о моделях распределённых транзакций в Windows NT. Ну, Windows NT было разработано в 1996 г., ну, по крайней мере, какая-то версия 4.0, сервер. И в этот же момент был выпущен Microsoft SQL-сервер 6.5. Вот, в комплекте эти 2 программных продукта, Windows NT-сервер и Microsoft SQL-сервер 6.5, стали первой основой от Microsoft для создания небольшого, хотя и небольшого, но, тем не менее, распределённого СУБД, в основе которой лежит com-технология. Эта com-технология в NT 4.0 была ну, скажем так, очень тяжело решаема. Я помню, как мы на пятом курсе до 2000 г. делали курсовой проект; с трудом удавалось сделать соединение, только, так сказать, скажем так, самое неустойчивое. Прочитав массу книжек, могли соединить там настройки все; как говорится, здесь получается, там не получается – очень тяжело.
Начиная с Windows 2000, там, более-менее, всё реализовалось, но, тем не менее, формально считается, что, вот, примерно 1996 г. – это начало реализации com-технологии и, вот, считается формально, что она была запущена, и там можно было работать.

А в SQL-сервере 6.5 был введён координатор транзакции MS DTC, Microsoft Distribute Transaction Coordinator. Он, по сути, и выполняет роль монитора транзакции. Пиктограмму “MS DTC” можно найти в панели управления Windows NT.

В роли менеджера ресурсов выступает MS MQ, Microsoft Message Queue, очередь сообщений Майкрософт, и, естественно, SQL-сервер как хранитель данных.

Вместо вызовов xA и Tx Microsoft использует объектно-ориентированное множество транзакций, т.н. OLE-transaction. Ну, условно модель выглядит следующим образом: приложение или клиент DTS1 и FM1 и здесь второй, ну, по крайней мере, для двух компьютеров — DTS2 и FM2, менеджер ресурсов, фактически.

Вот, на уровне майкрософтовского решения можно было делать небольшие распределённые системы состоящие из двух-трёх, небольшого числа ресурсов, которые уже в те годы более-менее начинали прилично работать. Когда все ещё просто писали статьи и выступали с трибун, здесь вот родственники уже были реализованы.

Для обеспечения совместимости со стандартом DTP, Distribute Transaction Processing, был предусмотрен специальный компонент xA-маклер (ну, это для выхода из системы). Фактически он осуществлял взаимодействие между xA и OLE-transaction. Свой протокол, майкрософтовский, внутренний был: Microsoft – фирма большая, она себе может позволить сочинять свои протоколы, вкладывать туда деньги, приводить людей, которые придумали какие-то вещи, поскольку в комиссиях, в которых заседает по 900 компаний, естественно, проголосовать и договориться до чего-то одного, сами понимаете, трудно. Все компании тянут рубаху на себя, Microsoft ждёт-ждёт, хотя во всех этих позициях, естественно, уступает, но потихоньку делает стандарт. Он не подходит под xA, но зато работает. Вот, может, хоть он не такой глобальный, но что-то там уже шевелится, как говорится, передаётся, функционирует, что-то там передать может, организовать может и т.д. и т.д. Не отказывается от общего стандарта, за который голосуют, а пока другие там очень долго согласовывают, хочется поработать. Вот, они берут, делают, потом, может быть, ещё 50 раз переделывают, но когда в компании денег много…

Так вот, в этом плане, конечно, большой продукт, но там, конечно, сегодня есть всё. Что делал Microsoft дальше, после этого? После OLE-transaction Microsoft выпустил MTS, Microsoft Transaction Server, надстройку над com. Он вышел в качестве 4-ого сервис-пака для Windows NT 4.0. Это, наверное, какой-нибудь 1998-ой или 1999-ый год, вот так примерно (потому что сервис-пак 6-ой вышел в 2000 г., и тут же выпустили Windows 2000). Это вот MTS было выпущено, который впоследствии вошёл в т.н. com+.

Com+ — это com-технология плюс среда для её поддержки. Com-технология была фактически реализована с 1996 г., а … + для лучшей поддержки и, собственно, не просто поддержки, а в 2000-ые гг. началась хорошая работа. Это вот com+, это 2000 г., Windows 2000.

Начиная с 2000 г. был введён транзакционный компонент, который поддерживает активацию по необходимости — JIT, Just-in-time Activation. Суть такого транзакционного компонента заключается в том, что среда исполнения com+ может вызвать у клиента иллюзию того, что серверный компонент существует, у вас с ним есть активная связь. На самом деле, эта связь либо деактивирована, либо в этот момент занята другим, активно работающим компонентом. Таким образом, удаётся сэкономить активное число ресурсов и, на самом деле, сервер БД работает с меньшим числом активных ресурсов, чем формально считающих себя подключёнными.


Комментарии запрещены.




Статистика