- •Конспект лекций модуля № 2 "Базовый курс" дисциплины "Распределенные программные системы и технологии" Тема 5. Организация взаимодействия распределенных компонент
- •5.1. Виды взаимодействия
- •5.2. Синхронное взаимодействие.
- •5.1.1. Организация синхронного взаимодействия.
- •5.1.2. Удаленный вызов процедур
- •5.1.3. Удаленным вызовом методов
- •5.3. Асинхронное взаимодействие.
- •5.3.1. Организация асинхронного взаимодействия
- •5.3.2. Очереди сообщений
- •Тема 6. Идентификация компонентов
- •6.1. Задача идентификации
- •6.2.Централизованная служба имен
- •6.3. Распределенная служба имен
- •Тема .7 Синхронизация
- •7.1. Задачи синхронизации
- •7.2. Синхронизация доступа к данным
- •7.2.1. Гонки
- •7.2.2 Семафоры
- •7.2.2.1. Простые семафоры
- •7.2.2.2 Семафоры со счетчиками
- •7.2.4 Мониторы
- •7.2.4.1 Простые мониторы
- •7.2.4.2 Мониторы с условными переменными
- •7.2.4.3. Реализация мониторов
- •7.3. Синхронизация взаимодействия
- •7.3.1. Ситуация тупика
- •7.3.2. Моделирование тупиков сетью Петри
- •7.3.2.1. Сеть Петри
- •7.3.2.2. Моделирование тупика
- •7.4 Синхронизация времени
- •7.4.1. Проблема синхронизации времени
- •7.4.2. Алгоритм синхронизации времени
- •Тема 8. Транзакции
- •8.1. Понятие транзакции
- •8.2.Модели обработки транзакций
- •8.2.1. Плоские транзакции
- •8.2.2. Контрольные точки
- •8.2.3. Многозвенные транзакции
- •8.2.4. Вложенные транзакции
- •8.3. Классификация транзакций
- •8.4. Распределенные транзакции
- •8.4.1. Монитры транзакций
- •8.4.2 Управление транзакциями
- •8.4.3 Реализация транзакций
- •Литература к теме 8
- •Документация по библиотекам j2se
5.1.3. Удаленным вызовом методов
Модификация RPC протокола для объектно-ориентированной среды называется удаленным вызовом методов (Remote Method Invocation, RMI). Удаленный вызов методов определяет как способ организации взаимодействия между компонентами, так и методику разработки этих компонентов.
При удаленном вызове методов клиентом его обращение оформляется так же, как вызов локальной функции и обрабатывается клиентской заглушкой. Клиентская заглушка определяет адрес машины, на которой находится сервер, упаковывает данные вызова в сообщение и отправляет его на серверную машину. На серверной машине серверная заглушка, получив сообщение, распаковывает его, извлекает аргументы вызова, обращается к серверу с таким вызовом локально, дожидается от него результата, упаковывает результат в сообщение и отправляет его обратно на клиентскую машину. Получив ответное сообщение, клиентская заглушка распаковывает его и передает полученный ответ клиенту.
Эта же техника может быть использована и для реализации взаимодействия компонентов, работающих в рамках различных процессов на одной машине.
Рис.
5.2.
Схема реализации удаленного вызова
процедуры
5.3. Асинхронное взаимодействие.
5.3.1. Организация асинхронного взаимодействия
При асинхронном взаимодействии клиент, отправивший запрос не ожидает ответа, а продолжает выполнять свои задачи (рис. 5.3.). При возникновении необходимости клиент получает ответ от сервера. Данный вид взаимодействия более сложен с точки зрения реализации, но более производителен, с точки зрения оптимального использования процессорного времени.
Примером асинхронного взаимодействия является электронная почта. Другой пример — распространение сообщений о новостях различных видов в соответствии с имеющимся на текущий момент реестром подписчиков, где каждый подписчик определяет темы, которые его интересуют.
Рис.
5.3. Асинхронное взаимодействие
Асинхронное взаимодействие позволяет получить более высокую производительность системы за счет использования времени между отправкой запроса и получением ответа на него для выполнения других задач. Другое важное преимущество асинхронного взаимодействия — меньшая зависимость клиента от сервера, возможность продолжать работу, даже если машина, на которой находится сервер, стала недоступной. Это свойство используется для организации надежной связи между компонентами, работающей, даже если и клиент, и сервер не все время находятся в рабочем состоянии.
В то же время асинхронные взаимодействия более сложно использовать. Поскольку при таком взаимодействии нужно писать специфический код для получения и обработки результатов запросов, системы, основанные на асинхронных взаимодействиях между своими компонентами, значительно труднее разрабатывать и сопровождать.
5.3.2. Очереди сообщений
Чаще всего асинхронное взаимодействие реализуется при помощи очередей сообщений. При отправке сообщения клиент помещает его во входную очередь сервера, а сам продолжает работу. После того, как сервер обработает все предшествующие сообщения в очереди, он выбирает это сообщение для обработки, удаляя его из очереди. После обработки, если необходим ответ, сервер создает сообщение, содержащее результаты обработки, и кладет его во входную очередь клиента или в свою выходную.
Рис.
5.4.
Реализация асинхронного взаимодействия
при помощи очередей сообщений
Очереди сообщений могут быть сконфигурированы самыми разными способами. У компонента может иметься одна входная очередь, а может — и несколько, для сообщений от разных источников или имеющих разный смысл. Кроме того, компонент может иметь выходную очередь, или несколько, вместо того, чтобы класть сообщения во входные очереди других компонентов. Очереди сообщений могут храниться независимо как от тех компонентов, которые кладут туда сообщения, так и от тех, которые забирают их оттуда. Сообщения в очередях могут иметь приоритеты, а сама очередь — реализовывать различные политики поддержания или изменения приоритетов сообщений в ходе работы.
Наиболее распространенными средствами поддерживающими очереди сообщений являются:
IBM MQ Series фирмы IBM;
Oracle AQ – фирмы Oracle (входит в состав СУБД Oracle);
JBoss MQ – входит в состав бесплатного сервера приложений JBoss.
Также можно встретить реализации асинхронного взаимодействия основанного на почтовых протоколах SMTP\POP3. В этом случае в качестве очередей сообщений выступают почтовые ящики.
