Skip to content

08 · gRPC 与流式 RPC ​

微服务内部通信常看到 gRPC:性能更好、接口有约束、支持流式。本篇讲它与 REST 的取舍、四种调用模式与落地注意;服务间 API 风格总览见 C02 API 设计。

速览卡 ​

项内容
一句话定位gRPC 是什么、什么时候用它、流式怎么落地
核心内容protobuf、四种模式、与 REST 取舍、HTTP/2 依赖
读完能回答内部服务为什么爱用 gRPC?什么时候不该用?
相关板块N04 HTTP | N09 代理与网关 | C05 服务架构

一、它是什么 ​

text
定义接口(.proto)→ 生成客户端/服务端代码 → HTTP/2 上传输
特点说明
接口约束.proto 即契约,改字段有明确兼容规则
二进制序列化protobuf 比 JSON 更小更快
传输层基于 HTTP/2,天然支持多路复用与流式
跨语言一套 .proto 生成各语言代码

二、四种调用模式 ​

模式描述场景
Unary一次请求一次响应普通 RPC,类 REST
Server streaming请求一次,响应多次日志、进度推送
Client streaming请求多次,响应一次批量上传
Bidirectional双向流实时协同、对话

三、与 REST 的取舍 ​

维度RESTgRPC
契约无强制 schema.proto 强约束
序列化JSON(可读)二进制(高效)
浏览器天然支持需 gRPC-Web 代理
调试curl 直接看需 grpcurl 等工具
适合对外 API、浏览器端内部服务、流式场景

判断框架:对外暴露给浏览器 → 优先 REST;服务间高性能/流式/强契约 → gRPC。硬要用 gRPC 对外会多一层代理成本。


四、落地注意 ​

事项说明
HTTP/2必需,代理层要支持
负载均衡需客户端感知实例列表,配合注册中心
版本兼容字段号不可复用,遵循 protobuf 兼容规则
调试用 grpcurl、gRPC 反射

五、自检清单 ​

  • [ ] 能说清 gRPC 为什么快、为什么强约束
  • [ ] 能列出四种调用模式并各举一例
  • [ ] 能按调用方判断 REST vs gRPC
  • [ ] 知道 gRPC 依赖 HTTP/2 与相应的部署注意

六、常见误区 ​

误区事实
"gRPC 一定比 REST 好"浏览器与对外 API 场景它反而麻烦
"gRPC 不用管版本"字段号复用会直接破坏兼容
"gRPC 不支持浏览器"需要 gRPC-Web 或代理桥接

七、动手练习 ​

练习 A:跑一个示例 ​

用官方 echo 示例生成代码,跑通 unary 与 server streaming 两种调用,观察请求耗时。

练习 B:对比序列化 ​

同一份数据结构分别用 JSON 与 protobuf 序列化,对比字节数与耗时。

练习 C:看 HTTP/2 ​

抓包观察 gRPC 流量,确认底层是 HTTP/2 帧(对照 N11 抓包)。


相关文档 ​

本区 ​

其他域 ​