Технология построения координатора распределенных транзакций в условиях web-сервиса

УДК 531.49:531.62

ТЕХНОЛОГИЯ ПОСТРОЕНИЯ КООРДИНАТОРА РАСПРЕДЕЛЕННЫХ ТРАНЗАКЦИЙ

В УСЛОВИЯХ WEB-СЕРВИСА

С.А. Рыков, Ахмед Али М. Ахмед, М.В. Локшин

В статье рассматривается проблематика управления транзакциями в гетерогенных распределенных информационных средах и предлагается средство построения координатора транзакций на базе скриптового языка Lua в условиях Web-сервиса

Ключевые слова: Lua, РСУБД, СУБД, ИС, web-сервис

Введение

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

Обеспечение доступа к

информационной структуре

Для решения данной проблематики рассматриваем процесс объединения всех СУБД в единую сервисную базу данных, в то время как фактическое местоположение рассматриваемых СУБД остается неизменным. При построении данной структуры информация остается в ее первоначальном источнике, где она и модифицируется. Большинство источников данных представляют единую интегрированную виртуальную базу данных, маскируя количество и различия видов СУБД.

Рыков Сергей Александрович - ВГТУ, канд. техн. наук, ст.

преподаватель, e-mail: rykov@vorstu.ru

Ахмед Али Мухамед Ахмед - ВГТУ, аспирант, e-mail:

p.ali80@yahoo.com

Локшин Марк Викторович - ВГТУ, канд. техн. наук, доцент, e-mail: lokshin_mark@mail.ru

Объединенное решение для сервисных СУБД позволяет получить прямой доступ к данным не только известных представителей БД, таких как Linter, Paradox, Clipper, MS SQL Server, MUMPS, Oracle, но и к СУБД, более современных, производителей, без определения фактического физического местоположения данных от web-сервиса. Поскольку нет необходимости дублировать какую-либо информацию в сервисную web-СУБД, данное объединение обеспечивает самый оперативный путь к интеграции информации. Объединение также формирует зону поддержки такой информации, которая существует в унаследованных web-приложениях или приложениях, требующих наличия локального владельца, и просто не может быть консолидирована. При использовании такого подхода объединения гетерогенной

распределенной СУБД возникают два понятия: локальные транзакции и глобальные транзакции.

Разделение транзакций общего типа на локальные и глобальные выступило в связи с применением распределенных многозвенных систем. Локальными транзакциями при рассогласованности с сервисными СУБД, называются транзакции, управление которыми реализуется средствами баз данных. С точки зрения программной поддержки,

использующей универсальный API, для доступа к базе данных локальные транзакции формируются и завершаются в привязке к определенному соединению к СУБД. Как правило, открытое управление локальными транзакциями реализуется за счет вызова методов, таких как «сохранить транзакцию в БД» или «откатить транзакцию из БД». Такой режим работы характерен для создания приложений в архитектуре «клиент—сервер». Если процедура завершения транзакции реализуется в рамках одной команды, значит

СУБД использует однофазный режим завершения таких транзакций. При такой реализации нет возможности создавать транзакцию, которая бы «объединяла» действия, используя несколько соединений одновременно.

В архитектуре «клиент—сервер» реализация процедуры использования однофазных локальных транзакций возможна до тех пор, пока не используются распределенные СУБД. В момент создания данной архитектуры в коде клиентского приложения устанавливается соединение с СУБД, явно или неявно создается функция, начинающая локальную транзакцию. Затем производится выборка данных, и как следствие, завершение транзакции. Если она была последней и все необходимые действия уже выполнены, производится разрыв соединения с СУБД.

Если же используется распределенная СУБД, что определяет реализацию процедуры изменения данных в нескольких СУБД в контексте одной транзакции, — то для решения этой задачи должна обеспечиваться возможность формирования единой

транзакции, выполняемой для нескольких баз данных этого типа. Такая процедура реализации условно называется «локальными транзакциями с двухфазным завершением».

Реализация координатора транзакций

Увеличение требований к технологиям построения сложных проектов, возрастанию их уровня надежности и масштабируемости, а также возможности создания гетерогенных РСУБД, привели к изменению ситуации следующим образом: появились готовые комплексные технологии построения распределенных систем реального времени. Наиболее известными и совершенными из них являются такие как CORBA, J2EE и .NET. Ранее для РСУБД определение транзакции было распространено на ИС в целом, являющейся незначительной частью такой системы. Транзакционной стал не только информационный контент в долговременных хранилищах — такими стали конечные объекты, из которых строится вся информационная система. Вследствие разработки такой системы возникла задача индивидуальной работы на уровне представленных распределенных объектных транзакций и транзакций на уровне гетерогенных баз данных. Для реализации управления такими объектными транзакциями

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

В разработанной информационной системе координатор транзакций реализован на базе скриптового языка программирования Lua, который позволяет решить задачу транзакционной модели с двухфазным завершением. Выбор данного языка программирования был сделан по причине его легкости в использовании, простого синтаксиса, и при этом достаточной мощи: язык поддерживает объекты, мета-таблицы делают его тип безусловно гибким, а использование API-функций допускает отличную интеграцию, увеличение сценариев и расширение возможностей базового языка. Lua может использоваться в комплексе с приложениями типа «клиент-сервер», написанные на различных языках программирования высокого уровня, в том числе поддержка web языков, таких как PHP, Perl, Python, Ruby, ASP.NET, Groovy. Рассматриваемый язык координатора транзакций прост в обучении, благодаря возможности расширения с помощью С-функций, может применяться для решения обширного круга задач, используя механизмы объектно-ориентированного программирования с поддержкой прототипов.

Этапы настройки информационной системы

При определении библиотеки

координатора транзакций LTM, построенного в условиях LUA машины, с применением модернизированного скриптового языка LQL происходит несколько действий для настройки системы на работу, последовательность действий которых представлена ниже.

1. Загрузка основного файла конфигурации. В директории с исполнимым программным обеспечением, происходит поиск файла с именем conf/ORB.conf. Затем специальными средствами системы его значения считываются в буфер настроек.

2. Инициализация ORB-пространства. На данном этапе формируется загрузка стека необходимых библиотек omniORB 4.3. Далее, используя загруженные настройки вызывается инициализационный метод omniORB, который в свою очередь подготавливает среду CORBA для взаимодействия с общей информационной системой web-приложения.

3. Инициализация LUA-машины. В связи с необходимостью использования

интерпретатора языка LUA, возникает необходимость загрузки в память основных концепций, что реализуется методами обращения к функции lua_open() из стека библиотек Lua. Данная операция формирует новое состояние и возвращает указатель. В случае, если возникает ситуация дефицита памяти - в результате работы будет определен нулевой указатель.

4. Загрузка необходимых библиотек. Рассматривая п.3, в котором был реализован процесс создания нового независимого состояния LUA, для которого производиться загрузка стандартных дополнительных библиотек, таких как функции для работы со строками, математикой, дополнительные функции отладки, функции для работы с операционной системой, построенных на скриптовом языке LUA, либо на другом ЯВУ совместимого с общим загрузчиком представленного интерпретатора.

5. Создание контейнера алиасов. На данном этапе производится процедура создания объекта специального класса, который разработан специально и содержит полный набор алиасов к СУБД, занимается их созданием, удалением и поиском в системе. Объект рассматриваемого контейнера регистрирует уникальных метод в LUA-машине. Вызов представленной инструкции необходим для добавления ссылок к распределенным базам данных рассматриваемой информационной системы в контейнер.

6. Регистрация внешних инструкций в LUA-машине. Рассматривая данный шаг индивидуально, по причине необходимости регистрации ранее подготовленных операций для интерпретатора. Именно после данного шага происходит процедура модернизации стандартного LUA языка в язык LQL.

7. Загрузка файла алиасов. Файл алиасов представлен в виде списка описателей на удаленные СУБД. В результате выполнения которого в интерпретаторе, объект контейнера ссылок будет содержать набор объектов алиасов, при использовании которых формируется обращение к требуемым компонентам общей информационной системы. Если рассмотреть диаграмму классов для объекта алиаса - определяем, что базовым классом для него является LQLObject, который реализует функционал по фиксации внешних и дополнительных инструкции в интерпретаторе LUA. Далее, используя родительские методы, объект класса LQLAlias формирует

собственную глобальную мета-таблицу данных с уникальным идентификатором (именем), содержащую в себе инструкции виртуальной машины для доступа к распределенной СУБД. Метатаблица представляет собой обычную таблицу в LUA, в которой представлены допустимые операции над значением.

Одним из глобальных классов, отвечающих за работу информационной системы в рамках поставленной задачи, является класс Alias, который обеспечивает взаимодействие со средой следующим образом: он инкапсулирует в себя объектные ссылки на CORBA скелетоны HSystem.DriverManager и HSystem.Connection. Используя CORBA ссылки на объекты рассматриваемых классов происходит выполнение транзакции на языке SQL к СУБД с которой в текущий момент установлено прямое соединение. Данный механизм реализован в рамках операции Alias::query(), который делегируется средствами класса LQLAlias с целью дальнейшей регистрации в интерпретаторе LUA. После окончания рассматриваемого процесса уникальная ссылка на объект становиться доступной в языке формирования запросов.

8. Создание среды выполнения транзакций. Построенная среда выполнения транзакций предназначена для хранения состояний выполнения каждой локальной транзакции в условиях распределенного запроса к СУБД, которая в момент выполнения распределенного запроса к информационной системе реального времени отслеживает работу каждой операции в интерпретаторе. Как только в условиях поиска встречается инструкция выполнения локального запроса к РСУБД, среда выполнения помещает завершенный объект локальной транзакции в свой контейнер. При наличии ошибок в момент выполнения распределенного запроса - откатывает все транзакции находящиеся в контейнере. В случае отсутствия ошибочных ситуаций -фиксирует каждую транзакцию в своей базе данных, с целью последующего выполнения.

9. В случае успешной реализации каждого ранее рассмотренного этапа (п.1-п.8) производится формирование глобального объекта класса LQLGlobal, который является внутренним классом глобальной среды LQL. Используя динамическое преобразование к интерфейсу ILQLGlobal, возвращает указатель на зафиксированный объект web-приложению. Если на этапе инициализации ORB, инициализации LUA машины произошла

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

Заключение

Таким образом, скриптовый язык LUA, в условиях построения координатора транзакций LTM, с применением модифицированного языка запросов LQL обладает достаточными удобствами, имеющимися в современных языках программирования сценариев: выполнения математических операций, управляющие структуры, итераторы и стандартные библиотеки для обработки строчных объектов, выдачи и сбора данных. Все это абсолютно удовлетворяет требованиям

при создании рассматриваемой

информационной системы.

Литература

1. Бурковский, В.Л. Моделирование и алгоритмизация управления гетерогенными базами данных в распределенных информационных системах [Текст] / В.Л. Бурковский, А.Н. Дорофеев, С.В. Семынин // Воронеж, ВГТУ, 2003 г. - с 71.

2. Рыков, С.А. Управление гетерогенными распределенными объектами информационных систем реального времени [Текст] / С.А. Рыков, В.Л. Бурковский, А.А. Голиков // Воронеж: ВГТУ, 2012 г. - с 193

3. Рыков, С.А. Математическое и программное обеспечение информационных систем реального времени с гетерогенной средой распределенных СУБД [Текст] / С.А. Рыков // Воронеж: ВГТУ, 2011 г. - с 185

4. Локшин, М.В. Методика получения временных оценок исполнения запросов в параллельных СУБД с репликацией данных [Текст] / М.В. Локшин // Системы управления и информационные технологии. - 2014. -№ 4. - С. 41-44

Воронежский государственный технический университет

TECHNOLOGY OF CONSTRUCTION OF THE DISTRIBUTED TRANSACTION COORDINATOR IN THE WEB- SERVICE

S.A. Rykov, Ahmed Ali M. Ahmed, M.V. Lokshin

The article deals with the problems of transaction management in heterogeneous distributed IT environments and offers a means of building transaction coordinator based scripting language Lua in a Web-service

Key words: Programming language Lua, Database Management System (DBMS), RDBMS, CORBA, IS, web-service