什么是RPC?

RPC

全称

Remote Procedure Call(远程过程调用),

是一种计算机通信协议


允许一台计算机(客户端)

通过网络

请求另一台计算机(服务器)上的服务程序

而无需了解底层网络技术的细节。


简单来说,

就是

“像调用本地函数一样

调用远程服务器上的函数”。

RPC的核心目标

RPC的设计初衷

简化分布式系统中不同节点之间的通信

让开发者

无需手动处理网络编程

(如socket连接数据序列化协议解析等),

专注于业务逻辑实现


透明性

开发者无需关心网络传输细节

远程调用体验本地函数调用一致。

高效性

通过优化协议序列化方式,减少通信开销

跨平台/跨语言

支持不同编程语言不同操作系统的节点之间通信

RPC的工作原理

RPC调用的完整流程

可拆解为以下步骤:

1、客户端发起调用

客户端通过

本地stub(存根)调用目标函数

传入参数。

2、参数序列化

stub函数名参数等信息

转换为

可在网络传输的二进制数据(序列化)

3、网络传输

通过底层网络协议(如TCPHTTP/2UDP等)

将数据

发送到服务器

4、服务器接收请求

服务器stub接收数据,

二进制数据

还原为

函数名参数反序列化)。

5、执行远程函数

服务器调用本地对应函数

执行业务逻辑

并生成返回结果

6、结果回传

服务器stub

将返回结果

序列化后

通过网络发送回客户端

7、客户端处理结果

客户端stub

反序列化数据,

将结果返回给调用者

RPC与其他通信方式的区别

通信方式特点适用场景
RPC面向函数/方法调用,抽象层次高,屏蔽网络细节分布式系统内部服务调用
HTTP API基于HTTP协议,通过URL和请求体传递数据,格式多为JSON/XML跨系统、跨语言的开放接口
Socket底层网络接口,需手动处理连接、数据编解码等,灵活性高但开发复杂高性能、定制化的通信需求

RPC相比HTTP API通常更高效(如使用二进制协议),但HTTP API更易调试和跨平台;相比Socket则大幅降低了开发复杂度。

常见的RPC框架

不同编程语言和场景下

有多种成熟的RPC框架

  • Java

    • Dubbo(阿里开源,高性能分布式服务框架)
    • Spring Cloud OpenFeign(基于HTTP的声明式RPC)
    • gRPC(跨语言,基于HTTP/2和Protobuf)
  • Go

    • gRPC(Go原生支持)
    • Kitex(字节跳动开源,高性能RPC框架)
  • Python

    • gRPC(Python绑定)
    • ZeroRPC(轻量级跨语言RPC)
  • 跨语言

    • gRPC(支持多语言)
    • Thrift(Facebook开源,支持多协议和数据格式)

gRPC为例,

它使用Protobuf定义服务接口数据结构

通过HTTP/2传输,

支持双向流压缩等特性,

适合高性能跨语言通信

RPC的应用场景

RPC是分布式系统的核心技术之一,

广泛应用于:

  • 微服务架构中服务间的调用(如订单服务调用支付服务)。

  • 分布式计算框架(如任务调度节点调用计算节点)。

  • 大型应用的模块拆分(将复杂系统拆分为多个独立部署的服务)。

  • 跨机房、跨区域的服务协作(通过RPC屏蔽网络延迟拓扑细节)。

总结

RPC通过封装远程通信细节

让开发者

能像调用本地函数一样

访问远程服务

极大简化了

分布式系统的开发。

选择合适的RPC框架

需考虑

性能跨语言支持易用性等因素,

而理解RPC的核心原理

有助于

更好地设计调试

分布式系统。

更多推荐