Бинарный RPC: gRPC
gRPC — это бинарный RPC-фреймворк, разработанный Google. В отличие от текстовых RPC (JSON-RPC, SOAP, GraphQL), gRPC использует бинарный формат и работает строго поверх HTTP/2 (который, в свою очередь, работает поверх TCP).

Protocol Buffers
Для описания API и сериализации данных gRPC использует Protocol Buffers (protobuf). Вы пишете .proto-файл, в котором описываете структуры данных и методы сервиса. Из этого файла генерируется код (boilerplate) для нужного языка — он реализует парсинг, сериализацию и вызов методов.
Бинарный формат делает обмен более компактным и быстрым по сравнению с текстовыми протоколами, что особенно важно для внутренних микросервисных взаимодействий (back-to-back).
Возможности gRPC
Две интересные фичи:
- Тайм-аут запроса. В самом запросе можно указать максимальное время ожидания ответа. Если сервер не успевает обработать запрос за это время, он может просто прекратить работу над ним — не тратить ресурс впустую.
- Отмена запроса. Клиент, отправив запрос, может в любой момент отправить сигнал отмены — например, если пользователь передумал или ушёл со страницы. Сервер получит уведомление и остановит обработку.
Эти возможности специфичны для gRPC и в классических HTTP+REST встречаются реже.
Стриминг
Помимо обычного режима «запрос-ответ», gRPC поддерживает стриминг:
- Client-side streaming — клиент отправляет поток сообщений, сервер возвращает один ответ.
- Server-side streaming — клиент отправляет один запрос, сервер отвечает потоком сообщений.
- Bidirectional streaming — обе стороны обмениваются потоками сообщений в произвольном порядке.
Эта возможность стала возможной благодаря механике HTTP/2 — фреймам и стримам. Именно они позволяют организовать параллельную передачу данных в рамках одного соединения.
Область применения
gRPC ориентирован на back-to-back взаимодействия (микросервисы, внутренние сервисы) и даёт выигрыш в скорости и компактности за счёт бинарного протокола и генерации кода.
Резюме
- Бинарный протокол на основе Protocol Buffers.
- Работает строго поверх HTTP/2.
- Поддерживает тайм-ауты и отмену запросов.
- Три режима стриминга: client-side, server-side, bidirectional.
- Оптимален для микросервисной архитектуры и внутренних взаимодействий.