Skip to content

gRPC

gRPC 是 Google 开源的高性能远程过程调用(RPC)框架——它用 Protocol Buffers(protobuf) 作为接口定义语言(IDL)与消息序列化格式,跑在 HTTP/2 之上,通过单个 TCP 连接的多路复用支撑四种调用模式(一元、服务端流、客户端流、双向流)。开发者只要写一份 .proto 描述「服务有哪些方法、每个方法的请求/响应消息」,gRPC 就能跨语言生成客户端 stub 与服务端骨架——C++、Java、Go、Python、Node、Rust 等 11+ 种语言互通。相比 REST/JSON,gRPC 用 protobuf 二进制编码(体积小 20%~70%、解析快 5~10 倍)、用 HTTP/2 多路复用(不再为并发请求开多条连接)、用流式调用天然适配实时数据(聊天、推送、大数据传输),是服务间内部通信(east-west)的事实标准

gRPC 的全部考点围绕协议与契约、服务方法、生态扩展展开:①协议基础(protobuf IDL + 编码、HTTP/2 帧、元数据/metadata、状态码、Channel/Stub、Deadline);②四种服务方法(Unary 一问一答、Server Streaming 服务端推流、Client Streaming 客户端攒批、Bidirectional 双向流——分别对应同步 API、订阅推送、批量上传、实时交互);③拦截器(Interceptor)(客户端/服务端两侧的中间件,用于认证、日志、链路追踪、指标埋点);④与 REST/GraphQL 对比(强契约 vs 无契约、二进制 vs JSON、HTTP/2 流式 vs HTTP/1.1 请求-响应、浏览器需 grpc-web 网关);⑤Connect(Buf 出品)——同一份 protobuf 生成「gRPC + Connect + HTTP/JSON」三协议,浏览器原生支持、无需 grpc-web 代理。本叶是 RPC 通信层的总览与地基,讲清 gRPC 的协议基础与四种方法、与 REST/GraphQL 的取舍、Connect 的现代化路径。

评价

优点

  • 强契约 + 跨语言:一份 .proto 生成多语言 stub,类型安全、字段变更由编译器兜底,告别 JSON 手写映射的运行时 bug
  • 高性能:protobuf 二进制紧凑(比 JSON 小 20%~70%)+ HTTP/2 多路复用(单连接并发)+ 头部压缩,延迟比 REST 低约 30%~70%
  • 四种流式模型:Server/Bidi Streaming 天然适配推送、聊天、大文件传输、实时行情,REST 做不到
  • 内置超时/重试/元数据:Deadline 一路传递、metadata 透传认证/trace 上下文,分布式语义完备
  • 生态成熟:Kubernetes、Envoy、Istio、OpenTelemetry 都原生支持 gRPC,CNCF 毕业项目(2018)

缺点

  • 浏览器不友好:gRPC 必须跑 HTTP/2,浏览器 fetch 受限,前端要用 grpc-web(需 Envoy 代理转码)或转 REST,接入门槛高
  • 对外 API 不如 REST 友好:gRPC 强契约适合内部服务,面向公网的第三方/移动端 REST + JSON 仍是主流(可读性、调试工具、CDN 缓存)
  • 人类不可读:protobuf 二进制需工具解码,curl + 浏览器 DevTools 直接看不了,调试链路长
  • 契约变更要小心:proto 字段增删要遵守向后兼容规则(字段号不能复用、改类型受限),团队需规范 proto 演进流程
  • 服务反射/网关需额外组件:默认没有 REST 那样的自描述能力,要 grpc-gateway 转一层或开 reflection

本叶地图

  • 入门 —— gRPC 是什么、protobuf IDL、HTTP/2 多路复用、四种服务方法、Channel/Stub、Deadline/Status Code
  • 协议与服务方法详解 —— protobuf 编码与演进规则、HTTP/2 帧结构、四种方法调用流程、metadata、拦截器(认证/日志/trace)
  • 与 REST/GraphQL 对比与 Connect —— gRPC vs REST vs GraphQL 选型矩阵、grpc-web 痛点、Connect(Buf)协议三合一方案
  • 参考 —— 四种方法速查、状态码清单、拦截器场景、proto 演进规则、易错点

幻灯片地址

gRPC

测试题

gRPC 测试题