Skip to content
EN

Что такое gRPC

Коротко:

gRPC (gRPC Remote Procedure Calls) — высокопроизводительный open-source RPC-фреймворк от Google (2015). Использует Protocol Buffers для сериализации (в 5-10× компактнее JSON), HTTP/2 для транспорта, поддерживает bidirectional streaming. Популярен для межсервисной коммуникации в микросервисах. Не подходит для browser-клиентов без grpc-web адаптера.

Ниже: подробности, пример, смежные термины, FAQ.

Проверить свой сайт →

Подробности

  • Определение интерфейса: .proto files с описанием service и messages
  • Сериализация: Protocol Buffers (binary, compact)
  • Транспорт: HTTP/2 (multiplexing, bidirectional)
  • Streaming: unary, server-streaming, client-streaming, bidirectional
  • Client code generation для 10+ языков (Go, Java, Python, C++, Ruby, Node.js)

Пример

service UserService {
  rpc GetUser (GetUserRequest) returns (User);
  rpc ListUsers (Empty) returns (stream User);  // server-streaming
}

Смежные термины

Что такое gRPC и его отличие от REST

gRPC (gRPC Remote Procedure Calls) — это современный фреймворк для удаленных вызовов процедур, который использует HTTP/2 и протоколы сериализации данных, такие как Protocol Buffers. В отличие от REST, который основан на архитектуре HTTP/1.1 и использует текстовые форматы, gRPC обеспечивает более высокую производительность и меньшую задержку благодаря бинарной сериализации и поддержке потоковой передачи данных.

Технические особенности gRPC

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

Основные отличия gRPC от REST:

  • Протокол: gRPC использует HTTP/2, в то время как REST работает на основе HTTP/1.1.
  • Формат передачи данных: gRPC использует бинарный формат (Protocol Buffers), что делает его более эффективным по сравнению с текстовыми форматами (JSON, XML) в REST.
  • Поддержка потоковой передачи: gRPC позволяет реализовывать двустороннюю потоковую передачу данных, что невозможно в стандартном REST API.
  • Скорость: Благодаря бинарной сериализации и использованию HTTP/2, gRPC обеспечивает более высокую скорость обработки запросов.

Для создания gRPC-сервиса необходимо определить сервис и его методы в .proto файле. Например:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

После этого можно сгенерировать код для нужного языка программирования и реализовать серверную и клиентскую части.

Когда использовать gRPC вместо REST

Выбор между gRPC и REST зависит от требований вашего проекта. gRPC подходит для микросервисной архитектуры, где необходима высокая производительность и возможность работы с большим количеством одновременно открытых соединений. Например, в приложениях реального времени, таких как видеозвонки или онлайн-игры, gRPC будет более эффективным. Также стоит рассмотреть использование gRPC, если у вас есть необходимость в двусторонней потоковой передаче данных.

С другой стороны, REST API лучше подходит для веб-приложений, где требуется высокая совместимость и простота использования. Он удобен для интеграции с браузерами и хорошо поддерживается различными инструментами и библиотеками.

Таким образом, для проектов с высокими требованиями к производительности и масштабируемости gRPC будет предпочтительным выбором. В то же время для простых API и приложений, ориентированных на взаимодействие с пользователями, REST будет более подходящим вариантом.

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

Больше по теме

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

gRPC vs REST?

gRPC — binary, fast, backed by Protocol Buffers; для internal microservices. REST — text JSON, human-readable, universal для public API.

Работает ли gRPC в браузере?

Напрямую — нет, т.к. нет доступа к HTTP/2 frame control. Используйте grpc-web (proxy) или gRPC-Gateway (REST-to-gRPC).

Как отладить gRPC?

grpcurl — curl-like CLI. Или BloomRPC GUI. <a href="/check">Enterno HTTP checker</a> помогает с REST-gateway endpoints.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.