gRPC и HTTP/2: как работает

↑ 5.2 gRPC · → Следующая

Обязательно~3 мин чтенияУровень: middle

Зачем это на собесе

Ждут понимания, почему gRPC быстрее REST и какие у него ограничения.

Объяснение

gRPC — RPC-фреймворк от Google: контракт описывается в .proto, транспорт — HTTP/2, сериализация — Protocol Buffers (бинарная).

СвойствоКак даёт эффект
HTTP/2мультиплексирование запросов в одном соединении, сжатие заголовков (HPACK), двусторонний стриминг
Protobufкомпактный бинарный формат, быстрая (де)сериализация
Кодогенерациятипизированные клиент и сервер на многих языках
Стримингserver, client и bidirectional
Deadlinesвстроенный тайм-аут, передаваемый по цепочке вызовов

Вызов выглядит как вызов метода, но это сетевой вызов: у него есть сбои и задержка.

Ограничения

  • Браузер не может вызывать gRPC напрямую (нужен gRPC-Web или transcoding).
  • Отладка сложнее: бинарный формат (используйте grpcurl, Postman, Kreya).
  • Балансировка: длинные HTTP/2-соединения требуют L7-балансировщика или клиентской балансировки.
  • Меньше подходит для публичных API.

Нюансы и подводные камни

  • Один канал GrpcChannel создаётся один раз и переиспользуется (как HttpClient), а не на каждый вызов.
  • Балансировщик L4 привязывает все вызовы одного соединения к одному поду.
  • Требуется HTTP/2 с TLS (ALPN) или h2c внутри сети.
  • Для больших сообщений лимит по умолчанию 4 МБ на приём.

Практика

  1. Сравните latency и размер сообщения REST и gRPC на одном сервисе.
  2. Вызовите сервис через grpcurl с reflection.
  3. Настройте клиентскую балансировку по DNS.

Вопросы с ответами

Связанные темы