Продвинутый

gRPC изнутри: Protobuf, стриминг, deadlines

Урок 2 из 3 в курсе gRPC и GraphQL: альтернативы REST

Содержание курса (2/3)

gRPC изнутри: Protobuf, стриминг, deadlines

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

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

Главная идея

Protobuf-схема — источник истины. Из неё генерируются и сервер, и клиенты на любых языках.

Как это выглядит на практике

  1. Команда описывает .proto файл: сообщения и сервисы.
  2. protoc генерирует код для Go, TypeScript, Python.
  3. Server и клиенты используют один и тот же контракт.
  4. При обновлении контракта обе стороны получают типобезопасные API.

Что происходит под капотом

  • Unary RPC: запрос → ответ, как REST.
  • Server streaming: один запрос → поток ответов.
  • Client streaming: поток запросов → один ответ.
  • Bidirectional streaming: два потока в обе стороны.
  • Deadlines (timeouts) — обязательная часть gRPC, передаются между сервисами автоматически.

Типичные ошибки и заблуждения

  • Ошибка: gRPC работает только в Go. Поддерживаются все основные языки.
  • Ошибка: streaming = WebSocket. Это разные механизмы и протоколы.
  • Ошибка: deadlines необязательны. Без них один медленный сервис вешает всю систему.
  • Ошибка: Protobuf — просто формат. Это контракт + бинарная сериализация + версионирование.

Ключевые выводы

  • Protobuf — источник истины для контракта.
  • 4 типа RPC покрывают почти все use cases.
  • Deadlines обязательны для отказоустойчивости.
  • Кодогенерация устраняет рассинхронизации клиента и сервера.

Термины урока

Protobuf: Protocol Buffers, формат сериализации Google.
RPC: Remote Procedure Call, удалённый вызов процедур.
Deadline: предельное время выполнения запроса.
Streaming: непрерывный поток сообщений вместо одиночного запроса/ответа.

Связь с работой backend-разработчика

gRPC — стандарт de facto для service-to-service в крупных компаниях. Опыт с ним сильно повышает ценность backend-разработчика на рынке.

Мини-разбор реальной ситуации

Команда забыла настроить deadlines для внутренних gRPC-вызовов. При сбое одного сервиса все остальные начали накапливать висячие вызовы и упали по нехватке памяти.

Что запомнить

  • Protobuf — это контракт.
  • Deadlines — обязательны.
  • Streaming решает специфические задачи.

Итог

gRPC — мощный инструмент для high-performance backend, но требует понимания базовых механизмов.

Комментарии к уроку

Войдите, чтобы оставить комментарий.

Пока нет комментариев — будьте первым.