
- •Конспект лекций модуля № 4 "Целевой курс" дисциплины "Распределенные программные системы и технологии" Тема 11. Системы параллельных вычислений
- •11.1.1. Общие понятия
- •11.1.2. Функции управления задачами
- •11.1.3. Взаимодействие задач
- •11.1.3.1 Типы взаимодействия
- •11.1.3.2 Выполнение взаимодействия
- •11.1.4. Синхронизация работы задач
- •11.2.1. Общие сведения
- •11.2.2. Основные понятия
- •11.2.3. Функции mpi
- •11.2.4. Функции управления процессами
- •11.2.3. Взаимодействие процессов
- •11.2.3.1 Прием/передача сообщений с блокировкой
- •11.2.3.2 Прием/передача сообщений без блокировки
- •11.2.3.3 Объединение запросов на взаимодействие
- •11.2.3.4 Совмещенные прием/передача сообщений
- •11.2.3.5 Коллективные взаимодействия процессов
- •12.1.2. Уровень заглушки и скелета
- •12.1.3. Уровень удаленных ссылок
- •12.1.4. Транспортный уровень
- •12.1.2. Взаимодействие
- •2.1.3 Идентификация объектов
- •2.1.4. Синхронизация вызовов методов
- •2.1.5. Безопасность
- •Тема 13. Сервисно-ориетированные архитектуры
- •13.1.1. Стандарт Web - сервисов
- •13.1.2. Взаимодействие Web-служб
- •13.1.3. Идентификация служб
- •13.1.5. Отказоустойчивость Web-служб
- •13.1.6. Безопасность Web-служб
- •13.2. Сервисно-ориентированная архитектура
- •13.2.1. Концепция soa
- •13.2.2. Характеристики соа
- •13.2.3. Компоненты соа
- •13.3. Оркестровка Web - сервисов
- •13.3.1. Основные понятия
- •13.3.2. Организация основанная на потоках работ
- •13.3.3. Язык bpel
- •Тема 14. Многоагентные системы
- •14.1. Определение агента
- •14.2. Применение агентов
- •14.2. Стандарты технологии мобильных агентов
- •14.2.1. Стандарт masif
- •14.2.2. Стандарт fipa
- •14.3. Языки взаимодействия агентов.
- •Тема 15. Распределенные базы данных
- •15.1. Определение Дэйта.
- •15.2. Свойства распределенных бд
- •15.2.1 Целостность данных
- •15.2.2 Прозрачность расположения
- •15.2.3 Обработка распределенных запросов
- •15.2.4 Межоперабельность
- •15.2.5 Технология тиражирования данных
- •15.2.6 Архитектура "клиент-сервер"
- •15.3.1 Концепция ejb
- •15.3.2. Компоненты ejb
- •15.3.3 Этапы создания ejb-проектов
- •Тема 16. Аппаратное обеспечение распределенных встроенных систем
- •16.1. Перспективы развития и области применения распределенных встроенных систем
- •16.2. Функциональная классификация микропроцессоров
- •16.2.1. Процессоры общего назначения и специализированные процессоры
- •16.2.2. Микроконтроллеры
- •16.2.3. Процессоры цифровой обработки сигналов
- •16.2.4. Конфигурируемые процессоры и перепрограммируемы системы на кристалле
- •16.2.5. Эволюция микропроцессоров
12.1.2. Уровень заглушки и скелета
Уровень заглушки и скелета RMI расположен непосредственно перед разработчиком Java. На этом уровне RMI использует прокси-модель проектирования. В прокси-модели объект одного контекста представляется другим (прокси-объектом) в отдельном контексте. Прокси-объект знает, как направлять вызовы методов между этими объектами. На следующей диаграмме классов показана прокси-модель.
В прокси-модели, используемой в RMI, роль прокси выполняет класс заглушки, а роль RealSubject выполняет класс, реализующий удаленную службу.
Скелет является вспомогательным классом, который создается для использования RMI. Скелет понимает, как взаимодействовать с заглушкой при RMI-соединении. Скелет поддерживает общение с заглушкой; он читает параметры для вызова метода из соединения, производит вызов объекта, реализующего удаленную службу, принимает возвращаемое значение и записывает его обратно в заглушку.
В реализации RMI Java 2 SDK новый протокол связи сделал классы скелетов не нужными. RMI использует отражение для установления соединения с объектом удаленной службы. Вы должны использовать классы и объекты скелетов только в JDK 1.1 и совместимых с ним реализациях систем.
12.1.3. Уровень удаленных ссылок
Уровни удаленных ссылок определяют и поддерживают семантику вызовов соединения RMI. Этот уровень предоставляет объект RemoteRef, который обеспечивает соединение с объектами, реализующими удаленные службы.
Объекты заглушки используют метод invoke() в объекте RemoteRef для направления вызова метода. Объект RemoteRef понимает семантику вызова удаленных служб.
Реализация RMI в JDK 1.1 обеспечивает только один способ соединения клиентов с реализациями удаленных служб: однонаправленное соединение типа точка-точка. Перед тем, как клиент сможет использовать удаленную службу, экземпляр объекта, реализующего ее, должен быть создан на сервере и экспортирован в систему RMI. (Если это основная служба, она также должна быть поименована и зарегистрирована в реестре RMI).
Реализация RMI в Java 2 SDK добавляет новую семантику для соединения клиент-сервер. В этой версии RMI поддерживает способные к активизации удаленные объекты. Когда производится вызов метода прокси для такого объекта, RMI определяет, находится ли объект, реализующий удаленную службу, в пассивном состоянии. Если да, то RMI создаст экземпляр объекта и восстановит его состояние из дискового файла. Как только объект активизируется в памяти, он начинает вести себя так же, как и объект, реализующий удаленную службу JDK 1.1.
Доступны и другие типы семантики соединений. Например, в случае широковещательного соединения, один прокси-объект может передать запрос метода нескольким реализациям одновременно и принять первый ответ (это уменьшает время отклика и, возможно, повышает доступность объекта). В будущем Sun возможно добавит дополнительные типы семантики в RMI.
12.1.4. Транспортный уровень
Транспортный уровень осуществляет соединение между различными JVM. Все соединения представляют собой основанные на потоках сетевые соединения, использующие TCP/IP.
Даже если две JVM работают на одном и том же физическом компьютере, они соединяются через стек сетевых протоколов TCP/IP. (Вот почему вы должны иметь действующую конфигурацию TCP/IP на вашем компьютере для выполнения упражнений этого курса). На следующей диаграмме показаны TCP/IP соединения между разными JVM.
Как вы знаете, протокол TCP/IP обеспечивает постоянное, основанное на потоках, соединение между двумя машинами. Этот соединение основано на адресе IP и номере порта. Обычно вместо IP-адреса используется имя DNS; это означает, что можно говорить, например, о соединении между flicka.magelang.com:3452 и rosa.jguru.com:4432. В текущей реализации RMI соединения TCP/IP используются как основа для всех межмашинных соединений.
На вершине TCP/IP RMI использует протокол уровня соединения, называемый Java Remote Method Protocol (JRMP). JRMP является частным, основанным на потоках, протоколом, который только частично специфицирован в настоящее время в двух версиях. Первая версия была выпущена в реализации RMI в JDK 1.1 и требовала использования классов скелетов на сервере. Вторая версия была выпущена с Java 2 SDK. Она была оптимизирована по производительности и не требовала использования скелетных классов. (Обратите внимание, что некоторые альтернативные реализации, такие как BEA Weblogic и NinjaRMI, не используют RMI, а используют вместо него свои собственные протоколы уровня соединения. Voyager от ObjectSpace распознает JRMP и будет взаимодействовать с RMI на уровне соединения.)
Sun и IBM совместно разработали следующую версию RMI, называемую RMI-IIOP, которая будет доступна в версии 1.3 Java 2 SDK. Интересным моментом в RMI-IIOP является то, что она будет использовать протокол Object Management Group (OMG) Internet Inter-ORB Protocol, IIOP для взаимодействия между клиентами и серверами.
OMG представляет собой группу из более чем 800 членов, которая определяет независимую от производителей, распределенную объектную архитектуру, называемую Common Object Request Broker Architecture (CORBA). Клиенты и серверы CORBA Object Request Broker (ORB) взаимодействуют между собой, используя IIOP. С принятием в CORBA расширения Objects-by-Value и предложений Java Language to IDL Mapping работа была направлена на интеграцию RMI и CORBA. Эта новая реализация RMI-IIOP поддерживает большинство возможностей RMI, за исключением:
java.rmi.server.RMISocketFactory
UnicastRemoteObject
Unreferenced
Интерфейсов DGC
Транспортный уровень RMI был разработан для осуществления соединения между клиентами и сервером даже с учетом сетевых помех.
Хотя транспортный уровень предпочитает использовать несколько TCP/IP соединений, некоторые сетевые конфигурации разрешают только одно TCP/IP-соединение между клиентом и сервером (некоторые броузеры ограничивают апплеты одним сетевым соединением с их сервером).
В этом случае, транспортный уровень распределяет несколько виртуальных соединений внутри одного TCP/IP-соединения.