Rambler's Top100 Service калинин.ru / программирование / сети /  << 14.01.01 >>

Обзор CORBA

CORBA (расшифровывается как Common Object Request Broker) это технология, которая позволяет рассматривать компоненты распределенной системы как объекты, отвечающие некоторым определенным интерфейсам. Эта технология дает возможность единым образом конструировать эти интерфейс при помощи специального декларативного языка IDL (Interface Definition Language). При этом интерфейс и его описание не зависит от используемого языка программирования, операционной системы или архитектуры процессора. Таким образом, один объект может быть написан на C++, другой --- на Java, и эта два объекта могут успешно друг с другом взаимодействовать и при этом не заботиться о формате данных (например, представления целых чисел или символов).

Эта возможность очень удобна для программистов, потому что используя такой подход можно конструировать взаимодействие между распределенными объектами при помощи тех же средств, которые применяются для описания взаимосвязей обычных объектов в пределах одной программы на одном компьютере. Популярные CASE-средства, такие как Rational Rose, WithClasses или Together, позволяют создавать UML-схемы и экспортировать их в описания интерфейсов IDL.

Основой технологии CORBA является ORB (Object Request Broker) --- нечто, что позволяет передавать сообщения от одного объекта к другому. Это "нечто" может быть реализовано в виде библиотеки, специального сетевого сервиса, объектно-ориентированной СУБД или уже быть включенным в операционную систему. ORB дает возможность не задумываться объектам, которых он обслуживает, о том, где находятся другие объекты, которым передаются сообщения. Кроме того, он скрывает все детали реализации объектов, оставляя снаружи только их интерфейсы.

Под названием "реализация CORBA", по сути, понимается как раз наличие конкретного ORB и средств для общения с ним. Кроме того, в реализацию CORBA входят дополнительные утилиты, такие как транслятор интерфейса, написанного на IDL, в код, который будет обеспечивать поддержку сетевых средств CORBA в конкретном языке программирования (например, Java или C++). Таким образом, один ORB обеспечивает средства для общения объектов, написанных при помощи средств, с ним поставляемым.

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

Каждый объект определяется специальной ссылкой на него. Эта сслыка служит аналогом указателя в терминологии обычных языков программирования. Для того, чтобы получить доступ к некоторому объекту, сначала необходимо каким-то образом узнать ссылку на него. Удобным является то, что существуют средства преобразования ссылки в строку и обратно. Подобная строка едина для всех ORB и позволяет уникальным образом идентифицировать объект. Опять же, было бы не особенно удобным пользоваться этой услугой, если бы не существовало средств для получения ссылок на объекты через их наименования, интерфейсы и т.п.

Одной из самых главных черт технологии CORBA является полное скрытие деталей реализации. Об этом уже написано выше, но хотелось бы еще раз подчеркнуть это свойство. Используя CORBA, пользователь некоторого объекта видит перед собой только описание интерфейсов объекта в виде IDL, например:

interface Random {

    // return non-negative long 
    // integer in the interval [0, 2^31)
    long lrand48();

    // return signed long integer 
    // in the interval [-2^31, 2^31)
    long mrand48();
};

Это реальный интерфейс демонстрационного объекта, доступный по адресу random.org. Объект идентифицируется строкой

IOR:000000000000000f49444c3a52616e646f6d3
a312e300000000000010000000000000050000100
0000000016706c616e7874792e6473672e63732e7
463642e69650006220000002c3a5c706c616e7874
792e6473672e63732e7463642e69653a52616e646
f6d3a303a3a49523a52616e646f6d00

и позволяет получить случайное число. Смотря на эти данные, пользователь объекта ничего не знает о том, как устроен генератор случайных чисел, на каком языке программирования он написан и где находится. Но после некоторых предварительных действий в своей программе (инициализация ORB) он может использовать этот генератор случайных чисел как обычный объект, который написан на используемом языке программирования:

for(int i = 0; i < 10; i++)
   printf("%li\n", obj->lrand48();

Вообще говоря, клиент может вообще сначала не знать интерфейса объекта, который пытается использовать. Средствами ORB можно узнать этот интерфейс во время выполнения (без IDL) и сгенерировать запрос к объекту на основе его интерфейса.

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

Но... как обычно, и у этой технологии есть свои недостатки. Прежде всего, за все удобства надо расплачиваться. Использование CORBA более ресурсоемко, чем использование менее "удобных" технологий, например, интерфейса сокетов. Кроме того, как мне кажется, CORBA становится слишком перегружена заложенными в нее возможностями. Понятно, что большая часть задач решается при помощи CORBA без использования всех ее возможностей, но их количество ведет к усложнению реализаций и, как следствие, к большему количеству ошибок. В дополнение еще можно сказать о том, что CORBA относительно молодая (относительно того же интерфейса сокетов), поэтому значительно менее "обкатанная" технология.

Резюме

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


Версия для печати


  Ссылки по теме:
http://www.corba.org
   Официальный сайт CORBA.
http://www.omg.org
   Официальный сайт OMG.
http://www.mico.org
   Официальный сайт MICO (Mico Is COrba), реализация CORBA 2.3 для C++, распространяемая по лицензии GPL. Очень хорошая документация, содержащая подробно прокомментированные примеры; рекомендую знакомиться с CORBA именно по этой документации.
http://www.cetus-links.org/oo_
   Коллекция ссылок по CORBA на сайте Cetus links.
http://random.org
   Генератор "настоящих" случайных чисел.
  Рядом в разделе:
События ядра в FreeBSD. (16.07.01)
   Обработка большого количества сетевых соединений всегда затруднительна. Мало того, не существует стандартных решений, подходящих для проблем любого вида, в которых возникает...   >>>>
"Тонкий" клиент (19.12.00)
   В предыдущей заметке Gregory Liokumovich рассказывал о применении событийной модели WinSock для программирования сетевых приложений. На самом деле, как мне кажется,...   >>>>
  Рядом по дате:
Опыт, сын ошибок трудных... (22.01.01)
   Не умеют студенты программировать. Не все, конечно же, бывают и исключения, но "ан масс" --- не умеют. Можно обвинять в этом...   >>>>
Click here to begin (07.01.01)
   Волею судеб мне приходится работать с различными операционными системами и пользовательскими оболочками. И с некоторых пор мне кажется, что интерфейс Windows,...   >>>>
  Содержание:
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
   C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Просто так
Студенческое
Туризм
  Байки
Фотографии
Комментарии
   Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Благодарности
Форум
Хронология
 
  В этом разделе:
События ядра в FreeBSD. (16.07.01)
   Обработка большого количества сетевых соединений всегда затруднительна. Мало того, не существует стандартных решений, подходящих для проблем любого вида, в которых возникает...   >>>>
Обзор CORBA (14.01.01)
   CORBA (расшифровывается как Common Object Request Broker) это технология, которая позволяет рассматривать компоненты распределенной системы как объекты, отвечающие некоторым определенным интерфейсам....   >>>>
"Тонкий" клиент (19.12.00)
   В предыдущей заметке Gregory Liokumovich рассказывал о применении событийной модели WinSock для программирования сетевых приложений. На самом деле, как мне кажется,...   >>>>
Событийная модель в WinSock (12.12.00)
   Автором этого текста является Gregory Liokumovich ( ). Он любезно прислал мне этот текст, связанный с программированием сетей при помощи интерфейса...   >>>>
Неблокирующий connect() (01.12.00)
   В продолжение темы о замене блокирующего вызова , хочется рассказать о другой функции интерфейса сокетов, . Она имеет следующий прототип: int...   >>>>
Определение ip-адреса по имени хоста, adns (05.11.00)
   Есть такой, характерный для организации "традиционного" UNIX'а, системный вызов под названием : struct hostent * gethostbyname(const char *name); Традиционен он тем,...   >>>>
lingering close (29.10.00)
   Когда программа выкачивает один файл с удаленного сервера с использованием протокола TCP, а после этого сразу же "отваливается", то проблем, скорее...   >>>>
Содержание раздела полностью...
   Примерно в тоже время
Опыт, сын ошибок трудных... (22.01.01)
   Не умеют студенты программировать. Не все, конечно же, бывают и исключения, но "ан масс" --- не умеют. Можно обвинять в этом...   >>>>
Click here to begin (07.01.01)
   Волею судеб мне приходится работать с различными операционными системами и пользовательскими оболочками. И с некоторых пор мне кажется, что интерфейс Windows,...   >>>>
Хронология полностью...
   Содержание
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
  C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Туризм
  Байки
Фотографии
Комментарии
  Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Студенческое
Просто так
Благодарности
Форум
Хронология
© 2000-2008, Andrey L. Kalinin
mailto:andrey@kalinin.ru
Rambler's Top100