АДАПТАЦИЯ ТЕХНОЛОГИИ WEB СЕРВИСОВ ДЛЯ САЙТОВ И ИНФОРМАЦИОННЫХ ПОРТАЛОВ, РАЗРАБАТЫВАЕМЫХ НА UNIX ПЛАТФОРМЕ О.В. Шаройко, А.Н. Березовский Ростовский государственный университет, г.Ростов-на-Дону В докладе рассматривается разработанная авторами технология, которая позволяет, сохранив все преимущества XML Web сервисов, адаптировать их к современным условиям размещения сайтов и порталов. Данная технология ориентируется на размещение сайтов на платформе UNIX. Современные сайты давно перестали быть статическими и в том или ином виде используют компоненты, создающие HTML код в процессе исполнения. Такие компоненты могут работать как в режиме offline, периодически изменяя содержимое сайта, так и в режиме on-line, когда необходимый HTML код генерируется непосредственно во время обработки HTTP запроса. Результатом развития этого направления стало появление новых языков программирования, ориентированных непосредственно на генерацию HTML кода и разработка специальных библиотек для существующих языков. Такие языки позволили создавать динамические HTML страницы, которые включали в себя HTML разметку для клиентского браузера и серверный код для формирования динамических данных. В виду того, что для современных сайтов характерна относительно частая смена внешнего облика, одна из основных проблем сопровождения сайтов – это проблема отделения кода динамических компонент от оформления сайта. Попытки решить эту проблему не прекращаются с момента появления динамических страниц. Известно несколько попыток создать гибкую систему, позволяющую помимо прочего разделить функциональность и дизайн сайта. Однако на наш взгляд настоящий прогресс в этой области возможен только с использованием языка XML для описания данных и технологии XSLT для определения правил их отображения. С учетом выше сказанного логично выбрать в качестве инструментария построения сайтов один из скриптовых языков, имеющий библиотеки для генерации HTML кода и поддерживающий стандарты XML и XSL. В качестве примера таких языков можно назвать PHP, Perl, Ruby, Python. Другая проблема, встающая перед разработчиками, это проблема интеграции сайтов в уже существующую информационную среду. Здесь на первое место выходят вопросы совместимости динамических компонент с прикладным ПО. Ключевую роль в обеспечении такой совместимости должно сыграть middleware, такое как, например, CORBA или COM. Для UNIX систем стандартом de-facto для middleware стала технология CORBA. Однако, к большому сожалению, уровень поддержки технологии CORBA в скриптовых языках оставляет желать лучшего. Что, в принципе, не удивительно, так как разработчики CORBA ориентируются в первую очередь на такие языки как C++ и Java. Таким образом, проблема интеграции сайтов в существующую информационную среду остается открытой. По крайней мере для сайтов, разрабатываемых на UNIX платформе. Еще один немаловажный аспект построения сайтов – это необходимость совместного использования компонент несколькими сайтами, в том числе и сайтами разных разработчиков. Красивое и гибкое решение этой проблемы, допускающее легкое отделение кода компонент от оформления сайта предлагает технология Web сервисов. Сайты, разработанные с использованием этой технологии, строятся по следующей схеме: Наиболее простой и естественный способ реализации web сервисов в системе UNIX – это использование HTTP сервера для приема и передачи XML сообщений. При таком подходе у разработчика нет необходимости самостоятельно реализовывать транспортный уровень сервисов и он может целиком сосредоточиться на основной их функциональности. В этом случае динамические компоненты удобно реализовать на одном из скриптовых языков. В виду того, что результат работы компоненты выдается на XML проблем с пересечением дизайна и функциональности при таком подходе не возникает. Взаимодействие различных компонент этой схемы таково: Такая схема имеет ряд недостатков. Во-первых, если учесть, что сайты сопровождаемые одной командой разработчиков обычно размещаются на одном компьютере, то становится очевиден недостаток в области производительности, связанный с необходимостью выполнения дополнительных запросов по протоколу HTTP для обращения к динамическим компонентам. Во-вторых при такой схеме сохраняется проблема интеграции в существующую информационную систему, в виду плохой поддержки CORBA в скриптовых языках. В-третьих, такой подход не дает возможности использовать в компонентах несколько потоков исполнения и вообще не дает никаких возможностей изменить схему обработки запросов, так как код этой обработки находится внутри HTTP сервера. В виду перечисленных недостатков построение web сервисов по такой технологии нельзя признать приемлемым. В результате попытки адаптировать Web сервисы к задаче построения сайтов на UNIX платформах удалось получить технологию, сохраняющую преимущества XML Web сервисов в области отделения кода динамических компонент от оформления сайта и совместного использования компонент. Разработанная технология не требует 3 дополнительных HTTP запросов для обращения к компонентам, находящимся на одном компьютере и позволяет легко интегрировать компоненты в существующую информационную среду. Адаптированная технология Web сервисов предполагает следующую схему построения сайтов: Рис. 1. Рис. 2. Данная технология предполагает существование двух типов компонент. Деление на типы осуществляется в зависимости от того, насколько часто происходят обращения к компоненте и насколько быстро она должны отвечать на поступивший запрос. Компоненты, к которым редко обращаются и от которых не требуется быстрой реакции реализуются как обычные программы, получающие через стандартный входной поток XML запрос и выдающие на стандартный выходной поток XML ответ. Компоненты, от которых требуется большая доступность реализуются как постоянно работающие демоны, взаимодействие с которыми осуществляется через unix сокет. Выбор таких средств взаимодействия обусловлен их стандартностью и наличием поддержки в большинстве языков, использующихся при построении сайтов. Предлагаемый подход к реализации Web сервисов позволил сохранить все их преимущества. Действительно, запросы и результаты работы передаются в формате XML, поэтому в самих сервисах нет никакой привязки к дизайну сайта. Вопросы совместного использования компонент тоже легко решаются путем применения простейшего преобразования HTTP запроса в обращение к программе или unix сокету. Причем, легко избежать потерь при преобразовании, если реализовать преобразователь как fastcgi приложение для HTTP сервера. С другой стороны, проблема существования Рис. 3 дополнительного запроса в данной схеме решена. Проблема интеграции тоже более не стоит, так как компонента может быть написана на любом языке, в том числе и поддерживающем CORBA. С управлением политиками обработки запросов тоже не возникает сложностей: любая из известных политик может быть реализована в соответствующей компоненте-демоне. Таким образом разработанная технология сохраняет все преимущества Web сервисов и, в то же время, лишена ряда недостатков, так как учитывает особенности размещения современных сайтов на unix платформе. Требовать от разработчиков всякий раз заново реализовывать код работы с unix сокетами и код разбора XML конечно же нелепо. Поэтому в рамках данного проекта разработаны: клиентский код для обращения к динамическим компонентам на наиболее популярных языках построения сайтов (PHP, Perl, python); библиотека на C++ для разбора XML сообщения и построения соответствующего ему дерева, а также для выполнения обратного преобразования; многопоточный процесс демон, позволяющий подключать plugin модули, реализующие функциональность компонент. Клиентский код разработан так, чтобы максимально упростить обращение к динамическим компонентам и, в то же время позволить легко выбирать тип обращения. На данный момент поддерживаются обращения по протоколу HTTP, обращения к unix сокету и обращения к программе. Библиотека работы с XML позволяет при реализации конкретной компоненты работать не непосредственно с XML документом, а с некоторой структурой, содержащей сами данные. Такой подход позволяет упростить процесс написания компонент. Многопоточный демон сводит написание компоненты к написанию plugin модуля, который может состоять из единственной функции, выполняющей полезную работу. Все остальные действия, связанные с чтением запроса 4 из unix сокета, разбором XML документа и постороением дерева, а также обратным процессом генерации XML документа и его отправки клиенту выполняет сам демон, причем использование нескольких потоков исполнения позволяет сделать этот процесс максимально эффективным. Данная технология опробована на нескольких сайтах и показала себя не только жизнеспособной но и весьма удачной. 5