Распределенная объектная связь
В распределенной вычислительной среде связь распределенных объектов реализует связь между распределенными объектами . Основная роль — предоставить объектам доступ к данным и вызывать методы удаленных объектов (объектов, находящихся в нелокальном пространстве памяти ). Вызов метода удаленного объекта известен как удаленный вызов метода ( RMI ) или удаленный вызов и является объектно-ориентированным программным аналогом удаленного вызова процедур (RPC).
Заглушки классов и скелеты
[ редактировать ]Широко используемый подход к реализации канала связи реализуется с помощью заглушек и скелетонов . Они представляют собой генерируемые объекты, структура и поведение которых зависят от выбранного протокола связи, но в целом предоставляют дополнительную функциональность, обеспечивающую надежную связь по сети.
В RMI заглушка (которая является битом на клиенте) определяется программистом как интерфейс . rmic (компилятор rmi) использует это для создания заглушки класса. Заглушка выполняет проверку типа. Скелет определен в классе, который реализует заглушку интерфейса. [1]
Когда вызывающая сторона хочет выполнить удаленный вызов вызываемого объекта, она делегирует запросы к своей заглушке , которая инициирует связь с удаленным скелетом . Следовательно, заглушка передает аргументы вызывающей стороны по сети скелету сервера. Затем скелет передает полученные данные вызываемому объекту, ждет ответа и возвращает результат в клиентскую заглушку. Обратите внимание, что между вызывающим объектом и вызываемым объектом нет прямой связи.
Более подробно общение состоит из нескольких этапов:
- вызывающий абонент вызывает локальную процедуру, реализованную заглушкой
- заглушек тип вызова маршалов- и входные аргументы в сообщение запроса
- клиентская заглушка отправляет сообщение по сети на сервер и блокирует текущий поток выполнения
- скелет сервера получает сообщение запроса из сети
- скелет распаковывает тип вызова из сообщения запроса и ищет процедуру на вызываемом объекте
- скелет демаршалла аргументов процедуры
- скелет выполняет процедуру над вызываемым объектом
- вызываемый объект выполняет вычисление и возвращает результат
- скелет упаковывает выходные аргументы в ответное сообщение
- скелет отправляет сообщение по сети обратно клиенту
- клиентская заглушка получает ответное сообщение из сети
- заглушка распаковывает выходные аргументы из сообщения
- заглушка передает выходные аргументы вызывающему объекту, освобождает поток выполнения , а затем вызывающий объект продолжает выполнение.
Преимущество этой архитектуры заключается в том, что ни вызывающий объект, ни вызываемый объект не должны реализовывать логику, связанную с сетью. Эта функциональность, обеспечивающая надежный канал связи в сети, перенесена на уровень заглушки и скелета .
Заглушка
[ редактировать ]Объект на стороне клиента, участвующий в обмене данными с распределенными объектами, известен как заглушка или прокси-сервер и является примером прокси-объекта .
Заглушка действует как шлюз для объектов на стороне клиента и всех исходящих запросов к объектам на стороне сервера, которые маршрутизируются через нее. Заглушка реализует функциональность клиентского объекта и за счет добавления сетевой логики обеспечивает надежный канал связи между клиентом и сервером. Заглушка может быть написана вручную или сгенерирована автоматически в зависимости от выбранного протокола связи.
Заглушка отвечает за:
- инициирование связи со скелетом сервера
- перевод вызовов от объекта вызывающего абонента
- сортировка параметров
- информирование скелета о том, что вызов должен быть вызван
- передача аргументов скелету по сети
- демаршалинг ответа от скелета
- информирование вызывающего абонента о завершении разговора
Скелет
[ редактировать ]Объект на стороне сервера, участвующий во взаимодействии распределенных объектов, известен как скелет (или заглушка; термин здесь избегается).
Скелет действует как шлюз для объектов на стороне сервера, и все входящие запросы клиентов направляются через него. Скелет оборачивает функциональность объекта сервера и предоставляет ее клиентам, более того, добавление сетевой логики обеспечивает надежный канал связи между клиентами и сервером. Скелеты могут быть написаны вручную или сгенерированы автоматически в зависимости от выбранного протокола связи.
Скелет отвечает за:
- перевод входящих данных из заглушки в правильные ап-вызовы к объектам сервера
- демаршаллинг аргументов из полученных данных
- передача аргументов объектам сервера
- маршалинг возвращаемых значений из серверных объектов
- клиента передача значений обратно в заглушку по сети
Протоколы, использующие подход «заглушка/скелет»
[ редактировать ]- Переносимые распределенные объекты (PDO) — Objective-C
- Общая архитектура брокера объектных запросов (CORBA) – межъязыковая
- Удаленный вызов метода Java (Java RMI) – Java
- Объектная модель распределенных компонентов (DCOM) – Microsoft, межъязыковая версия
- (обратите внимание, что заглушка называется «прокси», а скелет — «заглушкой» [2] )
- .NET Remoting – Microsoft, межъязыковый интерфейс
- DDObjects — Borland Delphi
- Распределенный Ruby (DRb) – Ruby
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Введение в удаленный вызов методов Java (RMI)» . www-itec.uni-klu.ac.at . Архивировано из оригинала 26 марта 2002 г.
- ^ MSDN: Подробности сортировки.
- Плашил Франтишек и Сталь Михаил. «Архитектурный взгляд на распределенные объекты и компоненты в CORBA, Java RMI и COM/DCOM». Архивировано 24 июня 2007 г. в Wayback Machine , Software Concepts & Tools (том 19, № 1) , январь 1998 г.
- Друшель, Питер «Создание распределенных программ». Архивировано 4 марта 2016 г. в Wayback Machine.
- Фарли, Джим. Распределенные вычисления на Java , О'Рейли, январь 1998 г.
- Исследовательские статьи, заархивированные 12 февраля 2008 г. в Wayback Machine , Группа исследования распределенных систем, Карлов университет в Праге.