Удаленный вызов процедур (RPC) — эффективная коммуникация в архитектурах клиент-сервер

Удаленный вызов процедур — это центральный инструмент для реализации операционных и рабочих структур в сетях и архитектурах клиент-сервер. Ниже вы узнаете, как происходит взаимодействие между пространственно разделенными компьютерами посредством вызова RPC, на каких уровнях это происходит и где сегодня используются концепции RPC.

Что такое удаленный вызов процедур (RPC)?

Термин «удаленный вызов процедур» обозначает концепцию, которая регулирует межпроцессное взаимодействие, то есть обмен информацией между системными процессами. В 1984 году компьютерные ученые Эндрю Биррелл и Брюс Нельсон определили RPC как синхронный механизм, «который передает поток управления и данные в виде вызова процедуры между двумя адресными пространствами по узкополосной сети». Выходя за пределы адресного пространства, процессы могут быть запущены на удаленном компьютере в сети, а внешние экземпляры могут быть оперативно включены в операции вычисления и обработки данных. Процесс взаимодействия через RPC включает передачу параметров и возврат значения функции. На практике он не останавливается на одном вызове, поскольку несколько запросов обрабатываются параллельно.

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

Примечание

Специализацией вызовов RPC является коммуникация между различными компьютерами, но они также могут способствовать коммуникации между различными процессами внутри подключенной системы.

Заглушка клиента встречается с заглушкой сервера — так работает RPC

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

В реализации удаленного вызова процедур на стороне отправителя и получателя участвуют специальные экземпляры, которые называются «заглушками». Заглушка клиента действует на стороне клиента как прокси для удаленной процедуры сервера. Заглушка сервера является прокси-сервером вызывающего клиентского кода. Заглушки оперативно имитируют функциональную локальную единицу, скрывая «расстояние» кода на соответствующей другой стороне. В то же время они действуют как интерфейсы процедур. Типичная последовательность вызова RPC характеризуется следующими шагами:

  1. Клиентский код получает процедуру-заглушку (локальную клиентскую заглушку).
  2. Клиентская заглушка генерирует передаваемое сообщение из переданных параметров вызова процедуры, которое придерживается протокола RPC. Во время передачи происходит сериализация, при которой структурированные данные передаются в последовательной форме. Этот процесс перевода также известен как маршалинг.
  3. Затем клиентский шлейф обращается к коммуникационной системе локального компьютера, которая часто использует TCP/IP или UDP/IP для последующего обмена сообщениями между клиентом и сервером.
  4. После того как отправленное сообщение прибывает к получателю, заглушка сервера выполняет так называемый де- или демаршалинг, распаковывая параметры, содержащиеся в сообщении (используя в качестве основы протокол RPC).
  5. Заглушка сервера передает декодированные параметры и тем самым обеспечивает локальный вызов серверной процедуры.
  6. Результирующее значение функции передается заглушке сервера.
  7. Теперь процесс происходит в обратном направлении: Генерация передаваемого сообщения в соответствии с протоколом RPC, обмен сообщениями между сервером и клиентом, затем возвращаемое значение передается ожидающему клиентскому коду. Работа приложения продолжается на исходном компьютере.

Облачные вычисления и компьютерные кластеры — области применения вызовов RPC

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

Удаленные вызовы процедур также необходимы для современных операционных систем. С их помощью Windows может, например, выполнять рутинные задачи. Например, служба факса, очередь принтера или установленные сетевые соединения используют системную службу, называемую «удаленным вызовом процедур».

Сетевая файловая система (NFS), разработанная компанией Sun Microsystems, играет важную роль в мире Unix и Linux. Она использует вызовы RPC между клиентами и серверами, чтобы частично или полностью смонтировать файловую систему удаленного компьютера на локальном компьютере, то есть сделать ее доступной. Благодаря этой процедуре пользователь может работать с отдельными файлами на удаленном компьютере так, как если бы они находились на его собственном компьютере. Определенные разрешения на файлы регулируют права на чтение и запись. Сетевая информационная система (NIS) также использует RPC и таким образом централизованно управляет системами UNIX и Linux.

Каковы преимущества RPC?

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

Каковы недостатки RPC?

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

Разделяя его на различные экземпляры обработки, увеличивается частота ошибок. Сообщения могут теряться при передаче (сетевые ошибки, отказ узла в сети), могут возникать задержки и прерывания. Проблемы со временем, избыточное двойное выполнение (например, вызовов процессов) или нежелательная асинхронность в машинном обмене данными — вот те осложнения, которые возникают в результате. При синхронном RPC проблема сервера (например, крах) может повлиять на клиента, если вызывающий процесс тщетно ожидает возвращаемого значения. С другой стороны, работа сервера замедляется, если ответ клиента задерживается или вообще не приходит. Такая подверженность ошибкам может иметь далеко идущие последствия, особенно в больших архитектурах с высокой степенью распределения задач.

Из-за возможных источников ошибок необходимо также учитывать специальную семантику ошибок RPC, что делает программирование относительно сложным. Программистам и разработчикам систем приходится иметь дело с аспектами безопасности, которые влекут за собой распределенные системы и их коммуникации через RPC и UDP/IP или TCP/IP (сетевая безопасность, взлом, атаки типа «отказ в обслуживании» и т.д.).

Примечание

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

Оцените статью
cdelat.ru
Добавить комментарий