理解RPC

301 阅读3分钟

什么是 RPC?

RPC(Remote Procedure Call)远程过程调用
是一种通信机制,允许调用远程服务器上的函数,就像本地方法一样自然透明。


为什么需要 RPC?

随着微服务架构流行,系统被拆分为多个服务部署在不同主机或进程中,传统的本地方法调用失效。此时:

  • 服务之间需要跨网络通信

  • 需要一种机制来隐藏底层通信细节

  • 提升开发效率与调用一致性

RPC 本质是思想

RPC = 本地调用抽象 + 通信实现机制

  • 屏蔽底层传输细节
  • 实现接口驱动式开发
  • 提升开发体验和性能

RPC 核心组成

组件作用
客户端 Stub本地伪装函数,封装参数发起远程请求
服务端 Stub解包请求,调用本地逻辑,返回结果
通信协议(TCP/HTTP)控制数据如何在网络上传输
序列化协议(Protobuf)控制参数如何压缩/还原
服务注册与发现动态发现服务地址(如 Nacos)
负载均衡与容错机制提升系统可用性与稳定性
健康检查与连接管理服务节点存活监测、长连接维持

RPC ≠ 非 HTTP

RPC 是调用方式,HTTP 只是传输协议之一

误区正确认识
RPC = TCP现代 RPC 框架如 gRPC/Dubbo3 也支持 HTTP/2,协议可插拔
HTTP 性能差HTTP/2 支持多路复用、头部压缩,配合 Protobuf 也能高性能
REST 比 RPC 简单REST 面向资源建模适合对外接口,RPC 面向行为接口更适合内部调用

RPC 是一种调用范式,可使用 TCP、HTTP、HTTP/2 等协议,关键在于屏蔽通信细节,模拟本地调用

RPC vs RESTful

RPC 和 RESTful 都是服务间通信方式,但它们本质上是两种完全不同的设计思想

对比维度RPCRESTful
核心思想面向行为:调用一个远程方法(函数 + 参数)面向资源:对 URL 表示的资源进行操作(GET/POST)
接口建模方式接口抽象为方法,强调方法名 + 参数类型,强类型接口接口抽象为资源路径,强调动词语义,统一资源风格
协议层多种协议可选(TCP、HTTP、HTTP/2、QUIC)基于 HTTP 协议栈构建
序列化方式通常用 Protobuf、Thrift(高性能二进制协议)JSON、XML(文本格式,易读但开销大)
开发体验像调用本地方法一样(工具生成客户端 Stub)请求手动拼接 URL + 参数,开发体验相对一般
性能表现更高性能:长连接、连接复用、压缩传输、协议轻量开销更高:短连接、文本传输
常见场景服务间调用(Service-to-Service)开放 API、Web 服务、前后端接口
典型代表gRPC、Dubbo、ThriftSpring MVC、Express、FastAPI

可视结构图:RPC 通信流程

   [客户端代码] --> [Stub] --> [序列化] --> [传输协议] --> [服务端 Stub] --> [服务实现]
           |                                                               |
     像本地方法一样调用                                      响应数据 --> 返回结果

一句话记住 RPC

RPC 是一种“让你感觉在本地调用”的远程通信机制。它本身就是思想 + 工具链的集合。