Удаленный вызов процедуры

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

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

RPC - это форма межпроцессного взаимодействия (IPC), в которой разные процессы имеют разные адресные пространства: если они находятся на одной и той же главной машине, они имеют разные виртуальные адресные пространства, даже если физическое адресное пространство является тем же; тогда как если они находятся на разных хостах, физическое адресное пространство другое. Для реализации этой концепции использовалось множество различных (часто несовместимых) технологий.

Содержание
  • 1 История и происхождение
  • 2 Передача сообщений
    • 2.1 Последовательность событий
  • 3 Стандартные механизмы связи
  • 4 Аналоги
    • 4.1 Зависит от языка
    • 4.2 Зависит от приложения
    • 4.3 Общие
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
История и происхождение

Протоколы запроса-ответа относятся к ранним распределенным вычислениям в конце 1960-х, теоретические предложения удаленных вызовов процедур в качестве модели сетевых операций относится к 1970-м годам, а практическая реализация относится к началу 1980-х. Брюсу Джею Нельсону обычно приписывают создание термина «удаленный вызов процедуры» в 1981 году.

Удаленные вызовы процедур, используемые в современных операционных системах, восходят к мультипрограммированию RC 4000 система, которая использовала протокол связи запрос-ответ для синхронизации процессов. Идея обработки сетевых операций как вызовов удаленных процедур восходит, по крайней мере, к 1970-м годам в ранних документах ARPANET. В 1978 г. Пер Бринч Хансен предложил распределенные процессы, язык для распределенных вычислений, основанный на «внешних запросах», состоящих из вызовов процедур между процессами.

Одна из первых практических реализаций была реализована в 1982 г. Брайан Рэнделл и его коллеги за их Newcastle Connection между машинами UNIX. Вскоре за ним последовали «Люпин» Эндрю Биррелла и Брюса Нельсона в среде Cedar в Xerox PARC. Люпин автоматически генерировал заглушки, обеспечивая безопасные для типов привязки и использовал эффективный протокол для связи. Одним из первых коммерческих применений RPC был Xerox под названием «Courier» в 1981 году. Первой популярной реализацией RPC в Unix была Sun RPC ( теперь называется ONC RPC), который используется в качестве основы для сетевой файловой системы (NFS).

В 1990-е годы, когда популярно объектно-ориентированное программирование, широко применялась альтернативная модель удаленного вызова методов (RMI), например, в Common Object Request Broker Architecture (CORBA, 1991) и вызов удаленного метода Java. Популярность RMI, в свою очередь, упала с появлением Интернета, особенно в 2000-х годах.

Передача сообщений

RPC - это протокол запрос – ответ. RPC инициируется клиентом, который отправляет известному удаленному серверу сообщение запроса для выполнения указанной процедуры с предоставленными параметрами. Удаленный сервер отправляет ответ клиенту, и приложение продолжает свой процесс. Пока сервер обрабатывает вызов, клиент блокируется (он ждет, пока сервер завершит обработку, прежде чем возобновить выполнение), если только клиент не отправит серверу асинхронный запрос, например XMLHttpRequest. Существует множество вариаций и тонкостей в различных реализациях, что приводит к множеству различных (несовместимых) протоколов RPC.

Важное различие между удаленными вызовами процедур и локальными вызовами состоит в том, что удаленные вызовы могут завершиться ошибкой из-за непредсказуемых сетевых проблем. Кроме того, вызывающие обычно должны иметь дело с такими сбоями, не зная, действительно ли была вызвана удаленная процедура. Идемпотентные процедуры (те, которые не имеют дополнительных эффектов при вызове более одного раза) легко обрабатываются, но остается достаточно трудностей, чтобы код для вызова удаленных процедур часто ограничивался тщательно написанными низкоуровневыми подсистемами.

Последовательность событий

  1. Клиент вызывает клиента заглушку. Вызов представляет собой локальный вызов процедуры, параметры которого помещаются в стек обычным способом.
  2. клиентская заглушка упаковывает параметры в сообщение и выполняет системный вызов для отправки сообщения.. Упаковка параметров называется маршалингом.
  3. Клиентская локальная операционная система отправляет сообщение с клиентского компьютера на сервер.
  4. Локальная операционная система на серверном компьютере входящие пакеты передаются на серверную заглушку.
  5. . Серверная заглушка распаковывает параметры из сообщения. Распаковка параметров называется распаковкой.
  6. Наконец, серверная заглушка вызывает серверную процедуру. В ответе прослеживаются те же шаги в обратном направлении.
Стандартные механизмы связи

Чтобы позволить различным клиентам обращаться к серверам, был создан ряд стандартизированных систем RPC. Большинство из них используют язык описания интерфейса (IDL), чтобы позволить различным платформам вызывать RPC. Затем файлы IDL можно использовать для генерации кода для взаимодействия между клиентом и серверами.

Аналоги

Известные реализации и аналоги RPC включают:

зависящие от языка

  • Java Java Remote Method Invocation (Java RMI) API обеспечивает функциональность, аналогичную стандартным методам RPC Unix.
  • Go предоставляет пакет rpc для реализации RPC с поддержкой асинхронных вызовов. Сетевые объекты
  • Modula-3, которые были основа для Java RMI
  • RPyC реализует механизмы RPC в Python с поддержкой асинхронных вызовов.
  • Распределенный Ruby (DRb) позволяет программам Ruby взаимодействовать друг с другом на одной машине или через сеть. DRb использует удаленный вызов метода (RMI) для передачи команд и данных между процессами.
  • Erlang ориентирован на процессы и изначально поддерживает распространение и RPC через передачу сообщений между узлами и локальными процессами.
  • Elixir строит поверх виртуальной машины Erlang и обеспечивает взаимодействие процессов (процессы Elixir / Erlang, а не процессы ОС) в одной и той же сети прямо из коробки через агентов и передачу сообщений.

Специфичный для приложения

Общие

  • NFS (Сетевая файловая система ) - один из самых известных пользователей RPC
  • Вызов удаленных процедур Open Network Computing от Sun Microsystems
  • D-Bus программа с открытым исходным кодом IPC предоставляет функции, аналогичные CORBA.
  • SORCER, предоставляет API и ориентирована на нагрузку язык (EOL) для вызова федеративного метода
  • XML-RPC - это протокол RPC, который использует XML для кодирования своих вызовов и HTTP в качестве транспортного механизма.
  • JSON-RPC - это протокол RPC, который использует сообщения с кодировкой JSON
  • JSON-WSP - это протокол RPC, который использует сообщения с кодировкой JSON
  • SOAP является преемником XML-RPC и также использует XML для кодирования своих HTTP-вызовов.
  • Платформа распределенных вычислений Internet Communications Engine (Ice) от ZeroC.
  • Etch фреймворк для построения сетевых сервисов.
  • протокол и фреймворк Apache Thrift.
  • CORBA предоставляет s удаленный вызов процедур через промежуточный уровень, называемый брокером объектных запросов.
  • Libevent обеспечивает основу для создания серверов и клиентов RPC.
  • Windows Communication Foundation - это интерфейс прикладного программирования в платформе.NET. для создания подключенных сервис-ориентированных приложений.
  • Microsoft.NET Remoting предлагает средства RPC для распределенных систем, реализованные на платформе Windows. Он был заменен WCF.
  • Microsoft DCOM использует MSRPC, который основан на DCE / RPC
  • The Open Software Foundation DCE. / RPC Распределенная вычислительная среда (также реализованная Microsoft).
  • Пакет Google Protocol Buffers (protobufs) включает язык определения интерфейса, используемый для его протоколов RPC с открытым исходным кодом, выпущенных в 2015 году как gRPC.
  • WAMP объединяет RPC и Publish-Subscribe в единый транспортно-независимый протокол.
  • Google Web Toolkit использует асинхронный RPC для связи с серверной службой.
  • Apache Avro предоставляет RPC, где схемы обмена клиентом и сервером в квитировании соединения и генерации кода не требуются.
  • Встроенный RPC - это облегченная реализация RPC, разработанная NXP, нацеленная на основные ядра CortexM
  • KF Trusted Execution Environment использует прокси и маршалинг объектов для передачи объектов через песочницы
  • msgpack-rpc - это облегченная реализация RPC u Sing MessagePack для сериализации данных. Он используется в текстовом редакторе Neovim.
См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-03 12:37:47
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте