gRPC 是什么
RPC vs REST;HTTP/2、二进制协议优势。
30 分钟
gRPC 是什么
gRPC 是 Google 开源的高性能 RPC 框架:基于 HTTP/2 与 Protocol Buffers 二进制序列化,服务间调用延迟低、契约强类型。它与 REST 互补——不是 CodeRoadMap 对外主 API 的默认选择。
学习目标
- 区分 RPC 与 REST 的通信模型
- 理解 HTTP/2 多路复用、二进制帧对微服务的意义
- 明确本站 生产
/tracks仍走 REST;gRPC 用于 lab 微服务实验
核心内容
RPC vs REST
| REST(本站主 API) | gRPC(lab 微服务) | |
|---|---|---|
| 契约 | OpenAPI / JSON 约定 | .proto 强类型 |
| 传输 | HTTP/1.1 或 HTTP/2 + JSON | HTTP/2 + Protobuf |
| 浏览器 | 直接 fetch 友好 | 需 gRPC-Web / Gateway |
| 适用 | 公开课程 API、SEO | 内网服务间、高吞吐 |
本站 platform 对外:
GET /tracks → JSON 课程列表
GET /tracks/{slug} → track 元数据
这是 spring-boot-essentials 的 @RestController 模式,与 graphql-essentials 中「主 API 非 GraphQL」的立场一致——gRPC 同理,不替换 /tracks。
gRPC 调用示意
Client (ManagedChannel + Stub)
│ HTTP/2 + Protobuf
▼
Server (BindableService)
└── TrackService.GetTrack(GetTrackRequest) → GetTrackResponse
四种模式:Unary、Server streaming、Client streaming、Bidirectional streaming(见 grpc-streaming)。
何时值得学 gRPC
- 微服务间高频、低延迟调用(配合 spring-cloud-essentials 服务发现)
- 多语言团队共享
.proto契约 - 流式推送(进度、日志 tail)
CodeRoadMap 课程站点读多写少、Next.js 直接调 REST——REST 足够;本 track 在 lab-grpc profile 动手。
练习
- 用 curl 访问本站
/tracks,记录 Content-Type 与响应格式 - 画对比图:浏览器 → REST
/tracksvs 微服务 A → gRPC → 微服务 B