Распределенные системы (обзор технологии DCOM) DCOM DCOM (Distributed Component Object Model) – распределенная компонентная объектная модель. Является набором концепций и программных интерфейсов, разработанных компанией Microsoft, посредством которых клиент может запросить тот или иной сервис у серверного объекта, расположенного на другом компьютере в сети. DCOM основан на компонентной объектной модели (COM). COM COM (Component Object Model) – объектно-ориентированная программная модель компании Microsoft, определяющая методы взаимодействия объектов с приложением. В модели COM клиентское программное обеспечение получает доступ к объекту посредством указателя на интерфейс. Содержащего таблицу указателей на методы интерфейса. Интерфейсы в COM Указатель на интерфейс - это указатель на указатель на массив указателей на функции интерфейса Пример описания интерфейса на midl [ uuid(F3792A83-69C9-11D2-AC8C-525400DDA17A), helpstring("Этот интерфейс определяет методы работы со стеком.") ] interface IStack : IUnknown { HRESULT Push([in] VARIANT Val); HRESULT Pop([out, retval] VARIANT *pVal); } Каждый интерфейс имеет уникальный идентификатор IID (interface identifier) Все объекты реализуют стандартный интерфейс IUnknown Модель клиент-серверного взаимодействия в COM Создание объекта в COM посредством фабрики классов COM сервера В СОМ существует два типа серверов: - dll based (основанные на динамических библиотеках) – сервер реализуется в виде модуля, который может быть загружен клиентом и выполняется в адресном пространстве клиента - exe based (основанные на выполнимых модулях) – реализуются в виде самостоятельных исполнимых модулей. Общая структура сервера COM Обеспечение прозрачности местоположения посредством использования заглушек Компоненты распределенной архитектуры COM Диспетчер управления службами Диспетчер управления службами (Service Control Manager, SCM) обеспечивает наличие и готовность сервера к обслуживанию клиентских запросов в случае их возникновения. Когда клиент выполняет запрос на создание определенного объекта, библиотека COM формирует запрос к локальному SCM на поиск и запуск требуемого сервера и возврат фабрики классов. После этого библиотека СОМ или клиент могут запросить создание объекта посредством фабрики классов Диспетчер управления службами Для внутри процессных (in-process) серверов SCM возвращает путь к DLL, содержащей реализацию объекта сервера. После чего СОМ библиотека загружает ее и запрашивает указатель на интерфейс фабрики классов. Для локальных серверов SCM запускает исполнимый модуль, содержащий объект сервера. Модуль регистрирует указатель на интерфейс фабрики классов, который возвращается библиотеке СОМ Для удаленных серверов Локальный SCM соединяется с SCM на соответствующем компьютере и переадресует ему запрос. Удаленный SCM запускает сервер, формирует RPC соединение, соответствующее фабрике классов сервера и возвращает его локальному SCM. Локальный SCM передает его библиотеке COM, которая формирует заместителя (proxy), передающего запросы к удаленному SCM посредством RPC. Функционирование SCM Время жизни объектов В COM/DCOM объекты уничтожаются, когда на них не остается ссылок у клиентов. Подсчет ссылок производится посредством вызова методов addRef() и Release() интерфейса IUnknown. Следствием этого является невозможность хранения уникального идентификатора объекта. Потому обращение к объектам производится посредством ссылки на интерфейс. Сравнение DCOM и CORBA (ч.1) CORBA + кросплатформенность + бОльшая гибкость при создании и управлении объектами + лучшая масштабируемость + простота настройки для работы в сети Интернет COM/DCOM + не требуется дополнительное ПО для ОС Windows + возможность взаимодействия с множеством реализованных приложений (например MS Office) Сравнение DCOM и CORBA (ч.2) DCOM CORBA Поддержка множественных интерфейсов для объектов Поддержка множественного наследования на уровне интерфейсов Каждый объект реализует IUnknown Каждый интерфейс наследуется от CORBA.Object Идентифицирует объект на сервере посредством указателя на интерфейс, который используется как дескриптор объекта на время выполнения Идентифицирует объект посредством объектных ссылок. Объектные ссылки могут быть сохранены в строку, которая может быть преобразована в объектную ссылку Сравнение DCOM и CORBA (ч.3) DCOM CORBA Идентифицирует интерфейс с помощью IID Идентифицирует интерфейс с помощью имени интерфейса Использует протокол Object Remote Procedure Call (ORPC) для удаленных вызовов Использует протокол Internet Inter-ORB Protocol(IIOP) Маппинг имени объекта и его реализации описывается в реестре Маппинг имени объекта и его реализации описывается в репозитории реализаций Сравнение DCOM и CORBA (ч.4) DCOM Информация о типах для различных методов содержится в библиотеке типов (type library) CORBA Информация о типах для различных методов содержится в репозитории интерфейсов Поиском реализации объекта Поиском реализации объекта занимается Service Control занимается Object Request Manager (SCM) Broker (ORB) За активацию реализации объектов отвечает Service Control Manager (SCM) За активацию реализации объектов отвечает объектный адаптер Сравнение DCOM и CORBA (ч.5) DCOM CORBA Все параметры передаваемые между клиентом и серверным объектом задаются в определении интерфейса. В зависимости от определения могут передаваться по ссылке или по значению При передаче параметров между клиентом и удаленным объектом все интерфейсные типы передаются по ссылке, все остальные объекты – по значению (включая сложные типы данных) Каждый вызов возвращает структуру типа HRESULT, в которой содержится возвращаемый статус для более полной обработки искл. ситуаций используются объекты Error. При этом сервер должен реализовать интерфейс ISupportErrorInfo Обработка искл. ситуаций производится с помощью объектов Exception. Когда удаленный объект создает объект Exception, ORB прозрачно доставляет его клиенту.