RPC框架
2026/3/25大约 2 分钟
RPC 框架
RPC(Remote Procedure Call,远程过程调用)让调用远程服务像调用本地方法一样简单。你不需要关心网络通信、序列化、负载均衡——框架帮你做了。这篇文章讲清楚 RPC 的核心原理和主流选型。
基础入门:RPC 是什么?
为什么需要 RPC?
服务 A 要调用服务 B 的方法:
1. HTTP REST:发 HTTP 请求 → 性能有损耗(JSON 序列化、HTTP 头部大)
2. RPC:像调用本地方法一样调用远程方法 → 性能好(二进制协议、高效序列化)RPC vs HTTP REST
| 维度 | HTTP REST | RPC (gRPC) |
|---|---|---|
| 协议 | HTTP/1.1 | HTTP/2 |
| 序列化 | JSON(可读但慢) | Protobuf(快但不可读) |
| 接口定义 | 无(靠文档) | Proto 文件(强类型) |
| 适用场景 | 对外 API | 服务间调用 |
RPC vs HTTP
HTTP:
- 通用协议,跨语言
- 报文头大(几百字节),冗余信息多
- 通常用 JSON 序列化(可读性好但体积大)
- 适合:对外 API、与前端/第三方对接
RPC(如 gRPC):
- 二进制协议,报文小
- 通常用 Protobuf 序列化(体积小、解析快)
- 有服务发现、负载均衡、熔断等微服务特性
- 适合:服务间内部调用RPC 的核心流程
1. 服务注册:服务启动时注册到注册中心(Nacos)
2. 服务发现:消费者从注册中心获取提供者列表
3. 负载均衡:选择一个提供者实例
4. 序列化:将请求参数序列化为二进制
5. 网络传输:通过 TCP 发送给提供者
6. 反序列化:提供者反序列化请求,执行方法
7. 序列化结果 → 网络传输 → 消费者反序列化主流选型
gRPC(Google):
- 基于 HTTP/2(多路复用、头部压缩、双向流)
- Protobuf 序列化(体积小、速度快)
- 跨语言(Proto 文件生成各语言代码)
- 推荐场景:微服务间调用
Dubbo(阿里):
- Java 生态,与 Spring 深度集成
- 丰富的服务治理功能(路由、降级、灰度)
- 社区活跃,国内使用广泛
- 推荐场景:Java 微服务
OpenFeign(Spring Cloud):
- 声明式 HTTP 客户端
- 使用简单,学习成本低
- 性能不如 gRPC(HTTP + JSON)
- 推荐场景:小项目、对性能要求不高面试高频题
Q1:gRPC 为什么比 HTTP/1.1 快?
HTTP/2 的多路复用(一个 TCP 连接可以并行多个请求/响应)消除了队头阻塞。头部压缩(HPACK)减少了重复头部的传输。Protobuf 二进制序列化比 JSON 体积小 3-10 倍,解析快 20-100 倍。

