RPC(Remote Procedure Call,远程过程调用)介绍

简单总结下:

RPC(远程过程调用)是一种通信协议,允许一台计算机的程序像调用本地函数一样,调用另一台计算机上的函数或服务,
核心组件:序列化,反序列化

核心作用:简化分布式系统中不同服务 / 节点间的通信,让开发者专注于业务逻辑,而非底层网络交互。

常见应用场景:分布式系统内部服务调用(如微服务架构中各模块通信)、跨语言服务交互、分布式计算等。

RPC是一种进程间通信(IPC)协议 ,允许一台计算机(客户端)的程序像调用本地函数一样,调用另一台计算机(服务器)上的函数或方法,而无需显式编写网络通信代码。其核心目标是屏蔽网络通信的复杂性让开发者能以"本地调用"的思维实现分布式系统中的跨节点交互

一、RPC的核心原理

RPC的工作流程可简化为以下步骤,通过一系列组件协作完成远程调用:

  1. 客户端调用(Client Stub)

    客户端程序调用本地的"存根函数"(Stub,类似代理),传入参数。Stub负责将调用信息(函数名、参数等)序列化(如转为JSON、Protobuf二进制数据),并封装成网络请求。

  2. 网络传输

    客户端通过网络协议(如TCP、HTTP/2、gRPC基于HTTP/2)将请求发送到服务器端。

  3. 服务器接收(Server Stub)

    服务器端的Stub接收请求,将数据反序列化,解析出函数名和参数,定位到对应的本地函数并执行。

  4. 执行与响应

    服务器执行函数后,将返回结果通过Server Stub序列化,再经网络传回客户端。

  5. 客户端处理结果

    客户端Stub反序列化响应数据,将结果返回给客户端程序,完成一次远程调用。

核心组件

  • 序列化/反序列化器(处理数据格式转换);
  • 网络传输层(负责数据收发);
  • 服务发现(可选,如etcd、Consul,用于定位服务器地址)。
二、RPC的特点
  • 透明性:屏蔽网络细节,开发者无需关注IP、端口、协议等底层通信逻辑;
  • 高效性:相比HTTP等通用协议,RPC通常采用更紧凑的序列化格式(如Protobuf)和更轻量的传输协议,性能更高;
  • 针对性:专为远程函数调用设计,支持同步/异步调用、超时控制、负载均衡等分布式场景需求;
  • 语言相关性:部分RPC框架与特定语言绑定(如Java的RMI),但现代框架(如gRPC)多支持跨语言调用。
三、常见RPC框架

不同场景下的RPC框架各有侧重,以下是主流框架举例:

框架 特点 适用场景
gRPC 基于HTTP/2和Protobuf,跨语言支持好 微服务间高频通信、跨语言调用
Dubbo 阿里开源,Java生态为主,支持服务治理 Java微服务架构
Thrift 支持多语言,序列化效率高 高并发、跨语言的内部服务
RMI Java原生,仅限Java语言 纯Java分布式系统
Hessian 基于HTTP,轻量级,适合跨语言Web服务 简单的跨语言远程调用
四、RPC的典型应用场景

RPC是分布式系统的基础通信方式,以下是其核心应用场景:

  1. 微服务架构

    微服务将系统拆分为多个独立服务(如用户服务、订单服务),服务间通过RPC通信。例如:用户下单时,订单服务通过RPC调用库存服务扣减库存,调用支付服务发起支付。
    优势:高效的跨服务调用支撑微服务的灵活拆分与协作。

  2. 分布式计算

    在大数据或高性能计算场景中,任务被分配到多个节点执行,节点间通过RPC同步数据或传递计算指令。例如:MapReduce框架中,Worker节点通过RPC向Master节点汇报任务状态。

  3. 跨语言协作

    当系统由多语言开发(如前端用Go,后端用Java),RPC可实现不同语言模块的通信。例如:gRPC通过Protobuf定义接口,自动生成多语言Stub,让Go服务调用Java服务像本地函数一样简单。

  4. 中间件交互

    数据库、缓存等中间件的客户端工具本质上是RPC的应用。例如:Redis客户端通过TCP协议向Redis服务器发送命令(如SET key value),本质是远程调用Redis的set函数。

  5. 游戏服务器

    游戏客户端(如Unity)与后端服务器的实时交互(如移动、战斗指令)需低延迟通信,RPC框架(如SocketRPC)可满足高频、低延迟的调用需求。

五、RPC与HTTP的区别
维度 RPC HTTP(RESTful API)
用途 专注远程函数调用 通用的网络通信协议(不限于调用)
性能 序列化高效,传输轻量,性能更高 文本协议(如JSON),开销较大
灵活性 需预定义接口,耦合度较高 无接口约束,更灵活
适用场景 内部服务、高性能需求 跨系统交互(如前后端、第三方API)

简言之,RPC适合分布式系统内部的高效通信,HTTP适合对外提供灵活的接口

总结

RPC通过封装网络通信细节,让分布式系统的开发更接近本地程序设计,是构建微服务、分布式计算等系统的核心技术。选择RPC框架时,需结合语言生态、性能需求、跨语言支持等因素,例如微服务常用gRPC或Dubbo,游戏场景可能更倾向于轻量自定义RPC。

相关推荐
小粽子编程1 小时前
pig cloud框架中引入websocket
网络·websocket·网络协议
苏州向日葵2 小时前
篇四 tcp,udp客户端服务器编程模型
网络·udp·tcp
AORO20252 小时前
什么是5G-A三防平板?有什么特点?哪些领域能用到?
网络·5g·安全·电脑·制造·信息与通信
Chaunceyin2 小时前
OpenHarmony之WebSocket开发
网络·websocket·网络协议·harmonyos
是阿建吖!3 小时前
【Linux | 网络】应用层(HTTPS)
linux·网络·https
搬码临时工3 小时前
本地电脑映射端口到外网访问的开启方法和注意事项,内网服务提供跨网使用简单操作实现
网络·智能路由器·电脑
gnawkhhkwang4 小时前
LLC协议支持哪些类型的帧?它们各自的功能是什么?
linux·网络·rfc
阿沁QWQ8 小时前
HTTPS 协议原理
网络协议·http·https
武汉格发Gofartlic14 小时前
Fluent许可与网络安全策略
大数据·开发语言·网络·人工智能·安全·web安全·数据分析
一只脑洞君19 小时前
tcp的三次握手与四次挥手
java·网络·tcp/ip