RPC 全称:Remote Procedure Call ,中文叫远程过程调用。
一句话理解:
像调用本地函数一样,直接调用另一台服务器上的方法 / 函数,不用关心网络请求、协议、数据传输细节。
1. 核心作用
解决分布式系统服务之间的调用问题:
- 单体项目:所有代码在一台机器,方法直接本地调用;
- 微服务 / 分布式:用户服务、订单服务、支付服务部署在不同服务器,需要跨机器通信,RPC 就是干这个的。
2. 核心特点
- 透明调用调用远程方法 和 调用本地方法写法几乎一致,屏蔽网络底层。
- 高性能 相比 HTTP 接口(JSON + 文本、头信息多),RPC 一般用二进制序列化 、长连接、自定义协议,速度更快、开销更小。
- 跨语言 / 跨服务支持不同开发语言写的服务互相调用。
3. 简单调用流程
- 客户端(调用方)发起本地方法调用;
- RPC 框架自动封装请求数据、序列化、通过网络发给服务端;
- 服务端接收、反序列化、执行目标方法;
- 结果原路返回,客户端拿到返回值。
4. RPC 和 HTTP 区别(最常考)
表格
| 维度 | RPC | HTTP(RESTful) |
|---|---|---|
| 协议 | 自定义 TCP 协议(如 Dubbo、gRPC) | 标准 HTTP1.1/2/3 |
| 数据格式 | 二进制(Protobuf、Hessian) | JSON/XML 文本 |
| 性能 | 高、延迟低、适合内部服务 | 一般,适合对外接口 |
| 使用场景 | 微服务内部服务互调 | 前后端交互、第三方对外接口 |
| 可读性 | 差 | 强,调试方便 |
5. 主流常见 RPC 框架
- gRPC:谷歌开源,跨语言,Protobuf 序列化,云原生常用;
- Dubbo:阿里开源,Java 微服务经典 RPC 框架;
- Spring Cloud Alibaba Dubbo:国内电商、金融系统常用;
- Thrift:Facebook 开源,跨语言高性能。
6. 通俗举例
- 本地调用:你在自己家做饭,直接拿柜子里的锅;
- RPC 调用:你打电话给隔壁邻居,让邻居帮你拿一口锅送过来,你只需要喊一句(调用方法),不用管走路、敲门、传递过程。