gRPC и Protobuf
Тема дорожной карты · Golang
gRPC с Protocol Buffers (Protobuf) — ведущий фреймворк Go для высокопроизводительного межсервисного взаимодействия, широко используемый в cloud-native инфраструктуре, включая Kubernetes, etcd и любую микросервисную архитектуру, требующую строго типизированных версионированных API. Контракты сервисов определяются в .proto-файлах с использованием Protobuf IDL, а компилятор protoc с плагинами protoc-gen-go и protoc-gen-go-grpc генерирует Go-код как для типов сообщений (pb.UserRequest, pb.UserResponse), так и для заглушек сервиса (pb.UserServiceServer, pb.UserServiceClient). gRPC-сервер запускается регистрацией реализации сгенерированного серверного интерфейса в grpc.NewServer() и приёмом подключений на TCP-listener, а клиенты соединяются через grpc.NewClient(addr, grpc.WithTransportCredentials(...)) для получения заглушки типизированных RPC-вызовов. gRPC с Protocol Buffers поддерживает четыре типа вызовов — унарный, серверный стриминг, клиентский стриминг и двунаправленный стриминг — все поверх мультиплексированных HTTP/2-соединений. Пакет google.golang.org/grpc глубоко интегрируется с пакетом context для распространения дедлайнов, а gRPC-Gateway добавляет уровень трансляции REST так, что один и тот же Protobuf-сервис может обслуживать HTTP/JSON-клиентов.
Как это работает
gRPC и Protobuf — HTTP/2-based RPC с Protocol Buffers (.proto) как языком схемы. protoc + protoc-gen-go-grpc генерируют Go-server + client stubs из .proto-файлов. Streaming-варианты (unary, server-streaming, client-streaming, bidi). Reflection для introspection (grpcurl). Connect-go (альтернатива Buf) даёт gRPC-совместимые HTTP/1 + HTTP/2 серверы — interoperable с gRPC-клиентами. gRPC-Gateway экспонирует gRPC-сервисы как REST + OpenAPI.
Когда применять
gRPC — для internal service-to-service, когда важны latency + schema-дисциплина; типизированные контракты ловят много багов на compile time. В паре с Buf — для build + lint proto-файлов. Для публичных API — gRPC-Gateway или Connect для REST/HTTP рядом. Для browser-to-server Connect-go чище, чем gRPC-Web. Избегайте gRPC для одноразовых скриптов или крошечных сервисов — REST проще.
Типичные ошибки
Ловушки gRPC и Protobuf: регенерация proto-файлов без коммита (CI ломается из-за отсутствия сгенерированного кода); breaking changes в .proto без bump версии (клиенты валятся непонятным образом); огромные proto-пакеты, затрагивающие каждый сервис на изменение; игнор context.Context deadlines (вызовы висят навеки).