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


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

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

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

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

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

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