← Назад ко всем вопросам

Что такое RPC и чем gRPC отличается от классического RPC?

1️⃣ Как кратко ответить

RPC, или удалённый вызов процедур, — это протокол, позволяющий программе вызывать функции на удалённом сервере так, как будто они локальные. gRPC — это современная реализация RPC, разработанная Google, которая использует HTTP/2 для транспортировки, поддерживает потоковую передачу данных и использует Protocol Buffers для сериализации, обеспечивая высокую производительность и межъязыковую совместимость.

2️⃣ Подробное объяснение темы

Что такое RPC?

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

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

Как работает классический RPC?

  1. Клиент вызывает функцию: Программа на клиентской стороне вызывает функцию, как если бы она была локальной.
  2. Сериализация данных: Аргументы функции сериализуются (преобразуются в формат, пригодный для передачи по сети).
  3. Отправка запроса: Сериализованные данные отправляются на сервер.
  4. Обработка на сервере: Сервер десериализует данные, выполняет функцию и сериализует результат.
  5. Возврат результата: Результат отправляется обратно клиенту, где он десериализуется и используется.

Чем gRPC отличается от классического RPC?

gRPC — это современная реализация RPC, разработанная Google. Она решает многие проблемы классического RPC и предлагает дополнительные возможности:

  • HTTP/2: gRPC использует HTTP/2, что позволяет поддерживать двунаправленную потоковую передачу данных, улучшает производительность и снижает задержки.

  • Protocol Buffers: Вместо текстовых форматов, таких как JSON или XML, gRPC использует Protocol Buffers (protobuf) для сериализации данных. Это бинарный формат, который более компактен и быстрее обрабатывается.

  • Межъязыковая совместимость: gRPC поддерживает множество языков программирования, что упрощает создание распределённых систем, где разные компоненты написаны на разных языках.

  • Потоковая передача: gRPC поддерживает как одноразовые запросы, так и потоковую передачу данных, что позволяет клиенту и серверу обмениваться данными в реальном времени.

  • Безопасность: gRPC изначально поддерживает шифрование и аутентификацию, что делает его более безопасным для использования в производственных средах.

Пример использования gRPC

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

# Пример определения сервиса с использованием Protocol Buffers
syntax = "proto3";
​
service ChatService {
  rpc SendMessage (MessageRequest) returns (MessageResponse);
  rpc ChatStream (stream MessageRequest) returns (stream MessageResponse);
}
​
message MessageRequest {
  string user = 1;
  string text = 2;
}
​
message MessageResponse {
  string status = 1;
}

В этом примере SendMessage — это одноразовый вызов, а ChatStream — потоковая передача, позволяющая обмениваться сообщениями в реальном времени.

Тема: HTTP / API
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки