Концепция отдаленного вызова процедур

Идея вызова отдаленных процедур (Remote Procedure Call - RPC) составляется в расширении хорошо известного и понятного механизма передачи управления и данных внутри программы, которое выполняется на одной машине, на передачу управления и данных через сеть. Средства отдаленного вызова процедур предназначенные для облегчения организации распределенных вычислений. Самая большая эффективность использования RPC достигается в тех приложениях, в которых существует интерактивная связь между отдаленными компонентами с небольшим временем ответов и относительно малым количеством переданных данных. Такие приложения называются Rpc-Ориентированными.

Характерными чертями вызова локальных процедур есть:

Асимметричность, то есть одна из взаимодействующих сторон является инициатором;

Синхронность, то есть  выполнение процедуры , которые вызывает , при останавливается с момента выдачи запроса и восстанавливается только по возвращении с что вызывается процедуры.

Реализация отдаленных вызовов существенным образом сложнее реализации вызовов локальных процедур. Начнем из того, что поскольку что вызывает и вызываемая процедуры выполняются на разных машинах, то они имеют разные адресные пространства, и это создает проблемы при передачи параметров и результатов, особенно если машины не идентичные. Потому что RPC не может рассчитывать на что разделяется память, то это означает, что параметры RPC не должны содержать указателей на сердцевины нестековой памяти и что значение параметров должны копироваться с одного компьютера на другого. Таким отличием RPC от локального вызова есть то, что он обязательно использует нижележащую систему связи, однако это не должно быть явным образом очевидно нет в определении процедур, ни в самых процедурах. Удаленность вносит дополнительные проблемы. Выполнение программы, которые вызывает, и что вызывается локальной процедуры в одной машине реализуется в рамках единого процесса. Но в реализации RPC принимают участие как минимум два процесса - по одном в каждой машине. В случае, если один из них аварийно завершится, могут возникнуть такие ситуации: при аварии процедуры, которые вызывает, удаленно вызванные процедуры станут "осиротевшими", а при аварийном завершении отдаленных процедур станут "обездоленными родителях" процедуры, которые вызывают, что будут безрезультатно ожидать ответа от отдаленных процедур.

Кроме того, существует ряд проблем, связанных с неоднородностью языков программирования и операционных сред: структуры данных и структуры вызова процедур, поддерживаемые в котором одному языку программирования, не поддерживаются точно так же во всех других языках.

Эти и некоторые другие проблемы решает широко распространенная технология RPC, что лежит в основе многих распределенных операционных систем.

 

Возможно стоит прочитать: