Распределенная объектная коммуникация - Distributed object communication
В распределенной вычислительной среде, распределенный объект связь осуществляет связь между распределенными объектами . Основная роль - разрешить объектам доступ к данным и вызывать методы удаленных объектов (объектов, находящихся в нелокальном пространстве памяти ). Вызов метода удаленного объекта известен как вызов удаленного метода ( RMI ) или удаленный вызов и является объектно-ориентированным программным аналогом удаленного вызова процедуры (RPC).
Заготовки и скелеты классов
Широко используемый подход к реализации канала связи реализуется с помощью заглушек и каркасов . Это сгенерированные объекты, структура и поведение которых зависят от выбранного протокола связи, но в целом предоставляют дополнительные функции, обеспечивающие надежную связь по сети.
В RMI заглушка (которая является битом на клиенте) определяется программистом как интерфейс . Rmic (компилятор rmi) использует это для создания заглушки класса. Заглушка выполняет проверку типа. Каркас определяется в классе, который реализует заглушку интерфейса.
Когда вызывающий объект хочет выполнить удаленный вызов вызываемого объекта, он делегирует запросы своей заглушке, которая инициирует связь с удаленным каркасом . Следовательно, заглушка передает аргументы вызывающего абонента по сети в каркас сервера. Затем скелет передает полученные данные вызываемому объекту, ожидает ответа и возвращает результат клиентской заглушке. Обратите внимание, что между вызывающим и вызываемым объектом нет прямой связи.
Более подробно общение состоит из нескольких этапов:
- вызывающий вызывает локальную процедуру, реализованную заглушкой
- stub marshalls тип вызова и входные аргументы в сообщение запроса
- клиентская заглушка отправляет сообщение по сети на сервер и блокирует текущий поток выполнения
- скелет сервера получает сообщение запроса из сети
- скелет распаковывает тип вызова из сообщения запроса и ищет процедуру на вызываемом объекте
- скелет неупорядочивает аргументы процедуры
- скелет выполняет процедуру на вызываемом объекте
- вызываемый объект выполняет вычисление и возвращает результат
- скелет упаковывает выходные аргументы в ответное сообщение
- скелет отправляет сообщение по сети обратно клиенту
- клиентская заглушка получает ответное сообщение из сети
- заглушка распаковывает выходные аргументы из сообщения
- заглушка передает выходные аргументы вызывающей стороне, освобождает поток выполнения, и вызывающая сторона продолжает выполнение
Преимущество этой архитектуры заключается в том, что ни вызывающий, ни вызываемый объект не должны реализовывать логику, связанную с сетью. Эта функция, обеспечивающая надежный канал связи по сети, была перенесена на тупиковый и скелетный уровни.
Заглушка
Объект на стороне клиента, участвующий в обмене данными между распределенными объектами, известен как заглушка или прокси-сервер и является примером прокси-объекта .
Заглушка действует как шлюз для объектов на стороне клиента и всех исходящих запросов к объектам на стороне сервера, которые проходят через него. Заглушка обертывает функциональность клиентского объекта и, добавляя сетевую логику, обеспечивает надежный канал связи между клиентом и сервером. Заглушка может быть написана вручную или сгенерирована автоматически в зависимости от выбранного протокола связи.
Заглушка отвечает за:
- инициирование связи с каркасом сервера
- перевод вызовов от вызывающего объекта
- сортировка параметров
- информирование скелета о том, что вызов должен быть вызван
- передача аргументов в каркас по сети
- демаршалинг ответа от скелета
- информирование вызывающего абонента о завершении разговора
Скелет
Объект на стороне сервера, участвующий в обмене данными между распределенными объектами, известен как скелет (или заглушка; термин здесь не используется).
Каркас действует как шлюз для объектов на стороне сервера, и все входящие запросы клиентов маршрутизируются через него. Каркас обертывает функциональность объекта сервера и предоставляет его клиентам, кроме того, добавляя сетевую логику, обеспечивает надежный канал связи между клиентами и сервером. Скелеты могут быть написаны вручную или сгенерированы автоматически в зависимости от выбранного протокола связи.
Скелет отвечает за:
- перевод входящих данных из заглушки в правильные вызовы серверных объектов
- демаршалинг аргументов из полученных данных
- передача аргументов серверным объектам
- маршалинг возвращаемых значений от серверных объектов
- передача значений обратно в клиентскую заглушку по сети
Протоколы с использованием тупикового / каркасного подхода
- Переносимые распределенные объекты (PDO) - Objective-C
- Общая архитектура брокера объектных запросов (CORBA) - межъязыковая
- Вызов удаленного метода Java (Java RMI) - Java
-
Распределенная компонентная объектная модель (DCOM) - Microsoft, межъязыковая
- (обратите внимание, что заглушка называется «прокси», а скелет - «заглушкой»)
- .NET Remoting - Microsoft, межъязыковая
- DDObjects - Borland Delphi
- Распределенный Ruby (DRb) - Ruby
Смотрите также
Рекомендации
- Плашил, Франтишек и Сталь, Михаил. "Архитектурный вид распределенных объектов и компонентов в CORBA, Java RMI и COM / DCOM" , Software Concepts & Tools (том 19, № 1) , январь 1998 г.
- Друщель, Питер "Построение распределенной программы"
- Фарли, Джим. Распределенные вычисления Java , О'Рейли, январь 1998 г.
- Исследовательские статьи , Исследовательская группа распределенных систем, Карлов университет в Праге