Протокол удаленного вызова процедур (RPC) в распределенной системе

⚡ Умное резюме

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

  • 📞 Определение: RPC позволяет клиенту вызывать процедуру на удаленном сервере так, как если бы это был локальный вызов.
  • 🇧🇷 Типы: RPC-вызовы в режимах обратного вызова, широковещательной рассылки и пакетной обработки различаются способом маршрутизации и постановки запросов в очередь.
  • ???? ️ Archiтекстура: В каждом вызове взаимодействуют пять компонентов: клиент, заглушка клиента, среда выполнения RPC, заглушка сервера и сервер.
  • 🔄 Как это работает: Заглушки преобразуют параметры в сообщение и десериализуют результат, возвращаемый вызывающей стороне.
  • Компромиссы: RPC упрощает распределенный код, но добавляет накладные расходы на сеть и точки отказа по сравнению с локальными вызовами.
  • 🤖 Под углом к ​​искусственному интеллекту: gRPC обеспечивает передачу моделей машинного обучения между микросервисами, а Copilot ускоряет написание RPC-заглушек.

Удаленный вызов процедур (RPC) в распределенной системе

Что такое РПЦ?

Удаленный вызов процедур (RPC) это межпроцессного взаимодействия Этот метод используется в клиент-серверных приложениях. Полное название RPC — Remote Procedure Call (удаленный вызов процедуры). Механизмы RPC используются, когда компьютерная программа вызывает выполнение процедуры или подпрограммы в другом адресном пространстве, закодированное как обычный вызов процедуры, без явного указания программистом деталей удаленного взаимодействия.

Этот вызов процедуры также управляет низкоуровневыми транспортными протоколами, такими как UDP и TCP/IP, для передачи данных сообщения между программами.

Виды РПК

Три типа RPC:

  • Обратный вызов RPC
  • Трансляция RPC
  • Пакетный режим RPC

Обратный вызов RPC

Этот тип RPC обеспечивает взаимодействие между участвующими процессами по принципу «точка-точка» (P2P). Он позволяет процессу выступать одновременно и в роли клиента, и в роли сервера.

Функции обратного вызова RPC:

  • Обрабатывает удаленно обрабатываемые интерактивные проблемы приложений.
  • Предоставляет серверу дескриптор клиента.
  • Функция обратного вызова заставляет клиентский процесс ждать.
  • Управляет взаимоблокировками при обратных вызовах.
  • Это способствует формированию модели взаимодействия между участниками процесса на основе принципа "равный равному".

Трансляция RPC

Широковещательный RPC-запрос — это запрос клиента, который передается по сети и обрабатывается всеми серверами, имеющими метод для обработки этого запроса.

Функции Broadcast RPC:

  • Позволяет указать, что запрос клиента должен быть передан широковещательно.
  • Вы можете объявить широковещательные порты.
  • Это помогает снизить нагрузку на физическую сеть.

Пакетный режим RPC

Пакетный режим RPC позволяет ставить отдельные RPC-запросы в очередь в буфер передачи на стороне клиента, а затем отправлять их по сети одним пакетом на сервер.

Функции пакетного RPC:

  • Это минимизирует накладные расходы, связанные с отправкой запроса, поскольку запросы отправляются по сети одним пакетом на сервер.
  • Этот тип протокола RPC эффективен только для приложений, требующих низкой частоты вызовов.
  • Ему нужен надежный протокол передачи.

RPC Archiтекстура

Архитектура RPC состоит в основном из пяти компонентов программы:

  1. Клиент
  2. Клиентская заглушка
  3. Среда выполнения RPC
  4. Серверная заглушка
  5. серверу

RPC Archiтекстура

RPC Archiтекстура

Как работает RPC?

В процессе RPC выполняются следующие шаги:

Шаг 1) Клиент, заглушка клиента и один экземпляр среды выполнения RPC выполняются на клиентской машине.

Шаг 2) Клиент запускает процесс-заглушку, передавая параметры обычным способом. Заглушка клиента хранится в собственном адресном пространстве клиента. Она также запрашивает у локальной среды выполнения RPC отправку запроса серверной заглушке.

Шаг 3) На этом этапе пользователь обращается к RPC, выполняя обычный локальный вызов процедуры. Среда выполнения RPC управляет передачей сообщений между клиентом и сервером по сети. Она также выполняет функции повторной передачи, подтверждения, маршрутизации и шифрования.

Шаг 4) После завершения серверной процедуры выполнение возвращается к серверному заглушке, которая упаковывает (маршалирует) возвращаемые значения в сообщение. Затем серверная заглушка отправляет сообщение обратно на транспортный уровень.

Шаг 5) На этом этапе транспортный уровень отправляет результирующее сообщение обратно на транспортный уровень клиента, который, в свою очередь, возвращает сообщение клиентскому заглушке.

Шаг 6) На этом этапе клиентский заглушка десериализует (распаковывает) возвращаемые параметры в результирующем пакете, и выполнение возвращается вызывающей стороне.

Характеристики РПК

Вот основные характеристики RPC:

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

Особенности РПК

Вот важные особенности RPC:

  • Простой синтаксис вызова.
  • Предлагает известную семантику.
  • Предоставляет чётко определённый интерфейс.
  • Она может обеспечивать связь между процессами на одной или разных машинах.

Преимущества РПК

Вот преимущества и достоинства RPC:

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

Недостатки RPC

Вот минусы/недостатки использования RPC:

  • Удаленный вызов процедур передает параметры только по значениям; значения по указателям (ссылкам) не допускаются.
  • Время вызова (и возврата) удаленной процедуры — накладные расходы — значительно выше, чем для локальной процедуры.
  • Этот механизм крайне уязвим к сбоям, поскольку включает в себя систему связи, другую машину и другой процесс.
  • Концепция RPC может быть реализована различными способами, поэтому единого стандарта не существует.
  • Она не обеспечивает гибкости в отношении аппаратной архитектуры, поскольку в основном основана на взаимодействии.
  • Стоимость процесса возрастает из-за удаленного вызова процедуры.

Часто задаваемые вопросы (FAQ)

RPC предоставляет доступ к действиям в виде удаленных процедур, тогда как REST предоставляет доступ к данным в виде ресурсов, доступ к которым осуществляется с помощью HTTP-глаголов. RPC воспринимается как вызов локальной функции; REST же фокусируется на ресурсах и состоянии.

gRPC — это GoogleСовременный высокопроизводительный RPC-фреймворк. Он использует HTTP/2 и протокол HTTP/2. BufferОн поддерживает двунаправленную потоковую передачу данных, что делает его популярным для взаимодействия микросервисов.

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

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

К распространённым реализациям RPC относятся gRPC, Apache Thrift, XML-RPC, JSON-RPC и другие. Java RMI. Они различаются форматом данных и способом передачи, но все позволяют клиенту вызывать процедуру на удалённом сервере.

RPC по умолчанию небезопасен; безопасность зависит от используемого транспортного протокола. В некоторых реализациях для защиты вызовов добавляются шифрование TLS, токены аутентификации и контроль доступа.

Платформы машинного обучения используют RPC, особенно gRPC, для передачи прогнозов модели между микросервисами. Клиент отправляет признаки и получает результат вывода, поддерживаяping Системы искусственного интеллекта быстрые и слабо связанные.

Да. GitHub Copilot может создавать шаблоны определений сервисов в формате .proto, клиентских заглушек и обработчиков серверов для gRPC. Разработчикам все равно следует проверять сгенерированные интерфейсы, обработку ошибок и версионирование перед развертыванием в продакшене.

Подведем итог этой публикации следующим образом: