
- •1. Модели взаимодействия компонентов рис
- •2. Обмен сообщениями
- •3. Удаленный вызов процедур
- •3.1. Вызов распределенных процедур.
- •4. Механизм работы rpc
- •5. Обращение к удаленным объектам (rmi)
- •6. Связь на основе потоков данных
- •7. Архитектура распределённых приложений
- •7.1. Принципы создания системы обработки информации в масштабе предприятия
- •7.2. Парадигма распределенных вычислений
- •8. Архитектура распределенных приложений
- •9. Физическая структура распределенных приложений
- •10. Распределение бизнес-логики по уровням распределенного приложения
- •11. Уровень представления данных
- •12. Уровень обработки данных
- •13. Уровень управления данными
- •14. Уровень хранения данных
- •15. Расширения базовых уровней
3.1. Вызов распределенных процедур.
Реализация удаленных вызовов (RPC) существенно сложнее реализации вызовов локальных процедур в силу их отличий:
1. Первое отличие RPC от локального вызова. Поскольку вызывающая и вызываемая процедуры выполняются на разных машинах, то они имеют разные адресные пространства, и это создает проблемы при передаче параметров и результатов, особенно если машины разного типа.
Так как RPC не может рассчитывать на разделяемую память, то это означает, что:
1) параметры RPC не должны содержать указателей на ячейки не стековой памяти
2) значения параметров должны копироваться с одного компьютера на другой.
2. Второе отличие RPC от локального вызова является то, что RPC обязательно использует нижележащую систему связи, однако это не должно быть явно видно ни в определении процедур, ни в самих процедурах.
3. Третье отличие RPC от локального вызова
Удаленность вносит дополнительные проблемы.
Выполнение вызывающей программы и вызываемой локальной процедуры в одной машине реализуется в рамках единого процесса.
Но в реализации RPC участвуют как минимум два процесса — по одному в каждой машине.
В случае работы с удаленной процедурой, основное отличие состоит в том, что вызов удаленной процедуры обслуживают два процесса:
клиентский процесс
и серверный процесс.
Алгоритм клиентского процесса:
1. Процесс клиента отправляет серверу сообщение, в которое включены параметры вызываемой процедуры и ожидает ответного сообщения с результатами ее работы.
2 При получении ответа результат считывается, и процесс продолжает работу.
Алгоритм серверного процесса
1. Со стороны сервера процесс-обработчик вызовов находится в состоянии ожидания
2. При поступлении сообщения, процесс-обработчик вызовов:
считывает параметры процедуры,
выполняет процедуру,
отправляет ответ -
- и становится в состояние ожидания следующего вызова (рис.3).
Кроме того, существует ряд проблем, связанных с неоднородностью языков программирования и операционных сред: структуры данных и структуры вызова процедур, поддерживаемые в каком-либо одном языке программирования, не поддерживаются точно так же во всех других языках.
Рис. 3.
Между вызовами локальных и удаленных процедур есть еще несколько важных отличий:
1. Обработка ошибок. Клиент в любом случае должен получать уведомление об ошибках, возникающих при вызовах удаленных процедур на сервере или в сети.
2. Глобальные переменные. Поскольку сервер не имеет доступа к адресному пространству клиента, при вызовах удаленных процедур нельзя использовать скрытые параметры в виде глобальных переменных.
3. Производительность. Скорость выполнения удаленных процедур, как правило на один или два порядка ниже скорости выполнения аналогичных локальных процедур.
4. Аутентификация. Поскольку вызовы удаленных процедур происходят по сети, необходимо использовать механизмы аутентификации клиента.
RPC-протокол:
не накладывает каких-либо требований на дополнительные связи между процессами
и не требует синхронности выполняемых функций.
Таким образом, случае RPC-протокола вызовы могут быть асинхронными и взаимонезависимыми, так что клиент во время ожидания ответа может выполнять другие процедуры.
Сервер RPC может выделять для каждой функции отдельный процесс или виртуальную машину, поэтому, не дожидаясь окончания работы предыдущих запросов, сразу же может принимать следующие.