
- •Конспект лекций модуля № 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
Конспект лекций модуля № 2 "Базовый курс" дисциплины "Распределенные программные системы и технологии" Тема 5. Организация взаимодействия распределенных компонент
5.1. Виды взаимодействия
В распределенных системах компоненты расположенные на разных компьютерах и работающих совместно для решения общих задач обязаны обмениваться данными. Обмен данными происходит при взаимодействии компонентов. В разделе 3.1. говорилось, что все взаимодействия между распределенными компонентами выполняются по протоколу запрос-ответ. Однако в зависимости от времени (последовательности) получения ответа взаимодействия могут быть синхронными или асинхронными.
Синхронным (synchronous) называется такое взаимодействие между компонентами, при котором клиент, отослав запрос, блокируется и может продолжать работу только после получения ответа от сервера. По этой причине такой вид взаимодействия называют иногда блокирующим (blocking).
В рамках асинхронного (asynchronous) или неблокирующего (non blocking) взаимодействия клиент после отправки запроса серверу может продолжать работу, даже если ответ на запрос еще не пришел.
Синхронное взаимодействие достаточно просто организовать, и оно гораздо проще для понимания. Код программы клиентского компонента, описывающей синхронное взаимодействие, устроен проще — его часть, отвечающая за обработку ответа сервера, находится непосредственно после части, в которой формируется запрос. В силу своей простоты синхронные взаимодействия в большинстве систем используются гораздо чаще асинхронных.
Вместе с тем, синхронное взаимодействие ведет к значительным затратам времени на ожидание ответа. Это время часто можно использовать более полезным образом: ожидая ответа на один запрос, клиент мог бы заняться другой работой, выполнить другие запросы, которые не зависят от еще не пришедшего результата. Поскольку все распределенные системы состоят из достаточно большого числа уровней, через которые проходят практически все взаимодействия, суммарное падение производительности, связанное с синхронностью взаимодействий, оказывается очень большим.
5.2. Синхронное взаимодействие.
5.1.1. Организация синхронного взаимодействия.
При описании взаимодействия между элементами программных систем инициатор взаимодействия, т.е. компонент, посылающий запрос на обработку, обычно называется клиентом, а отвечающий компонент, тот, что обрабатывает запрос — сервером. "Клиент" и "сервер" в этом контексте обозначают роли в рамках данного взаимодействия (рис. 5.1.). В большинстве случаев один и тот же компонент может выступать в разных ролях — то клиента, то сервера — в различных взаимодействиях. Лишь в небольшом классе систем роли клиента и сервера закрепляются за компонентами на все время их существования.
Обычное обращение к функции или методу объекта с помощью передачи управления по стеку вызовов является примером синхронного взаимодействия.
Рис.5.1.
Синхронное взаимодействие
5.1.2. Удаленный вызов процедур
Наиболее распространенным и исторически первым достаточно универсальным способом реализации синхронного взаимодействия в распределенных системах является удаленный вызов процедур (Remote Procedure Call, RPC).
В каждом вызове удаленной процедуры участвуют две стороны: активный клиент, который отправляет запрос вызова процедуры на сервер, и сервер, который отправляет клиенту ответ.
Протокол RPC построен на модели вызовов удаленных процедур, подобному механизму вызовов локальных процедур. При вызове локальной процедуры вы помещаете аргументы в определенное место памяти, в стек или переменные окружения и передаете управление процессом по определенному адресу. После завершения работы вы читаете результаты по конкретному адресу и продолжаете свой процесс.
В случае работы с удаленной процедурой, основное отличие состоит в том, что вызов удаленной функции обслуживают два процесса: клиентский процесс и серверный процесс.
Процесс клиента отправляет серверу сообщение, в которое включены параметры вызываемой процедуры и ожидает ответного сообщения с результатами ее работы. При получении ответа результат считывается, и процесс продолжает работу. Со стороны сервера процесс-обработчик вызовов находится в состоянии ожидания, и, при поступлении сообщения, считывает параметры процедуры, выполняет ее, отправляет ответ и становится в состояние ожидания следующего вызова.
Характерными чертами вызова локальных процедур являются:
Асимметричность, то есть одна из взаимодействующих сторон является инициатором;
Синхронность, то есть выполнение вызывающей процедуры при останавливается с момента выдачи запроса и возобновляется только после возврата из вызываемой процедуры.
Между вызовами локальных и удаленных процедур есть несколько важных отличий:
Обработка ошибок. Клиент в любом случае должен получать уведомление об ошибках, возникающих при вызовах удаленных процедур на сервере или в сети.
Глобальные переменные. Поскольку сервер не имеет доступа к адресному пространству клиента, при вызовах удаленных процедур нельзя использовать скрытые параметры в виде глобальных переменных.
Производительность. Скорость выполнения удаленных процедур, как правило, на один или два порядка ниже скорости выполнения аналогичных локальных процедур.
Аутентификация. Поскольку вызовы удаленных процедур происходят по сети, необходимо использовать механизмы аутентификации клиента.
Средства удаленного вызова процедур предназначены для облегчения организации распределенных вычислений. Наибольшая эффективность использования RPC достигается в тех приложениях, в которых существует интерактивная связь между удаленными компонентами с небольшим временем ответов и относительно малым количеством передаваемых данных. Такие приложения называются RPC-ориентированными.
Существует несколько реализаций процедур удаленного вызова процедур в различных операционных системах.
В операционной системе UNIX используется процедура под одноименным названием (Remote Procedure Call - RPC). Данная процедура внедрена в ядро системы. Ее выполнение обеспечивается протоколом RPC.
В операционных системах Windows удаленный вызов процедур начал развиваться на базе механизмов OLE, которые постепенно развились в технологию DCOM (Distributed Component Object Model). Данная технология позволяет создавать достаточно мощные распределенные сетевые вычислительные среды. В технологии используются фирменные протоколы Microsoft.
Для обеспечения межплатформенного взаимодействия разработана и широко внедряется спецификация CORBA.