Введение
Механизм, позволяющий программному обеспечению выполнять удаленную процедуру. В распределенных вычислениях, вызов удаленной процедуры (RPC) – это ситуация, когда компьютерная программа вызывает выполнение процедуры (подпрограммы) в другом адресном пространстве (обычно на другом компьютере в общей компьютерной сети), при этом программируется так, как будто это обычный (локальный) вызов процедуры, без необходимости явно прописывать детали удаленного взаимодействия. То есть, программист пишет практически один и тот же код, независимо от того, является ли подпрограмма локальной для выполняющей программы или удаленной. Это форма взаимодействия клиент-сервер (инициатор – клиент, исполнитель – сервер), обычно реализуемая посредством системы обмена сообщениями по принципу запрос-ответ. В парадигме объектно-ориентированного программирования RPC представляются вызовом удаленного метода (RMI). Модель RPC подразумевает определенную степень прозрачности местоположения, а именно, что вызов процедур в значительной степени одинаков, независимо от того, локальные они или удаленные, однако обычно они не идентичны, поэтому локальные вызовы можно отличить от удаленных. Удаленные вызовы обычно на несколько порядков медленнее и менее надежны, чем локальные, поэтому их различение важно. RPC является формой межпроцессного взаимодействия (IPC), поскольку различные процессы имеют различные адресные пространства: если они находятся на одном и том же хост-компьютере, у них есть отдельные виртуальные адресные пространства, даже если физическое адресное пространство одинаковое; а если они находятся на разных хостах, то физическое адресное пространство различается. Для реализации этой концепции использовалось множество различных (часто несовместимых) технологий.
In distributed computing, a Remote Procedure Call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared computer network), which is written as if it were a normal (local) procedure call, without the programmer explicitly writing the details for the remote interaction. That is, the programmer writes essentially the same code whether the subroutine is local to the executing program, or remote. This is a form of client–server interaction (caller is client, executor is server), typically implemented via a request–response message passing system. In the object oriented programming paradigm, RPCs are represented by remote method invocation (RMI). The RPC model implies a level of location transparency, namely that calling procedures are largely the same whether they are local or remote, but usually, they are not identical, so local calls can be distinguished from remote calls. Remote calls are usually orders of magnitude slower and less reliable than local calls, so distinguishing them is important. RPCs are a form of inter process communication (IPC), in that different processes have different address spaces: if on the same host machine, they have distinct virtual address spaces, even though the physical address space is the same; while if they are on different hosts, the physical address space is different. Many different (often incompatible) technologies have been used to implement the concept.
История и происхождение
Протоколы запроса-ответа появились в эпоху ранних распределенных вычислений в конце 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 вызывает функцию для выполнения в удаленной системе.