DIIOP
DIIOP (Distributed Internet Inter-ORB Protocol, распределённый межсетевой протокол ORB) — это протокол прикладного уровня, предназначенный для взаимодействия между объектными запросами брокерами (ORB) в распределённых вычислительных средах. Он является расширением протокола IIOP (Internet Inter-ORB Protocol), который, в свою очередь, реализует спецификацию CORBA (Common Object Request Broker Architecture) для передачи вызовов удалённых процедур через сеть TCP/IP. DIIOP обеспечивает возможность динамического вызова методов удалённых объектов, когда интерфейс вызываемого объекта неизвестен на этапе компиляции клиентского приложения.
История и происхождение
Протокол DIIOP был разработан в рамках спецификации CORBA, созданной консорциумом Object Management Group (OMG). CORBA, появившаяся в начале 1990-х годов, ставила целью создание стандартизированной платформы для взаимодействия разнородных систем, написанных на разных языках программирования и работающих на разных операционных системах. Основой для удалённого вызова процедур в CORBA стал протокол GIOP (General Inter-ORB Protocol), который определяет общий формат сообщений и правила их обработки. Для передачи через TCP/IP был разработан IIOP, а DIIOP стал его надстройкой, реализующей динамический вызов.
Развитие DIIOP было связано с необходимостью гибкости в распределённых системах, где клиент не может заранее знать все возможные интерфейсы серверных объектов. В отличие от статического вызова (через прокси-объекты, сгенерированные на этапе компиляции), DIIOP позволяет клиенту конструировать запросы «на лету», используя информацию из репозитория интерфейсов (Interface Repository). Эта возможность была особенно востребована в крупных корпоративных информационных системах, где количество сервисов и их версий могло быть очень большим.
Архитектура и принцип работы
DIIOP функционирует на основе модели «клиент-сервер», где клиентское приложение инициирует запрос к удалённому объекту, размещённому на сервере. Протокол использует транспортный уровень TCP/IP для надёжной доставки сообщений. Сообщения DIIOP упаковываются в формат GIOP, который включает заголовок, содержащий версию протокола, флаги, длину сообщения и идентификатор операции.
Основные компоненты DIIOP:
- Динамический интерфейс вызова (DII, Dynamic Invocation Interface) — клиентская часть протокола, позволяющая создавать и отправлять запросы без предварительной компиляции заглушек (stubs). Клиент получает описание интерфейса удалённого объекта из репозитория интерфейсов (Interface Repository) и формирует запрос в виде структуры данных, содержащей имя метода, параметры и их типы.
- Динамический скелетный интерфейс (DSI, Dynamic Skeleton Interface) — серверная часть, позволяющая обрабатывать запросы, для которых не был сгенерирован статический скелет (skeleton). Сервер получает запрос, извлекает из него имя метода и параметры, а затем передаёт их соответствующему объекту для выполнения.
- Репозиторий интерфейсов (Interface Repository) — база данных, содержащая метаинформацию о всех зарегистрированных интерфейсах CORBA-объектов, включая их методы, параметры, типы данных и исключения. Клиент обращается к репозиторию для получения описания интерфейса перед вызовом.
Процесс вызова через DIIOP включает следующие шаги:
- Клиент получает ссылку на удалённый объект (IOR, Interoperable Object Reference), которая содержит адрес сервера, идентификатор объекта и информацию о протоколе.
- Клиент обращается к репозиторию интерфейсов для получения описания интерфейса объекта.
- Клиент формирует запрос DII, заполняя структуру данных с именем метода и аргументами.
- Запрос отправляется через IIOP на сервер, где DSI принимает его и передаёт объекту.
- Сервер выполняет метод и возвращает результат клиенту.
Отличия от IIOP
Основное отличие DIIOP от IIOP заключается в способе вызова методов. IIOP предполагает статический вызов, при котором клиент использует заранее сгенерированные прокси-объекты (stubs), скомпилированные из описания интерфейса на языке IDL (Interface Definition Language). Это обеспечивает высокую производительность и строгую типизацию, но требует, чтобы все интерфейсы были известны на этапе разработки.
DIIOP, напротив, не требует предварительной компиляции. Клиент может вызывать методы объектов, интерфейсы которых были добавлены в систему после развёртывания клиентского приложения. Это даёт большую гибкость, но увеличивает накладные расходы на выполнение запроса, так как требуется обращение к репозиторию интерфейсов и динамическое формирование сообщения.
Применение
DIIOP применялся в основном в крупных корпоративных информационных системах, где требовалась интеграция разнородных приложений, написанных на разных языках программирования (например, C++, Java, Ada). Он использовался в телекоммуникационных системах, банковских приложениях, системах управления производством и авиационных диспетчерских системах.
Одним из наиболее известных примеров использования DIIOP была платформа Java 2 Platform, Enterprise Edition (J2EE), где CORBA (включая DIIOP) служила основой для взаимодействия между компонентами EJB (Enterprise JavaBeans) и внешними системами. Также DIIOP применялся в продуктах компании Oracle (например, Oracle Application Server) и IBM (WebSphere Application Server) для обеспечения совместимости с унаследованными системами.
В России CORBA и DIIOP использовались в ряде государственных и корпоративных проектов, в частности, в системах автоматизации банковской деятельности и управления государственными информационными ресурсами. Однако с развитием веб-сервисов и REST-архитектуры популярность CORBA и DIIOP значительно снизилась.
Критика и упадок
Несмотря на свою гибкость, DIIOP имел ряд недостатков:
- Сложность реализации — динамический вызов требовал от разработчиков глубокого понимания архитектуры CORBA и специфики работы с репозиторием интерфейсов.
- Низкая производительность — обращение к репозиторию и динамическое формирование запросов приводили к значительным задержкам по сравнению со статическим вызовом.
- Проблемы с безопасностью — протокол не предусматривал встроенных механизмов шифрования и аутентификации, что требовало дополнительных решений (например, SSL/TLS).
- Отсутствие поддержки современных протоколов — с распространением HTTP/2, gRPC и REST, CORBA стала восприниматься как устаревшая технология.
К началу 2010-х годов большинство крупных вендоров (Oracle, IBM, Borland) прекратили активную поддержку CORBA в своих продуктах. В 2017 году OMG официально объявила о завершении разработки новых версий спецификации CORBA. Сегодня DIIOP практически не используется в новых проектах, хотя может встречаться в унаследованных (легаси) системах, особенно в авиационной и оборонной промышленности.
Интересные факты
- DIIOP был одним из первых протоколов, реализующих динамический вызов удалённых методов в распределённых объектных системах, что предвосхитило появление технологий, таких как SOAP и XML-RPC.
- В некоторых реализациях CORBA (например, в продуктах компании IONA Technologies) DIIOP использовался для поддержки «позднего связывания» (late binding), что позволяло подключать новые сервисы без перезапуска системы.
- Протокол DIIOP описан в спецификации CORBA 2.0 (1996 год) и последующих версиях, однако на практике его реализация была необязательной для сертификации CORBA-продуктов.
Источники
- Object Management Group. The Common Object Request Broker: Architecture and Specification. Version 3.3, 2012.
- Henning, M., Vinoski, S. Advanced CORBA Programming with C++. Addison-Wesley, 1999.
- Siegel, J. CORBA Fundamentals and Programming. John Wiley & Sons, 1996.
- Рекомендации по применению CORBA в государственных информационных системах. Министерство связи и массовых коммуникаций РФ, 2005.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →