Введение

Механизм, позволяющий программному обеспечению выполнять удаленную процедуру. В распределенных вычислениях, вызов удаленной процедуры (RPC) – это ситуация, когда компьютерная программа вызывает выполнение процедуры (подпрограммы) в другом адресном пространстве (обычно на другом компьютере в общей компьютерной сети), при этом программируется так, как будто это обычный (локальный) вызов процедуры, без необходимости явно прописывать детали удаленного взаимодействия. То есть, программист пишет практически один и тот же код, независимо от того, является ли подпрограмма локальной для выполняющей программы или удаленной. Это форма взаимодействия клиент-сервер (инициатор – клиент, исполнитель – сервер), обычно реализуемая посредством системы обмена сообщениями по принципу запрос-ответ. В парадигме объектно-ориентированного программирования RPC представляются вызовом удаленного метода (RMI). Модель RPC подразумевает определенную степень прозрачности местоположения, а именно, что вызов процедур в значительной степени одинаков, независимо от того, локальные они или удаленные, однако обычно они не идентичны, поэтому локальные вызовы можно отличить от удаленных. Удаленные вызовы обычно на несколько порядков медленнее и менее надежны, чем локальные, поэтому их различение важно. RPC является формой межпроцессного взаимодействия (IPC), поскольку различные процессы имеют различные адресные пространства: если они находятся на одном и том же хост-компьютере, у них есть отдельные виртуальные адресные пространства, даже если физическое адресное пространство одинаковое; а если они находятся на разных хостах, то физическое адресное пространство различается. Для реализации этой концепции использовалось множество различных (часто несовместимых) технологий.

История и происхождение

Протоколы запроса-ответа появились в эпоху ранних распределенных вычислений в конце 1960-х годов, теоретические предложения об удаленных вызовах процедур как о модели сетевых операций относятся к 1970-м годам, а практические реализации – к началу 1980-х годов. Брюсу Джей Нельсону обычно приписывают создание термина "удаленный вызов процедуры" в 1981 году. Удаленные вызовы процедур, используемые в современных операционных системах, своими корнями уходят в мультипрограммирующую систему RC 4000, которая использовала протокол связи запрос-ответ для синхронизации процессов. Идея рассмотрения сетевых операций как удаленных вызовов процедур восходит, по крайней мере, к 1970-м годам в ранних документах ARPANET. В 1978 году Пер Бринч Хансен предложил Distributed Processes – язык для распределенных вычислений, основанный на "внешних запросах", состоящих из вызовов процедур между процессами. Одной из первых практических реализаций стала разработка в 1982 году Брайаном Рэнделлом и его коллегами Newcastle Connection для связи между машинами UNIX. Вскоре после этого появилась система "Lupine" от Эндрю Биррелла и Брюса Нельсона в среде Cedar в Xerox PARC. Lupine автоматически генерировал заглушки, обеспечивая типобезопасные привязки, и использовал эффективный протокол для связи. RPyC реализует механизмы RPC в Python с поддержкой асинхронных вызовов. Distributed Ruby (DRb) позволяет программам Ruby взаимодействовать друг с другом на одной машине или по сети. DRb использует удаленный вызов метода (RMI) для передачи команд и данных между процессами. Erlang ориентирован на процессы и изначально поддерживает распределение и RPC посредством передачи сообщений между узлами и локальными процессами. Elixir построен на базе Erlang VM и обеспечивает возможность обмена сообщениями (процессы Elixir/Erlang, а не процессы ОС) в одной и той же сети "из коробки" через агенты и передачу сообщений. Rust RPC-фреймворк Tarpc от Google позволяет разработчикам определять структуру сообщений, используя структуры и типажи Rust, вместо protobuf.

Специфические для применения

Формат сообщений действий (AMF) позволяет приложениям Adobe Flex взаимодействовать с серверными приложениями или другими приложениями, поддерживающими AMF. Remote Function Call (RFC) — стандартный интерфейс SAP для обмена данными между системами SAP. RFC вызывает функцию для выполнения в удаленной системе.