Распределённые приложения... Как много в этом слове! Точнее, словосочетании - но это уже не суть важно, мы ведь сейчас не о филологии. Распределённые приложения - это отдельная ниша на рынке программного обеспечения. Они стоят дорого, поскольку используются крупными потребителями, а потому программисты, которые их разрабатывают, часто смотрят свысока на своих коллег, разрабатывающих что-нибудь помельче. CORBA - одна из ведущих технологий создания распределённых приложений, потому знакомство с их разработкой невозможно без знакомства с этой технологией.
Что такое CORBA?
CORBA - это аббревиатура от названия Common Object Request Broker Architecture, что на русский язык переводится как "общая архитектура брокера объектных запросов". Разработана эта технология с целью обеспечения объектно-ориентированной коммуникации между частями одного приложения так, как если бы они не были распределены. Здесь следует обратить внимание на то, что CORBA - это объектно-ориентированная технология, и именно это во многом определило её популярность.
Суть CORBA состоит в следующем: каждый компонент распределённого приложения имеет доступ к открытым методам других компонентов, которые он может вызывать на выполнение. О том, какие есть методы, он узнаёт с помощью интерфейсов, описание которых осуществляется на специальном языке IDL - Interface Definition Language.
Для тех, кто программирует под
Windows и знаком с технологией DCOM, это всё очень напоминает эту технологию. Однако CORBA имеет массу существенных отличий от DCOM, несмотря на общее сходство в архитектуре и в том, что компоненты распределённого приложения могут быть реализованы практически на любом языке программирования. Отличие первое состоит в том, что CORBA - технология кросс-платформенная. То есть, один компонент приложения может работать под
Linux, второй под Windows, и при этом ни один из них не будет испытывать затруднений из-за различия платформ. Во-вторых, разрабатывает эту технологию не всемогущая корпорация из Редмонда, а консорциум OMG (www.omg.org), который, помимо CORBA, занимается ещё и такой полезной технологией, UML. Консорциум этот знаменит, среди прочего, тем, что в него входят такие компании, как American Airlines, которые софт не производят, а только потребляют.
Это важное слово "брокер"
Одно из фундаментальных понятий архитектуры CORBA - это брокер объектных запросов (ORB). Это один из самых важных компонентов распределённой системы, основанной на CORBA, поскольку именно он отвечает за то, чтобы запросы от одних объектов пришли к другим, причём именно к тем, которым они были посланы. Запрашивает клиент, соответственно, тот, кого запрашивают, - это сервер. Но эти роли действуют в рамках одного запроса, и уже в рамках следующего клиент и сервер могут поменяться местами. Таким образом, каждый компонент в распределённом CORBA-приложении имеет одновременно свойства и клиента, и сервера - и, таким образом, достигает максимальной самостоятельности и независимости в своей реализации от других компонентов приложения.
Брокеры бывают разные. Не чёрные, белые, красные, но всё же разные. Есть брокеры, существующие как самостоятельные приложения, а есть те, которые могут встраиваться в другие приложения. Естественно, решение о том, какой из этих типов лучше применять, зависит от специфики конкретной распределённой системы. Один из самых популярных коммерческих брокеров - Borland VisiBroker, который умеет работать с
Java,
C++ и .
NET-приложениями. Из некоммерческих брокеров, в первую очередь, стоит упомянуть MICO и omniORB.
Для взаимодействия брокера с компонентами приложения используется, как я уже говорил, язык IDL. Описания на нём могут быть с помощью соответствующего инструментария переведены на язык программирования, который выбран для реализации компонентов распределённой системы. При этом в каждом компоненте должны реализовываться несколько различных видов IDL-описаний. Client IDL Stub, как видно из названия, служит для связи брокера и клиента. Server IDL Stub - совершенно аналогичный вариант IDL-интерфейсов для связи ORB и сервера. Он имеет второе название Static Skeleton и позволяет компоненту создавать в реальном времени запросы, которые в конечном счёте генерируются с помощью DII (Dynamic Invocation Interface). Раз есть Static Skeleton, должен быть и Dynamic Skeleton Interface. Он позволяет направлять серверу запросы, с которыми сервер, так сказать, не знаком.
Ещё одно важное понятие CORBA - Interface Repository. Это репозиторий (хранилище) всех зарегистрированных в системе интерфейсов, их методов и параметров этих методов. Есть ещё и Implementation Repository - хранилище информации о доступных серверах.
Что, кроме брокеров?
Но, конечно, на брокерах и взаимодействии компонентов с ними CORBA не заканчивается. Можно даже сказать, дело обстоит с точностью до наоборот - всё только с этого и начинается.
Сейчас давайте познакомимся с понятием объектных сервисов. Это инструменты, которые предоставляют приложениям дополнительные интерфейсы. Пишутся объектные сервисы на IDL и отвечают за такие вещи, как лицензирование компонентов, контроль версий, тестирование, инсталляция... Что интересно, благодаря объектным сервисам компоненты как бы сами учатся производить какие-либо действия - скажем, инсталлироваться самостоятельно.
Объектных сервисов не так уж много, поэтому я сейчас их перечислю. Naming - это сервис для поиска компонентов в
сети по символическим ссылкам. Licensing - сервис лицензирования, который нужен в том случае, если какие-либо компоненты нужно защитить от незаконного использования. Events - сервис, который отвечает за работу с событиями, он собирает уведомления о событиях от всех компонентов приложения и отсылает уведомления о них тем компонентам, которые заявили сервису о том, что то или иное событие представляет для них интерес. Сервис безопасности, который разграничивает доступ в распределённом приложении, называется, соответственно, Security. Externalization - сервис сохранения и загрузки параметров объекта. Transactions - это, как легко догадаться, сервис для работы с транзакциями, который нужен при работе с базами данных. Life Cycle - сервис, которые даёт возможность перемещать, убивать и вообще по-всякому мучить компоненты. Time - сервис для работы со временем, здесь ничего не убавишь и не прибавишь. Relationships - сервис для связывания двух типов объектов при помощи IDL. Property - сервис для приписывания объектам каких-либо свойств без затрагивания IDL-дефиниции. Concurrency Control - сервис, защищающий систему от конфликта данных. Persistent Objects - сервис хранения особенно важных данных, который позволяет включать в систему реляционные базы данных в виде CORBA-компонентов. Ещё один сервис, нужный для работы с БД - Query, который определяет способы выполнения запросов к ней.
Кроме, собственно, брокеров, в CORBA имеется механизм взаимодействия между ними. Называется
протокол обмена информацией между брокерами GIOP - это аббревиатура от названия General Inter-ORB Protocol. Это протокол, в общем-то, абстрактный, в качестве его конкретной реализации обычно используется IIOP - Internet Inter-Orb Protocol, он основан на
TCP/IP. GIOP определяет общее представление данных (CDR) - синтаксис передачи IDL-определений в виде некоторого низкоуровневого представления, общего для брокеров. Определяет протокол также форматы сообщений GIOP, которыми обмениваются брокеры, и транспортные предположения, которые описывают транспортный слой коммуникации. Конечно, это всё абстракции, но довольно фундаментальные - спецификация GIOP в виде PDF-файла без картинок занимает больше десяти мегабайт.
Плюсы и минусы CORBA
Как и любая технология, CORBA имеет ряд плюсов - без их наличия не было бы необходимости её изобретать и использовать. Есть у неё, как и всего в этом мире, и минусы - прямое продолжение её плюсов. Так что давайте посмотрим, какие именно плюсы и какие именно минусы имеет CORBA.
Первый, самый очевидный плюс - я о нём упоминал уже, когда сравнивал CORBA и DCOM - это кросс-платформенность и языконезависимость этой технологии. Вы можете собрать множество программистов и написать распределённую систему, которая будет работать под несколькими ОС одновременно, и при этом каждый программист сможет создавать её составные части на том языке программирования, который знает лучше всего.
Второй плюс - объектная ориентированность CORBA. Потратив некоторое время на изучение разнообразной терминологии (а она у CORBA довольно-таки своеобразная) и на разбор того, как же это всё работает, вы можете сэкономить гораздо больше времени (и денег) на отладке готового продукта - согласитесь, оно того стоит.
Третий плюс состоит в полной независимости компонентов проектируемой и реализуемой системы. Это значит, что, во-первых, один объект не сможет испортить другой, так как CORBA полностью скрывает от одного из них детали реализации другого, а во-вторых, можно использовать уже готовые компоненты от сторонних разработчиков, что может оказаться значительно выгоднее разработки собственных.
Есть и другие достоинства. Система на основе CORBA получается весьма неплохо масштабируемой, чему способствует сама концепция архитектуры распределённых приложений в CORBA. Также система на основе CORBA имеет неплохо организованную и, что важно, в ряде ключевых моментов не слишком зависящую от прикладного программиста систему безопасности.
Среди минусов технологии CORBA традиционно называют отсутствие стандартизованной системы защиты распределённого приложения от сбоев, а также высокую ресурсоёмкость получаемых в результате систем. Но последнее, учитывая всё возрастающие мощности оборудования, можно отнести к разряду не самых существенных проблем. Многие также жалуются на перегруженность CORBA разными возможностями. Нужно понимать, что CORBA предназначена для построения таких систем, где может оказаться завтра полезной невостребованная ещё сегодня её возможность, а потому возможностей в данном случае много не бывает.
Резюме
Что ж, сказано было много, давайте подведём итоги. В целом, конечно, CORBA - технология очень и очень полезная, но у неё, как и у любой полезной технологии, есть своя чётко определённая область применения.
Многие говорят, что скоро из всех технологий распределённого взаимодействия останется только CORBA. Поскольку ей уже не так мало лет, можно с уверенностью сказать, что в обозримом будущем этого знаменательного события не предвидится. Если уж за столько лет CORBA не убила DCOM и сокеты, то и дальше вряд ли убьёт.
Но, тем не менее, перспективы у данной технологии самые что ни на есть замечательные. Стандарты и инструменты постоянно совершенствуются, а потому вы сильно повысите свой профессиональный уровень, если обстоятельно изучите CORBA.
© Вадим Станкевич
Для: www.kv.by
В начало