Служба именования 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 разных производителей.
Пример использования
Типичный сценарий работы со службой именования включает следующие шаги:
- Серверная часть:
- Создаёт объект CORBA (например, объект класса
BankAccount). - Получает ссылку на корневой контекст службы именования.
- Связывает имя (например,
"Bank/Account/12345") с объектной ссылкой через операциюbind.
- Клиентская часть:
- Получает ссылку на корневой контекст (тем же способом, что и сервер).
- Вызывает
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 →