Открыть сервис

Служба именования CORBA

Служба именования CORBA (англ. CORBA Naming Service) — это стандартный сервис распределённой вычислительной среды CORBA (Common Object Request Broker Architecture), предназначенный для хранения и предоставления доступа к именованным объектным ссылкам. Она реализует механизм разрешения имён в объектные ссылки, позволяя клиентским приложениям находить и вызывать удалённые объекты по логическим именам, а не по физическим адресам или сетевым координатам.

Назначение и принцип работы

В распределённых системах, построенных на основе CORBA, объекты могут быть расположены на различных узлах сети. Для их вызова клиенту необходима объектная ссылка (IOR — Interoperable Object Reference), которая содержит информацию о местонахождении объекта, его типе и протоколах взаимодействия. Служба именования решает задачу связывания удобочитаемых имён (например, «Bank/Account/12345») с соответствующими IOR. Клиент обращается к службе с запросом по имени и получает ссылку на объект, после чего может напрямую взаимодействовать с ним через ORB (Object Request Broker).

Служба именования CORBA является частью спецификации Object Management Group (OMG) и входит в набор стандартных сервисов CORBA (CORBAservices). Она не зависит от конкретной реализации ORB и может быть развёрнута на любом языке программирования, поддерживающем CORBA.

Структура и компоненты

Именной контекст (Naming Context)

Основным элементом службы является именной контекст — объект CORBA, который содержит набор пар «имя — объект». Имя в CORBA представляет собой последовательность компонентов (NameComponent), каждый из которых состоит из двух строк: идентификатора (id) и вида (kind). Поле «вид» позволяет различать объекты с одинаковыми идентификаторами, но разными типами (например, «Account» и «Account/description»). Имена могут быть составными: последовательность компонентов образует иерархический путь, аналогичный файловой системе (например, /org/example/Service).

Граф имён

Служба именования организует имена в виде дерева (графа), где узлами являются именные контексты, а листьями — объектные ссылки. Каждый контекст может содержать как ссылки на объекты, так и вложенные подконтексты. Такая структура позволяет создавать масштабируемые иерархические пространства имён для крупных распределённых систем.

Операции

Служба предоставляет основные операции:

  • bind(name, obj) — связывает имя с объектной ссылкой.
  • rebind(name, obj) — заменяет существующую привязку.
  • unbind(name) — удаляет привязку.
  • resolve(name) — возвращает объектную ссылку по имени.
  • list(n) — перечисляет привязки в контексте (с ограничением на количество возвращаемых записей).

Все операции являются атомарными с точки зрения клиента, но спецификация не гарантирует транзакционности на уровне распределённой службы.

Реализация и протоколы

Служба именования CORBA реализуется как обычный CORBA-объект, доступный через ORB. Для её использования клиент должен получить начальную ссылку на корневой контекст. Способ получения этой ссылки не стандартизирован — обычно она передаётся через файл, командную строку, или публикуется в специальном файле (например, ior.txt). В некоторых реализациях (например, в ORBacus или JacORB) используется встроенный механизм обнаружения службы.

Служба поддерживает протокол GIOP (General Inter-ORB Protocol) и его реализацию IIOP (Internet Inter-ORB Protocol), что обеспечивает взаимодействие между ORB разных производителей.

Пример использования

Типичный сценарий работы со службой именования включает следующие шаги:

  1. Серверная часть:
  • Создаёт объект CORBA (например, объект класса BankAccount).
  • Получает ссылку на корневой контекст службы именования.
  • Связывает имя (например, "Bank/Account/12345") с объектной ссылкой через операцию bind.
  1. Клиентская часть:
  • Получает ссылку на корневой контекст (тем же способом, что и сервер).
  • Вызывает resolve с тем же именем.
  • Получает объектную ссылку и вызывает методы удалённого объекта.

Пример на языке C++ (с использованием псевдокода):

```cpp // Сервер CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); CORBA::Object_var obj = orb->resolve_initial_references("NameService"); CosNaming::NamingContext_var root = CosNaming::NamingContext::_narrow(obj); CosNaming::Name name; name.length(1); name[0].id = "MyObject"; root->bind(name, myObject);

// Клиент CORBA::Object_var obj = root->resolve(name); MyObject_var myObj = MyObject::_narrow(obj); myObj->someMethod(); ```

Сравнение с другими службами

Служба именования CORBA выполняет функции, аналогичные DNS в интернете или реестру в Java RMI. Однако она более специализирована: работает исключительно с CORBA-объектами, поддерживает иерархические имена и не зависит от транспортного уровня. В отличие от LDAP, служба именования CORBA не предназначена для хранения произвольных атрибутов — она хранит только пары «имя — объектная ссылка».

Критика и ограничения

Несмотря на стандартизацию, служба именования CORBA имеет ряд недостатков:

  • Отсутствие единой глобальной схемы адресации. В отличие от DNS, не существует единого корневого контекста для всех CORBA-систем. Каждое приложение или организация развёртывает свою собственную службу.
  • Сложность начальной настройки. Клиент и сервер должны заранее знать, как получить ссылку на корневой контекст, что создаёт проблему «курицы и яйца».
  • Низкая производительность при большом количестве объектов. Иерархический поиск и операции с вложенными контекстами могут быть медленными.
  • Отсутствие встроенной поддержки безопасности. Служба не предоставляет механизмов аутентификации или авторизации — они реализуются на уровне ORB или приложения.

Применение

Служба именования CORBA широко использовалась в корпоративных распределённых системах 1990-х — 2000-х годов, особенно в телекоммуникациях, банковской сфере и промышленной автоматизации. С развитием веб-сервисов, REST и микросервисной архитектуры её популярность снизилась, однако она продолжает применяться в унаследованных (legacy) системах и в некоторых нишевых областях, где требуется высокая надёжность и стандартизация.

Источники

  • Object Management Group. CORBA Naming Service Specification, Version 1.2, 2002.
  • Henning, M., Vinoski, S. Advanced CORBA Programming with C++. Addison-Wesley, 1999.
  • Siegel, J. CORBA 3 Fundamentals and Programming. John Wiley & Sons, 2000.
  • Документация по реализации ORBacus (Iona Technologies) и JacORB.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →