gRPC: от контракта до сервиса в проде
Уроки с примерами кода; тему можно сразу закрепить вопросами в тренажёре.
Материалы открываются после регистрации на Free.
Уроки по модулям
Как устроен вызов gRPC
3 урокаЧто gRPC обещает вызывающему коду и что на самом деле уходит в сеть: сервис и метод из контракта, сгенерированная заглушка, канал, статус и метаданные, а под ними поток HTTP/2 с сообщениями с префиксом длины и статусом в трейлерах.
- Что такое gRPC: вызов метода на другой машине по общему контракту
- Вызов gRPC: метод из контракта, а не запрос к ресурсу
- Вызов на проводе: поток HTTP/2, сообщения и трейлеры
Контракт на protobuf
2 урокаКак protobuf кодирует сообщение и что из этого следует для схемы: номера полей и типы на проводе, значения по умолчанию и наличие поля, enum и oneof, а затем правила развития схемы, по которым старый клиент продолжает работать.
- Protobuf на проводе: номер поля, тип и неотличимый ноль
- Эволюция схемы: какие изменения ломают старого клиента
Контракт как код
2 урокаКак orders.proto живёт в репозитории: генерация кода Go плагинами protoc, buf и EasyP, доставка контракта клиентам, линт схемы и проверка ломающих изменений против основной ветки в CI.
- Кодогенерация и доставка контракта
- Линт и проверка ломающих изменений в CI
Сервер и клиент
4 урокаСервис заказов как процесс: какой код статуса вернуть и как клиент на него отреагирует, что создаёт клиентский канал и когда открывается соединение, как дедлайн и повторы делят один бюджет времени по цепочке вызовов, как сервер останавливается, не обрывая вызовы, и сообщает о своей готовности.
- Коды статуса: исход вызова, по которому клиент выбирает реакцию
- Клиентский канал: когда открывается соединение
- Дедлайн и повторы: один бюджет на всю цепочку
- Остановка и health: сервер уходит, не обрывая вызовы
Интерцепторы и валидация
2 урокаГде в gRPC живёт сквозная логика (логи, метрики, аутентификация, восстановление после паники, валидация) и в каком порядке она выполняется, и почему правила проверки входных данных удобнее держать в самой схеме.
- Интерцепторы: сквозная логика вокруг вызова
- Валидация в схеме: protovalidate
Стриминг
2 урокаЧетыре вида вызова и что меняется, когда сообщений больше одного: управление потоком, медленный получатель, конец потока и ошибка посреди него, а затем подписка на события заказа, которая переживает обрыв и перезапуск сервера.
- Четыре вида вызова и медленный получатель
- Подписка на события заказа через поток
Граница с REST и браузером
1 урокКак сервис заказов отдаёт тот же контракт внешнему клиенту по REST и JSON и браузеру: gRPC-Gateway с аннотациями google.api.http, описание OpenAPI из той же схемы и чем это отличается от gRPC-Web.
- gRPC-Gateway: REST и OpenAPI из того же контракта
Сервис в проде
3 урокаЧто меняется, когда сервис заказов работает в несколько экземпляров: почему балансировка долгих соединений HTTP/2 не работает по привычке, какие метрики и трассы снимать с вызовов, и как сервисы доверяют друг другу через TLS, mTLS и токены в метаданных.
- Балансировка: одно соединение HTTP/2 на много вызовов
- Наблюдаемость вызовов: метрики, трассы и код статуса
- Безопасность: TLS, mTLS и токен в метаданных
О курсе
gRPC с нуля до сервиса уровня прода на одном сквозном примере: сервис заказов с одним контрактом orders.proto. Курс разбирает, что происходит при вызове на проводе HTTP/2, как protobuf кодирует сообщение и какие изменения схемы ломают старых клиентов, как контракт живёт в репозитории (кодогенерация, линт, проверка ломающих изменений в CI), а затем сервер и клиент: коды статуса, дедлайны и повторы, соединение, остановка и health, интерцепторы и валидация, стриминг и подписка на события, REST-шлюз, балансировка, наблюдаемость и безопасность. Код примеров на Go (grpc-go); цель — предсказывать поведение вызова под сбоем и нагрузкой, а не повторять туториал.