gRPC on Go: Contracts, Streaming, Production
Научитесь связывать Go-сервисы по gRPC так, чтобы контракт переживал релизы, а вызовы переживали отказы соседей: protobuf и проверка совместимости через buf, четыре формы вызовов включая стриминг с обратным давлением, коды статусов и богатые ошибки, дедлайны и ретраи с бюджетом попыток сквозь цепочку, mTLS и авторизация по методам, тесты через bufconn, метрики и клиентская балансировка. Финал — капстоун из трёх частей: REST-фасад с двумя версиями контракта одновременно, пара сервисов «заказы и журнал событий» и защищённый сервис, который принимается прогоном с отказами.
Плюс профессиональные блоки: что возвращать вместо строковых ошибок, когда стрим дешевле серии вызовов, почему обычный балансировщик плохо дружит с gRPC, дедлок в bidi-стриме, health и reflection, бенчмарки по реальным числам. Лабораторные на живом gRPC-сервере и клиенте в песочнице.
Чему вы научитесь
- Описывать контракты в protobuf: номера и типы полей, бинарный формат, enum, oneof, map, отличие нуля от «не задано» — с бенчмарком размера и скорости против JSON.
- Генерировать код через buf и держать контракт по конвенциям: buf lint, пакеты и версии, reserved и запрет на переиспользование номеров; поднимать unary-сервис и вызывать его из клиента с дедлайном.
- Развивать контракт без поломки клиентов: какие правки .proto совместимы, что ловит buf breaking против опубликованной версии, как обслуживать v1 и v2 в одном сервере, пока старые клиенты ещё в проде.
- Реализовывать все четыре формы вызовов: unary, server streaming с обратным давлением для медленного подписчика, client streaming с агрегацией, bidirectional без дедлока при любом темпе клиента.
- Возвращать ошибки как инженер: коды статусов вместо голых строк, BadRequest со всеми невалидными полями сразу, Unknown как признак необработанной паники, дедлайны и отмена сквозь цепочку сервисов, ретраи с джиттером, идемпотентностью и остановкой по отмене вызывающей стороны.
- Выносить сквозную логику в перехватчики: логирование, восстановление после паники, метрики, сквозной request-id через Gateway и Backend.
- Закрывать периметр: TLS и mTLS, авторизация по методам, лимиты размера сообщения, keepalive и время жизни соединения.
- Тестировать gRPC без открытых портов: bufconn, тесты потоков, статусов и отмены, тест-дубли; health и reflection, чтобы балансировщик и grpcurl видели сервис.
- Измерять по числам: бенчмарки двух вариантов обмена, keepalive и размер сообщения, метрики Prometheus и трассировка, graceful shutdown цепочки хопов.
- Балансировать на клиенте по нескольким бэкендам и доводить сервис до дежурства по чек-листу готовности; собирать REST-фасад через grpc-gateway поверх работающего gRPC с двумя версиями контракта.
О курсе
Этот курс — про то, как связывать Go-сервисы по gRPC так, чтобы контракт переживал релизы, а вызовы переживали отказы соседей. От первого .proto до сервиса, который держит дедлайны, обслуживает старых и новых клиентов одновременно и понятен на дежурстве по метрикам и трассировке.
Внутри — лабораторные на живом gRPC: ваш сервер и клиент поднимаются в песочнице с protoc, buf и генераторами, и зачёт ставится по поведению. К серверу подключается клиент старой версии контракта; подписчика стрима притормаживают и считают, сколько сервер вытянул впрок; подсовывают сертификат от чужого CA; гасят бэкенд и ждут переключения трафика. Ваши тесты прогоняются против испорченных реализаций сервиса и обязаны упасть на каждой. Фикстуры подменяются: захардкодить ответ не получится.
Контракт разобран как публичный API: какие правки .proto ломают клиентов, зачем reserved и запрет на переиспользование номеров, чем oneof отличается от optional и как держать v1 и v2 в одном сервере. Ошибки, дедлайны и ретраи разобраны сквозь цепочку сервисов, а перехватчики, mTLS и лимиты — как периметр, который выдерживает чужие вызовы.
Финал — капстоун из трёх частей: REST-фасад через grpc-gateway с v1 и v2 одновременно поверх сервиса каталога; два сервиса «заказы и журнал событий» поверх общего журнала с проверкой сумм, кодов ошибок и порядка событий в потоке; сервис OpsGuard с авторизацией, дедлайнами и ретрай-клиентом, который принимается прогоном с отказами: неавторизованные вызовы, зависшие операции, недоступная зависимость. Курс готовит одновременно к проду и к вопросам про gRPC на собеседовании: каждый модуль заканчивается практикой, которую спрашивают в сильных командах.
Вы также можете задать любой вопрос по курсу у поддержки t.me/mentorix_support
Для кого этот курс
Для Go-разработчиков, которые пишут сервисы и хотят собрать первую версию gRPC-контракта так, чтобы она пережила следующие релизы, а вызовы между сервисами переживали отказы зависимостей.
Для тех, кто уже использует gRPC по примерам из документации, но версионирование контракта, стриминг, дедлайны и балансировка до сих пор вызывают вопросы — и на собеседованиях, и на дежурстве.
Подойдёт бэкендерам с других языков, знающим основы Go: gRPC и protobuf разбираются с нуля, окружение с protoc, buf и генераторами уже в песочнице, ставить ничего не нужно.
Программа курса
Модулей: 8, уроков: 29. Задачи с кодом проверяются автоматически.
Контракт и первый сервис
- Когда gRPC выигрывает у REST, а когда проигрывает
- Protobuf: поля, номера и бинарный формат
- Кодогенерация и первый unary-сервис
- Практика: контракт и сервис с нуля
Контракт как публичный API
- Конвенции и buf lint
- Эволюция контракта: что ломает клиентов
- enum, oneof, map и отличие нуля от «не задано»
- Практика: развитие сервиса без поломки клиентов
Стриминг: три формы и обратное давление
- Server streaming: сервер отдаёт поток
- Client streaming: клиент шлёт поток
- Bidirectional streaming и типичный дедлок
- Практика: выбор формы и обратное давление
Ошибки, дедлайны, ретраи
- Коды статусов и богатые ошибки
- Дедлайны и отмена сквозь цепочку сервисов
- Практика: ретраи, идемпотентность и бюджет попыток
Перехватчики, метаданные, безопасность
- Перехватчики: сквозная логика без копипасты
- Метаданные и сквозной идентификатор запроса
- TLS, mTLS и авторизация по методам
- Практика: закрытый периметр и лимиты
Тестирование gRPC-сервисов
- bufconn: полный стек без портов
- Тесты потоков, ошибок и тест-дубли
- Практика: health, reflection и тестовый набор
Производительность и эксплуатация
- Соединения, keepalive и размер сообщения
- Бенчмарки: измерять, а не спорить
- Наблюдаемость и корректное завершение
- Практика: балансировка и дежурство
Капстоун: межсервисный контур
- REST-фасад и границы версий
- Капстоун, часть 1: контракт и сервисы
- Капстоун, часть 2: устойчивость, защита, вердикт
Стоимость курса: 8990 ₽
Открыть курс на Mentorix · Все курсы