Веб-сервисы сегодня на слуху у западных сообществ разработчиков, аналитиков и менеджеров. Однако, в России технологии веб-сервисов пока новы и нуждаются в представлении. В этой статье мы попробуем познакомить вас с этой концепцией.
1. Немного истории
Чтобы понять, почему в головы IT-специалистам пришла концепция веб-сервисов, чем эта концепция отлична от иных попыток создания технологий разработки распределенных информационных систем (ИС) и, самое важное, чем она так хороша, как это следует из уст ведущих экспертов крупных компаний-вендоров и аналитиков IT-сектора, уместно вернуться на несколько лет назад и посмотреть как развивались технологии построения распределенных ИС, что было создано и с какими проблемами пришлось столкнуться.
Как это обычно бывает, почти во всем “виноваты” деньги. Когда компьютерные сети вышли за рамки сугубо научных и военных учреждений (вспомним ARPAnet), они стали достоянием энтузиастов-частных лиц. Когда же частных лиц, пользующихся компьютерными сетями, стало достаточно много, сообразили, что компьютерные сети могут быть использованы для производства денег. Так компьютерные сети общего пользования, основная и самая распространенная из которых сегодня называется Интернет, стали бизнес-инструментом. Чтобы с помощью этого инструмента вести бизнес, он должен удовлетворять некоторому набору требований, главные из которых – безопасность и скорость передачи информации. Задачу выполнения этих требований стали решать на самом низком уровне – на уровне транспортных протоколов. Различные компании предложили различные реализации сетевых протоколов. Сетевые протоколы, как известно, задают правила формирования сетевых пакетов и обмена ими. Использующие эти правила (повторимся - различные для различных протоколов) сетевые приложения тем самым жестко привязываются к определенным протоколам. Между тем быстроразвивающиеся бизнес-отношения требовали, чтобы сетевые приложения, использующие различные протоколы, могли обмениваться между собой данными – таким образом, встала задача интеграции приложений.
Вот здесь-то и начались мытарства. На протяжении нескольких лет было создано несколько технологий взаимодействия распределенных приложений, так или иначе позволявших реализовать обмен данными между приложениями (среди получивших наибольшее развитие - Remote Procedure Calls (RPC), Distributed COM (DCOM), Remote Method Invocation (RMI) и Common Object Request Broker Architecture (CORBA)), однако каждая из них была довольно сложна в реализации, не обладала необходимой универсальностью (т. е. все же зависела от выбора, например, одной и той же операционной системы для всех участников обмена) и, что особенно плохо, эти технологии с большим трудом стыковались между собой. Т. е. произошло лишь укрупнение групп невзаимодействующих между собой приложений, что, разумеется, не могло устраивать ни бизнес, ни IT-специалистов.
Тогда был избран иной, противоположный, подход: обратились к базисным веб-технологиям, попробовали найти то немногое, что является основой Интернета. А эта основа состоит из следующих технологий:
Мы умышленно подчеркиваем универсальность каждой из технологий, потому что эта универсальность – основа для понимания веб-сервисов. Они основаны только на общепринятых, открытых и формально независимых от вендоров технологиях. Только посредством этого достигается главное преимущество веб-сервисов как концепции построения распределенных ИС – их универсальность, т. е. возможность применения для любых операционных систем, языков программирования, серверов приложений и т. д. Таким образом, веб-сервисы решают исходную задачу – задачу интеграции приложений различной природы и построения распределенных ИС. В этом и заключается основное принципиальное отличие веб-сервисов от предшественников. Уже сейчас ясно, что наиболее широкое применение веб-сервисы найдут в сфере интеграции корпоративных приложений (Enterprise Application Integration (EAI)). С помощью веб-сервисов можно несколько, порой сильно разнящихся между собой, бизнес-процессов выстроить в один-единственный цельный бизнес-процесс, достигнув при этом существенно более высоких показателей эффективности бизнеса – начиная от прямого увеличения выручки за счет улучшения продаж и обслуживания клиентов и кончая “банальным” сокращением накладных расходов при обмене данными.
2. Так ли все хорошо?
И все же веб-сервисы нельзя рассматривать как лекарство от всех бизнес-проблем, имеющихся
сейчас или могущих возникнуть в будущем. Хотя веб-сервисы и являются логичным и уже вполне
зрелым продолжением предшествовавших им технологий построения распределенных ИС, они – такая
же технология, как и многие другие, имеющая свои плюсы и минусы и, как следствие, рамки
применимости. Непонимание и неучет этих ограничений в реальных проектах может привести к
весьма печальным последствиям.
Подробнее остановимся на плюсах и минусах.
К плюсам веб-сервисов можно отнести следующее:
Анализируя вышеизложенное, на наш взгляд, можно заметить, что плюсы являют собой бизнес-преимущества стратегического плана, минусы же носят технологический характер и происходят больше от новизны технологий веб-сервисов и, мы уверены, решение этих проблем является лишь вопросом времени (причем не столь отдаленного, учитывая темпы развития IT-мысли).
3. Определение веб-сервиса
Дадим формальное определение веб-сервиса:
Веб-сервисом (см. документ W3C
“Web-services architecture requirements”)
называется программная система,
идентифицируемая строкой URI, чьи публичные интерфейсы и привязки определены и описаны
посредством XML. Описание этой программной системы может быть найдено другими программными
системами, которые могут взаимодействовать с ней согласно этому описанию посредством
сообщений, основанных на XML, и передаваемых с помощью Интернет-протоколов.
Внимательно прочитав это крайне общее, но, тем не менее, очень точное по сути определение (именно в его общности и заключается, как ни парадоксально, его точность), можно увидеть, что единственное упоминание конкретной технологии сделано в отношении XML. Не говорится ни о применяемом сетевом протоколе, ни о языке программирования, ни о программной платформе. И хотя, как правило, для передачи сообщений в ИС на основе веб-сервисов в качестве транспортного протокола используется стандартный HTTP, его использование совершенно не обязательно, и можно использовать (посредством так называемых протокольных привязок (protocol bindings)), например, SMTP-протокол. На применение языков программирования также не накладывается никаких ограничений – уже разработаны веб-сервисы на Java, C++, C#, COBOL и других языках. С программными платформами, операционными системами и серверами приложений, дело обстоит еще проще (лучше) – возможны любые сочетания (например, можно найти и вызвать веб-сервис, развернутый на IBM WebSphere Application Server под управлением Linux, с рабочей станции Macintosh). Единственное условие – использование XML-сообщений (точнее SOAP-сообщений), поскольку реальной альтернативы XML как языку, позволяющему работать с различными типами данных, на сегодняшний день нет.
4. Service-Oriented Architecture (SOA, сервисно-ориентированная архитектура)
4.1 Большие предприятия - большие проблемы
В разделе 3 первой статьи цикла мы дали определение веб-сервиса как программной системы. Т.е., грубо говоря, согласно этому определению, веб-сервис в конечном счете - просто несколько особенно написанный фрагмент программного кода, выполняющегося на сервере. И это верно. Но данное определение - техническое. Попробуем взглянуть на веб-сервисы иначе, с точки зрения бизнес-анализа.
Концепция веб-сервисов родилась после нескольких не вполне удачных попыток многих групп аналитиков, архитекторов и разработчиков по всему миру создать среду и механизм взаимодействия того многообразия информационных систем, которые они же, эти группы аналитиков, архитекторов и разработчиков, и создали. Столь большое количество неглупых в общем-то людей редко тратят столько энергии, интеллекта и времени просто так - обычно, это означает, что предполагаемый результат их усилий очень востребован. Например, как ни странно, бизнесом. Современное коммерческое предприятие трудно представить без информационных систем различного назначения: бухгалтерских, финансово-аналитических, производственных, складских и т. д. Большое предприятие использует большие многофункциональные информационные системы (можно вспомнить аббревиатуры ERP, CRM, SCM и т. п.), часто несколько одновременно. А есть еще поставщики, клиенты, партнеры, у которых свои, не менее сложные и специфичные, информационные системы, и с ними информационным системам предприятия необходимо взаимодействовать. Как организовать это взаимодействие? Как ЭФФЕКТИВНО организовать это взаимодействие, чтобы создать производительные, надежные и безопасные автоматизированные (экстра)корпоративные (т. е. простирающиеся за пределы предприятия) цепочки именно тех бизнес-процессов, интеграция которых необходима предприятию для осуществления своих бизнес-функций? Именно в области интеграции (экстра)корпоративных приложений (англ. Enterprise Application Integration, EAI) лежит основная масса IT-проблем современных предприятий, именно на решение вопросов взаимодействия разнородных информационных систем готовы бросить свои основные ресурсы CEO и CIO, и именно здесь наиболее эффективным инструментом решения будут веб-сервисы.
4.2 Определение сервиса
Вернемся к эффективной организации взаимодействия информационных систем. Для начала неплохо бы знать какие бизнес-процессы необходимы предприятию для осуществления его бизнес-функций. С этой целью проводят декомпозицию функциональных блоков бизнес-процессов до получения цепочек бизнес-процессов, цепочек бизнес-процессов - до получения отдельных бизнес-процессов, а отдельных бизнес-процессов - до составляющих их функций. Бизнес-функция, дающая конкретный измеримый результат, является минимальной сущностью, имеющей ценность для бизнеса, неким квантом. Именно ее и можно отождествить с сервисом:
Назовем сервисом (service) ресурс, реализующий бизнес-функцию, обладающий следующими свойствами:
4.3 Определение сервисно-ориентированной архитектуры
Таким образом, с функциональной точки зрения бизнес-приложение распадается, в конечном итоге, на
совокупность взаимодействующих между собой сервисов. Эту совокупность взаимодействующих сервисов можно
отождествить с еще одним ключевым понятием - сервисно-ориентированной архитектурой:
Компонентная модель, состоящая из отдельных функциональных модулей приложений, называемых
сервисами, имеющих определенные согласно некоторым общим правилам интерфейсы и механизм взаимодействия
между собой, называется сервисно-ориентированной архитектурой (Service-Oriented Architecture, SOA).
Переходя в мир абстракций, можно дать следующее, более сильное, определение сервисно-ориентированной
архитектуры:
Архитектура приложений, в рамках которой все функции приложения являются независимыми
сервисами с четко определенными интерфейсами, которые можно вызывать в нужном порядке с целью формирования
бизнес-процессов, называется сервисно-ориентированной архитектурой.
(Оговоримся, что на сегодняшний день устоявшегося, принятого IT-сообществом, определения SOA нет. Здесь
мы приводим определение, которое, на наш взгляд, наиболее полно и точно отражает современное состояние этой
концепции).
Поясним второе определение:
"все функции приложения" - как мы уже упомянули, любое приложение с функциональной точки зрения может
быть представлено совокупностью функций; ресурс, реализующий функцию, есть сервис. Таким образом,
приведенное определение требует для представления и реализации любого приложения в рамках SOA проведения
его полной декомпозиции до уровня отдельных функций;
"являются независимыми сервисами" - в понятие независимости сервиса вкладывается следующий смысл:
сервисы функционируют независимо от других информационных систем, являются функционально самостоятельными
объектами. Они представляют собой "черные ящики" для любых внешних приложений: внешние приложения не знают,
как сервис формирует из входных данных выходные. Все, что им известно - что необходимо подать на вход
сервиса и что следует ожидать на его выходе;
"с четко определенными интерфейсами" - функция (или функции), которую реализует данный сервис,
должна быть однозначно описана согласно определенным, принятым для всех сервисов, правилам. Должен быть
описан набор и типы входных данных, а также набор и типы выходных данных;
"с ... интерфейсами, которые можно вызывать" - данное требование обусловлено необходимостью
обеспечения взаимодействия между различными сервисами: для внешних по отношению к сервису информационных
систем не должно иметь значения на каком языке программирования реализован сервис (точнее, здесь,
веб-сервис), на какой программно-аппаратной платформе он функционирует, локально или удаленно он
расположен. Внешняя информационная система должна иметь возможность взаимодействовать с сервисом (т.е.
передать ему входные данные и получить выходные) вне зависимости от указанных его особенностей.
4.4 Требования к SOA
SOA, будучи практической (и практичной) концепцией, должна соответствовать определенным требованиям, предъявляемых к ней современным состоянием бизнес-отношений и информационных технологий, а также тенденциями их совместного развития:
Сегодняшний уровень развития SOA позволяет утверждать, что все указанные требования в той или иной мере выполняются.
4.5 SOA и веб-сервисы - в чем разница?
Необходимо отметить, что SOA - не есть синоним веб-сервисов, а веб-сервисы - не есть единственный способ реализации SOA. SOA не является технологией или набором технологий, это - концепция, абстрактное представление реализации информационных систем с помощью сервисов безотносительно конкретных технологий. Как нетрудно заметить, в SOA присутствуют элементы объектного подхода к построению информационных систем: декомпозиция (приложений на отдельные функции) и инкапсуляция (сервисы как "черные ящики"). Однако, подчеркнем, термин "объектно-ориентированный" по отношению к SOA не является корректным, т. к. в SOA отсутствуют все необходимые элементы объектно-ориентированной идеологии. Более правильно называть SOA концепцией, использующей объектный подход.
Веб-сервисы, в свою очередь, являются лишь технологиями, с помощью которых можно эффективно реализовать сервисно-ориентированную архитектуру. Существуют и другие технологии, с применением которых можно реализовать SOA - например, упомянутая выше CORBA.
4.6 Почему SOA?
Концепции SOA и веб-сервисов не новы; на протяжении последних десяти лет были и другие технологии построения распределенных информационных систем, например, CORBA и DCOM. Однако, со временем решения, построенный на их основе перестали удовлетворять основным требованиям, предъявляемым к бизнес-решениям: максимально низкая TCO, максимально высокий ROI, короткий цикл разработки и внедрения информационной системы, широкие возможности интеграции разнородных систем. Наряду с бизнес-причинами отмирания предыдущих технологий построения распределенных информационных систем была и не менее важная технологическая причина: эти технологии не достигли необходимого уровня зрелости. Они продвигались лишь отдельными вендорами, были обременены различными копирайтами, ограничивающими их распространение, не было разработано унифицированных нормативных и технических, принятых мировым IT-сообществом, документов, описывающих принципы применения этих технологий. Результат известен: ни одна из этих технологий не получила широкого практического применения и сегодня можно констатировать, что их развитие фактически остановилось.
Уроки были извлечены при создании методологической основы концепций веб-сервисов и SOA, и сегодня технологии веб-сервисов и SOA:
5. Стек технологий веб-сервисов
Итак, концепция сервисно-ориентированной архитектуры подразумевает реализацию бизнес-процессов предприятия в виде совокупности сервисов, взаимодействующих друг с другом либо с пользователями в определенной последовательности и в соответствии с определенными правилами. Отметим, что, вообще говоря, это весьма нетривиальная задача - определить эту "определенную последовательность" и "определенные правила" таким стандартным для индустрии (разработки бизнес-приложений) образом, чтобы покрыть весь спектр существующих сценариев взаимодействия бизнес-объектов, учитывая исторически сложившееся многообразие технической и технологической реализации этого взаимодействия и самих бизнес-объектов. Решить эту задачу в рамках какой-либо единой технологии пока не удалось. И хотя тенденция консолидации существующего множества технологий веб-сервисов в настоящее время налицо, для реализации сервисно-ориентированных архитектур с помощью веб-сервисов сейчас применяется совокупность технологий, образующих так называемый стек технологий веб-сервисов (см. Рис. 1).
Рис. 1: Стек технологий веб-сервисов
Стек технологий веб-сервисов принципиально разбивается на следующие две составляющие:
В целях понимания назначения слоев, дадим краткое описание каждого из них.
№ | Наименование слоя | Назначение слоя | Технологии, реализующие слой |
Функциональность (Functions) | |||
1 | Транспортный слой (Transport layer) | Описывает средства обмена данными между веб-сервисами | Стандартные: HTTP, JMS (для Java-приложений), SMTP Нарождающиеся: WS-ReliableMessaging, BEEP |
2 | Коммуникационный слой (Service communication layer) | Описывает средства формализации механизмов использования транспортных протоколов веб-сервисами. Используя метафоры, можно отождествить транспортный протокол с дорогой между веб-сервисами, а механизмы его использования, определяемые коммуникационным слоем, с грузовыми машинами, перевозящими по ней от сервиса к сервису сообщения | Стандартные: SOAP Нарождающиеся:REST |
3 | Слой описаний сервисов (Service description layer) | Описывает средства формализации интерфейсов веб-сервисов с целью обеспечения их
функционирования независимо от программно-аппаратной платформы реализации или языка
программирования. Различают два вида описаний сервиса:
|
Стандартные: XML, WSDL Нарождающиеся: ebXML |
4 | Сервисный слой (Service layer) | Описывает программное обеспечение, вызываемое с помощью WSDL-описаний интерфейсов веб-сервисов. В частности, это сами веб-сервисы | |
5 | Слой бизнес-процессов (Business process layer) | Описывает возможности организации веб-сервисов для реализации бизнес-процессов и потоков работ. При этом определяются правила, задающие последовательность взаимодействия веб-сервисов с целью удовлетворения бизнес-требованиям | Стандартные: в настоящее время нет Нарождающиеся: BPEL4WS |
6 | Слой реестров сервисов (Service registry layer) | Описывает возможности организации веб-сервисов в иерархические библиотеки, позволяющие публикацию, поиск и вызов веб-сервисов по их WSDL-описаниям интерфейсов | Стандартные: UDDI Нарождающиеся: WS-Inspection |
Качество сервиса (Quality of service) | |||
7 | Слой политик (Policy layer) | Описывает правила и условия, согласно которым веб-сервисы могут быть использованы. Поскольку данные правила и условия относятся как к функциональному аспекту веб-сервисов, так и к аспекту обеспечения качества сервиса на Рис. 1, данный слой является общим для обоих аспектов | Стандартные: в настоящее время нет Нарождающиеся: WS-Policy, WS-PolicyAssertions и WS-PolicyAttachment |
8 | Слой безопасности (Security layer) | Описывает возможности обеспечения безопасности веб-сервисов и безопасности их функционирования (авторизация, аутентификация и разделение доступа) | Стандартные: WS-Security Нарождающиеся: WS-SecureConversation, WS-Federation, WS-Authorization, WS-Trust и WS-Privacy |
9 | Слой транзакций (Transaction layer) | Описывает свойство транзакционности распределенных систем на основе веб-сервисов для обеспечения надежности их функционирования | Стандартные: в настоящее время нет Нарождающиеся: WS-Transaction и WS-Coordination |
10 | Слой управления (Management layer) | Описывает возможности управления веб-сервисами и характеристиками их функционирования |
Представленный выше стек технологий веб-сервисов вводит иерархию во множество технологий
веб-сервисов в соответствии с их функциональным назначением. При этом в таблице указаны лишь наиболее
широко применяемые и устоявшиеся технологии. Стандартными названы технологии, получившие официальный
статус стандартов международных консорциумов по разработке IT-стандартов (W3C, OASIS либо WS-I). В
действительности, спектр технологий, описывающих те или иные аспекты использования веб-сервисов либо
сервисно-ориентированных архитектур, крайне широк, в частности,
потому, что процесс разработки данных технологий является открытым - любая компания, некоммерческое
объединение специалистов или даже один специалист может разработать и опубликовать спецификацию
разработанной им технологии. В настоящее время это даже стало серьезной проблемой рынка веб-сервисов -
количество спецификаций стало столь велико, что при фактической нерегламентированности глобального (в
рамках всей индустрии) процесса их разработки, ввода в действие и использования, появляется опасность
ввергнуть индустрию в хаос и технологическую разобщенность. А технологическая разобщенность - как раз
то, от чего хотели уйти прежде всего, разрабатывая веб-сервисы и закладывая в качестве их
концептуальной и технологической основы открытые и наиболее широко применяемые IT-технологии.
6. Принципы взаимодействия веб-сервисов в рамках сервисно-ориентированной архитектуры
В настоящее время технологический фундамент веб-сервисов образуется следующими технологиями:
Рис. 2: Взаимодействие между компонентами сервисно-ориентированной архитектуры
Различают следующие три основных архитектурных компонента сервисно-ориентированной архитектуры:
Каждый компонент может играть либо лишь одну роль (быть, например, только пользователем сервиса) либо одновременно сразу несколько ролей (например, быть провайдером одних сервисов и пользователем других).
Заметим, что в данном описании компонентов сервисно-ориентированной архитектуры и взаимодействия между ними следует различать термины "сервис" и "веб-сервис". Под сервисом понимается бизнес-функция (здесь уместно снова обратиться к п. 4.2), под веб-сервисом - программная реализация бизнес-функции (сервиса).
В ходе взаимодействия друг с другом компоненты сервисно-ориентированной архитектуры выполняют
следующие основные операции:
В заключение следует сказать, что с целью выработки и популяризации стандартов, описывающих
взаимодействие веб-сервисов в рамках сервисно-ориентированной архитектуры, создано международное
объединение около 150 ведущих компаний, называющееся WS-I (Web Services
Interoperability Organization). Важным результатом работы данного объединения стало создание и
утверждение в
2003 году так называемого WS-I Basic Profile 1.0 - пакета базовых спецификаций веб-сервисов,
взаимоувязанных с целью обеспечения широких возможностей взаимодействия веб-сервисов. В настоящее
время в данный профиль входят следующие спецификации технологий:
Кроме того, в профиле описаны сценарии, демонстрирующие основные методы организации взаимодействия между веб-сервисами.