gRPC: Удалённый вызов процедур за 10 минут

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

Удалённый вызов процедур (RPC)

RPC — форма взаимодействия клиент-сервер, основанная на вызове функций. Используется IDL (язык определения интерфейса) для описания контракта на вызываемые функции и типов данных.

Клиент вызывает удалённую процедуру, сериализует параметры и дополнительную информацию в сообщение, отправляя его на сервер. Сервер десериализует сообщение, выполняет запрашиваемую операцию и отправляет результат обратно клиенту. Стабы клиента и сервера упрощают реализацию сериализации и десериализации.

gRPC заимствует архитектурный стиль взаимодействия клиент-сервер с вызовами функций из RPC, улучшая и популяризируя эту концепцию.

gRPC: Google’s RPC

В 2015 году Google открыла исходный код проекта gRPC. Популярность gRPC обусловлена:

  • Абстракцией: gRPC представляет собой простой вызов функции.
  • Многоязычной поддержкой: gRPC доступен для многих языков программирования.
  • Высокой эффективностью: gRPC отличается высокой производительностью.
  • Упрощением HTTP-вызовов: gRPC упрощает работу с HTTP, особенно по сравнению со сложными HTTP-запросами.

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

Архитектура и производительность gRPC

Высокая производительность gRPC обусловлена:

  • HTTP/2: gRPC использует HTTP/2 как транспортный протокол, заменивший HTTP/1.1 и обеспечивающий ряд преимуществ.
  • Мультиплексированием запросов и ответов: HTTP/2 позволяет отправлять и получать несколько запросов и ответов в одном соединении, в отличие от HTTP/1.1, где для каждого запроса требовалось отдельное соединение. Это достигается двоичным кадрированием.
  • Сжатием заголовков (HPACK): HTTP/2 сжимает заголовки, уменьшая размер полезной нагрузки, особенно когда заголовки больше данных. Сервер и клиент хранят и сравнивают заголовки, отправляя только изменяющиеся значения.
  • Protocol Buffers (protobuf): protobuf — IDL (язык определения интерфейса), используемый в gRPC. Он позволяет эффективно кодировать данные, уменьшая размер полезной нагрузки и повышая производительность по сравнению с JSON.

Возможности gRPC

gRPC предлагает:

  • Метаданные: Позволяют передавать дополнительные данные, подобные HTTP-заголовкам, но на более гибком уровне.
  • Потоковую передачу: Разрешает выполнять несколько операций в одном запросе. Существуют три типа: серверная потоковая передача (один запрос, несколько ответов), клиентская потоковая передача (несколько запросов, один ответ) и двунаправленная потоковая передача.
  • Перехватчики: Позволяют перехватывать и изменять запросы и ответы, добавляя функциональность (например, логирование, аутентификацию или балансировку нагрузки).
  • Балансировку нагрузки: gRPC поддерживает балансировку нагрузки на стороне клиента, используя DNS-преобразователь и алгоритмы балансировки.
  • Отмену вызова: Клиент может отменить gRPC-вызов, что особенно полезно для потоковой передачи.

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

Что будем искать? Например,программа