gRPC vs REST:什么时候该用 gRPC?

微服务通信选 REST 还是 gRPC?

核心差异

维度 REST gRPC
协议 HTTP/1.1 HTTP/2
数据格式 JSON (文本) Protobuf (二进制)
接口定义 无强制约定 .proto 文件
代码生成 手动/OpenAPI 自动
流式传输 不支持 原生支持

Protobuf:体积就是优势

message User {
  int64 id = 1;
  string name = 2;
  string email = 3;
}

JSON 渲染:{"id": 123, "name": "张三", "email": "zhang@test.com"} → 58 bytes Protobuf 编码:→ ~30 bytes,节省 ~50%

在高频调用场景,累计带宽差距显著。

HTTP/2 多路复用

HTTP/1.1:  连接1 [req1 → res1] | 连接2 [req2 → res2]  ← Head-of-line blocking
HTTP/2:    单连接 [req1,req2,req3] → [res2,res1,res3]  ← 多路复用

什么时候用 gRPC

  • ✅ 微服务间高频内部调用
  • ✅ 需要流式传输(实时推送、大文件)
  • ✅ 多语言环境(代码自动生成)
  • ✅ 性能敏感场景

什么时候用 REST

  • ✅ 对外 API(浏览器兼容)
  • ✅ 简单 CRUD
  • ✅ 需要缓存(HTTP 缓存天然支持)
  • ✅ 团队不熟悉 Protobuf

内部用 gRPC,对外用 REST——这是目前的主流选择。


参考来源:

关于 Zihao Zhang

后端开发工程师。关注 Java/Spring Boot/Redis/MySQL 技术栈,分布式系统,OLAP 数据库,AI Agent 开发与应用。

评论

评论已关闭。