Введение
В последнее время в описаниях вакансий все чаще упоминается знание модного протокола RPC, что заставило меня задуматься: что нужно знать аналитику, чтобы успешно пройти собеседование? Я расскажу вам простыми словами, что такое RPC, как он работает и чем отличается от REST.
Понимание RPC
Что такое RPC?
RPC (Remote Procedure Call) — это способ, позволяющий программе на одном компьютере вызвать функцию на другом компьютере так, будто эта функция находится на первом компьютере. Представьте, что вы просите друга сделать что-то за вас — это и есть идея RPC.
Как работает RPC?
RPC работает следующим образом:
Клиент (тот, кто делает запрос) отправляет запрос на сервер, сообщая, какую функцию он хочет выполнить и какие данные нужно использовать.
Сервер (тот, кто обрабатывает запрос) получает запрос, выполняет функцию и отправляет результат обратно клиенту.
Пример для понимания RPC
Представьте, что у вас есть приложение для прогноза погоды, и вы хотите узнать текущую погоду в Нью-Йорке. В этом примере приложение на вашем телефоне — это клиент, а сервер, который знает погоду, — это сервер. В случае RPC процесс будет выглядеть следующим образом:
Клиент (вы): Ваше приложение на телефоне хочет узнать погоду в Нью-Йорке. Оно вызывает удаленную функцию
GetWeather("New York")
на сервере. Этот вызов функции выглядит так, как будто функцияGetWeather
находится в вашем приложении, хотя на самом деле она выполняется на удаленном сервере.Сервер: Сервер получает этот вызов функции
GetWeather("New York")
, обрабатывает его (возможно, запрашивает данные у другой службы или базы данных) и получает информацию о погоде в Нью-Йорке.Ответ от сервера: Сервер возвращает результат выполнения функции (например, текущую температуру, влажность, состояние погоды и т.д.) обратно вашему приложению.
Клиент (вы): Ваше приложение получает ответ и показывает вам погоду в Нью-Йорке.
Важное отличие RPC от REST в этом процессе заключается в том, что клиент вызывает функцию напрямую, как если бы она была локальной, и не нужно беспокоиться о деталях HTTP-запросов и ответов.
Вопросы на собеседовании и ответы
-
Что такое RPC?
Ответ: RPC (Remote Procedure Call) — это протокол, позволяющий программе на одном компьютере вызвать функцию на другом компьютере так, будто эта функция находится на первом компьютере. Это упрощает взаимодействие между программами, распределенными по разным системам, и скрывает сложность сетевого взаимодействия.
-
Как работает RPC?
Ответ: RPC работает следующим образом:
Клиент отправляет запрос на сервер с указанием функции и данных, которые нужно использовать.
Сервер получает запрос, выполняет указанную функцию и возвращает результат обратно клиенту.
Это похоже на обычный вызов функции в программе, но выполняется через сеть.
Пример: В приложении для прогноза погоды клиент вызывает удаленную функцию
GetWeather("New York")
на сервере. Сервер обрабатывает запрос, получает данные о погоде и возвращает их клиенту. -
Чем RPC отличается от REST?
Ответ: В RPC клиент вызывает функции напрямую, используя бинарные форматы для передачи данных, тогда как в REST используются стандартные HTTP-запросы и текстовые форматы, такие как JSON или XML.
RPC: Использует бинарные форматы (например, Protocol Buffers), что делает передачу данных более эффективной.
REST: Использует текстовые форматы (например, JSON), что упрощает отладку и чтение данных.
Пример:
RPC: Клиент вызывает метод
GetWeather(cityName)
и получает структурированный ответ.REST: Клиент отправляет GET-запрос на URL
/weather?city=New York
и получает JSON-ответ.
-
Когда лучше использовать RPC, а когда REST?
Ответ:
RPC: Лучше подходит для внутреннего взаимодействия между микросервисами из-за высокой производительности и низкого оверхеда*. Применяется, когда важна скорость и эффективность передачи данных.
REST: Идеален для веб-сервисов и публичных API благодаря своей простоте и совместимости с веб-протоколами. Применяется, когда важно иметь простую интеграцию и стандартные методы взаимодействия.
Пример:
RPC: Используется внутри компании для взаимодействия между различными сервисами (например, сервис обработки платежей и сервис управления заказами).
REST: Используется для создания публичного API, который могут использовать сторонние разработчики.
-
Какие преимущества у RPC перед REST?
Ответ: RPC может быть быстрее и эффективнее за счет использования бинарных форматов данных и прямых вызовов функций, что снижает оверхед* по сравнению с REST.
Производительность: Бинарные форматы (например, Protocol Buffers) более компактны и быстрее обрабатываются.
Прямые вызовы: Вызов функций напрямую упрощает структуру взаимодействия и уменьшает задержки.
Пример: В высоконагруженных системах, где важна минимальная задержка и максимальная производительность, использование RPC позволяет ускорить обмен данными между сервисами.
Оверхед* — это дополнительные ресурсы, затрачиваемые на выполнение задачи, которые не приносят прямого результата, но необходимы для поддержания работы системы.
Комментарии (11)
INSTE
19.06.2024 18:19+11На фразе что "RPC бинарный, а REST текстовый" где-то вдалеке заплакали всякие SOAP и CORB'ы.
Вообще статья даже хуже, чем написал бы ChatGPT: RPC и REST это ортогональные вещи, которые (сюрприз!) могут быть реализованы в том числе посредством друг друга.dph
19.06.2024 18:19+2Не совсем. REST предполагает операции над ресурсами и первичны именно ресурсы, в RPC единицей является вызываемый метод. Так что все-таки это разные идеологии. Впрочем, автор статьи, конечно, ничего не знает ни о REST, ни о RPC.
Akina
19.06.2024 18:19Ответ: RPC (Remote Procedure Call) — это протокол, позволяющий программе на одном компьютере вызвать функцию на другом компьютере так, будто эта функция находится на первом компьютере.
Что, вот реально строго-настрого запрещено использовать RPC для информационного обмена в пределах одного хоста? Или всё-таки насчёт обязательности другого компьютера - это неоправданный перебор?
будто эта функция находится на первом компьютере.
Некорректно. Та же функция, но вызванная локально, скорее всего вернёт совсем иной результат.
KLIJIN
19.06.2024 18:19+1Вопрос: RPC можно на фронте использовать или это чисто бэковская история?
INSTE
19.06.2024 18:19+1В далекой-далекой галактике в 1997 году MS сотоварищи специально для использования во фронте придумали XML-RPC. А уж сколько с тех пор понаписали вариантов RPC для фронта - никто не считает.
vitiok78
19.06.2024 18:19Если пишете и фронт и бэк на Typescript, то есть отличное решение для такого стека - TRPC
zubrbonasus
19.06.2024 18:19Удалённый вызов процедур (иногда вызов удалённых процедур; RPC от англ. remote procedure call) — класс технологий, позволяющих программам вызывать функции или процедуры в другом адресном пространстве (на удалённых узлах, либо в независимой сторонней системе на том же узле). Обычно реализация RPC-технологии включает два компонента: сетевой протокол для обмена в режиме клиент-сервер и язык сериализации объектов (или структур для необъектных RPC). Различные реализации имеют отличающуюся друг от друга архитектуру и разнятся в возможностях: одни реализуют архитектуру SOA, другие — CORBA или DCOM. На транспортном уровне RPC используют в основном протоколы TCP и UDP, однако, некоторые построены на основе HTTP.
Существует множество технологий, обеспечивающих RPC, среди них:
DCE/RPC — двоичный протокол на базе различных транспортных протоколов, в том числе TCP/IP и Named Pipes из протокола SMB/CIFS;
DCOM — объектно-ориентированное расширение DCE/RPC, позволяющее передавать ссылки на объекты и вызывать методы объектов через таковые ссылки;
Microsoft RPC;
gRPC;
ZeroC ICE;
JSON-RPC — текстовый протокол на базе HTTP[1]
.NET Remoting — двоичный протокол на базе TCP, UDP, HTTP;
Java RMI — вызов удалённых методов для платформы Java[2];
SOAP — текстовый протокол на базе HTTP[3];
Sun RPC — двоичный протокол на базе TCP и UDP и XDR[4], второе название — ONC RPC[5];
XML RPC — текстовый протокол на базе HTTP[6].
AndrewT2
19.06.2024 18:19Этой аббревиатуре 20+ лет, как и технологии.
MS на DCOM реализовывал как вариант.
GennPen
То есть, по RPC получив доступ можно вызывать любую функцию? Что с защитой в этом плане?