当前位置: 首页 > news >正文

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支持多语言,序列化效率高高并发、跨语言的内部服务
RMIJava原生,仅限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的区别
维度RPCHTTP(RESTful API)
用途专注远程函数调用通用的网络通信协议(不限于调用)
性能序列化高效,传输轻量,性能更高文本协议(如JSON),开销较大
灵活性需预定义接口,耦合度较高无接口约束,更灵活
适用场景内部服务、高性能需求跨系统交互(如前后端、第三方API)

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

总结

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

http://www.lryc.cn/news/593341.html

相关文章:

  • 探秘边缘安全架构设计要点解析
  • 深入了解 find_element 方法:Web 自动化定位元素的核心​
  • Node.js特训专栏-实战进阶:17.会话管理与安全存储
  • 开发框架安全ThinkPHPLaravelSpringBootStruts2SpringCloud复现
  • SLAM中的非线性优化-2D图优化之激光SLAM基于优化的前端匹配(十八)
  • KVM中使用桥接模式.运维就业技术教程
  • 零基础学习性能测试-linux服务器监控:CPU监控
  • 【RK3576】【Android14】USB开发调试
  • 《Spring Boot 插件化架构实战:从 SPI 到热插拔的三级跳》
  • Android14 SystemUI 启动流程(2)
  • Verilog *2* SPI-立创逻辑派G1测试-1
  • 软件警告弹窗与兼容性问题
  • 当OT遇见IT:Apache IoTDB如何用“时序空间一体化“破解工业物联网数据孤岛困局
  • FMEA-CP-PFD三位一体数字化闭环:汽车部件质量管控的速效引擎
  • XSS漏洞----基于Dom的xss
  • 动态规划算法的欢乐密码(三):简单多状态DP问题(上)
  • GA-BP遗传算法优化BP神经网络数据生成,采用SVM分类模型评估
  • RabbitMQ面试精讲 Day 3:Exchange类型与路由策略详解
  • PostgreSQL常用命令与工具指南
  • 发明专利怎么写,与学术文章异同点与注意事项
  • 从0开始学习R语言--Day51--PH检验
  • HAMR硬盘高温写入的可靠性问题
  • 数字图像处理(三:图像如果当作矩阵,那加减乘除处理了矩阵,那图像咋变):从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么
  • 我用Cursor,1周上线了一个虚拟资料流量主小程序技术选型
  • 图解系统-小林coding笔记
  • view和pure的区别
  • 电脑windows系统深度维护指南
  • Validation - Spring Boot项目中参数检验的利器
  • 前端开发技巧:浏览器模拟弱网络环境
  • 中间件安全攻防全解:从Tomcat到Weblogic反序列化漏洞介绍