一分钟了解什么是RPC

article/2025/9/21 17:18:05

前言

    在介绍RPC之前,先介绍另外一个概念:进程间通信(IPC,Inter-Process Communication)

  • IPC:是指至少两个进程或线程间传送数据或信号的一些技术或方法。

    我们知道进程是计算机系统分配资源的最小单位。每个进程都有自己独立的系统资源,彼此相互隔离。为了使不同的进程之间能够互相访问资源并进行协调工作,于是就有了进程间通信(IPC)。

  • 进程间通信技术包括:消息传递、同步、共享内存和远程过程调用。

    由于进程可以运行在同一台机器上也可以运行在通过网络连接的不同机器上,于是IPC可分为两种类型:

  • 本地过程调用(LPC):顾名思义,就是运行在同一台机器上进程间通信。多用在多任务操作系统中,是的同时运行的的任务之间能够相互会话。这些任务共享内存空间使任务同步和互发消息
  • 远程过程调用(RPC):RPC类似于LPC,其目的是使通过网络连接的不同机器进程间能够互发消息

 

什么是RPC

    RPC的全称是Remote Procedure Call(远程过程调用),是一种基于TCP/IP协议的进程间的通信方式。该机制运行调用另一个地址空间(通常是共享网络的另一台机器)的过程或函数,而不是程序员显式编码这个远程调用的细节,也就是说程序员无论是调用本地还是远程,本质上编写的调用代码基本相同。简单的说:

  • RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
  • RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯) RPC 是一个请求响应模型。
  • 客户端发起请求,服务器返回响应(类似于Http的工作方式) RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)

    RPC的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义间性。

 

举例

    比如有两台服务器A和B,一个应用部署在服务器A上,一个部署在B上,A想要调用B服务器上的应用提供的函数或方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传递调用的数据,这就需要用到RPC了。这个过程就需要解决一些问题:

  • 第一:要解决通讯问题。主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有要交换的数据都通过这个连接传输。连接可以是短连接(调用完就断掉),也可以是长连接(多个远程调用共享一个连接)
  • 第二:要解决寻址的问题。也就是A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(入主机或IP地址)以及特定的端口,调用的方法名是什么,这样才能成功调用。比如基于Web服务协议栈的RPC,就哟啊提供一个EndPoint URI,或者是从UDDI服务上查找。如果是RMI调用的话,还需要一个RMI Registry来注册服务的地址。
  • 第三:当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数值需要序列化成二进制形式,即序列化(Serialize)和编组(marshal),通过寻址和传输将序列化的二进制发送到B服务器。
  • 第四:B服务器收到调用请求后,需要对参数进行反序列化,恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。
  • 第五:返回值还要发送回服务器A上应用,也要经过序列化的方式进行。服务器A接到返回值后,经过反序列化恢复为内存中的表达形式,供A服务器上的应用使用。

 

RPC实现原理

通过上面的五个要解决的问题,可以将其总结起来归为三个问题,只要实现了这个三个机制,就能实现RPC

  • 第一:Call ID映射。即解决寻址问题,告诉远程服务器B我要调用函数a,而不是函数b。在本地调用中,函数体是直接通过函数指针来指定的,我们调用函数a,编译器就自动帮我们调用它相应的函数指针。但是在远程调用中,函数指针肯定不行,因为两个进程的地址空间完全不一样。所以,在RPC中,所有的函数都必须要有一个自己的ID,这个ID在所有进程中都是唯一确定的。客户端在做远程调用时,必须带上这个ID。要实现这个我摩恩就需要在客户端和服务器端分别维护一个函数<—>Call ID的都应表。两者的表不一定要完全相同,只要保证相同的函数对应的Call ID一样即可。当客户端进行远程调用时,它先查这个表中函数对应的Call ID,然后把它传输服务器端,服务器端也通过查表来确定客户端需要调用的函数是哪个,然后执行相应的代码。
  • 第二:序列化和反序列化。在本地调用中,我们只需要把参数压到栈中,然后让函数自己去栈里读就行,但是在远程调用中,不能通过内存来传递参数,甚至有时候客户端和服务器端使用的都不是同一种编程语言。这个时候就需要客户端把参数先转成一个字节流(序列化),传输到服务端后,服务端再把字节流转成自己能读取的格式(反序列化)。同理服务器端返回的值也需要经过序列化和反序列化。
  • 第三:网络传输。远程调用就是用在网络上的不同机器之间,所有的数据都需要通过网络传输。因此需要有一个网络传输层。网络传输层需要把Call ID和序列化后的参数字节流传给服务器,然后再将序列化后的结果传输回来。只要能实现这个功能,都可以作为传输层使用。因此所使用的协议其实是不限制的,只要能完成传输。

 

 

 

 

参考

[1] 谁能用通俗的语言解释一下什么是 RPC 框架? - 知乎 https://www.zhihu.com/question/25536695

[2] RPC简介及框架选择 https://www.jianshu.com/p/b0343bfd216e


http://chatgpt.dhexx.cn/article/kljRhkNT.shtml

相关文章

【网络】什么是RPC?RPC与HTTP有什么关系?

文章目录 RPC是什么RPC和HTTP的关系和区别[附]关于REST论文中提到的"HTTP不是RPC" 重点参考 凤凰架构-远程过程调用 既然有HTTP为什么还要有RPC&#xff1f; RPC是什么 RPC(Remote Procedure Call)&#xff1a;即远程过程调用&#xff0c;目的是为了让计算机能够跟调…

电脑显示RPC服务器不可用是什么意思,rpc服务器不可用怎么办?rpc服务器不可用是什么意思...

很多人在使用打印机会都遇到rpc服务器不可用的问题&#xff0c;一时之间不知道rpc服务器不可用怎么办&#xff0c;无法作出有效的修复&#xff0c;为了解决一问题&#xff0c;我们首先要明白rpc服务器不可用是什么意思。 rpc服务器全称RPCremote procedure call&#xff0c;它是…

【网络】一文带你了解什么是RPC

一文带你了解什么是RPC 为什么要有RPC什么是RPCPRC架构组件RPC和SOA、SOAP、REST的区别RPC框架需要解决的问题?RPC的实现基础?RPC使用了哪些关键技术?主流RPC框架有哪些 为什么要有RPC http接口是在接口不多、系统与系统交互较少的情况下&#xff0c;初期常使用的一种通信手…

什么是RPC框架?

什么是RPC&#xff1f; In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it wer…

什么是RPC

提到RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;就躲不开提到分布式&#xff0c;这个促使RPC诞生的领域。 假设你有一个Calculator&#xff0c;以及它的实现类CalculatorImpl&#xff0c;那么单体应用时&#xff0c;要调用Calculator的add方法来执行一个加…

证书服务器rpc服务器不可用是什么意思,rpc服务器不可用是什么意思

rpc服务器不可用是什么意思 用户在使用电脑进行时间同步&#xff0c;安装打印机或者其它的操作的时候可能会遇到同样一个问题&#xff0c;那就是提示“RPC服务器不可用”&#xff0c;很多朋友可能对于RPC并不了解&#xff0c;更不知道如何解决&#xff0c;下面就一起来看看这个…

RPC是什么意思?

原文地址&#xff1a;http://baike.baidu.com/link?urlZV6b0T5v04pem1NluXrFwslmhOosGK3YAeKYBfXHF3J-cg96O7CE9j_opGpKCftpBKWqLtY9-LycDAX0ULaLpssX4IIVmK6fSdtZBzz6nbFRsA-vXppB4IV1KBfDu07pY2dgZYTn5A65RkuhPO00bf5ngU6qfujFC14JqgumBPLgqXgt1VnAzQ7xOwSbJbJkqtNcGRdPxt9f…

rpc协议服务器是什么,什么是rpc框架

第五&#xff0c;返回值还要发送回服务器A上的应用&#xff0c;也要经过序列化的方式发送&#xff0c;服务器A接到后&#xff0c;再反序列化&#xff0c;恢复为内存中的表达方式&#xff0c;交给A服务器上的应用 这里写图片描述 为什么RPC呢&#xff1f;就是无法在一个进程内&a…

rpc协议服务器是什么,RPC是什么?

RPC是什么&#xff1f; REST和RPC都常用于微服务架构中。 都是网络交互的协议规范。 通常用于多个微服务之间的通信协议。 RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。 什么是RPC 远程方法调用…

RPC简介

1. 概述 RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;即远程过程调用&#xff0c;是一种通过网络从远程计算机程序上请求服务、而不需要了解底层网络技术的协议。RPC协议假定某些传输协议&#xff08;如TCP或UDP&#xff09;的存在&#xff0c;为通信程序之…

【OS笔记 28】处理死锁的四种方法——预防死锁(破坏四个必要条件之一)

前面讲过预防死锁是通过破坏死锁的四个必要条件&#xff0c;所以就有四个预防死锁的方法吗&#xff1f;错&#xff01;只有三种&#xff0c;因为互斥条件是必须的&#xff0c;不仅不能改变&#xff0c;还应该加以保证。因此只能破坏后三个条件。 一、破坏请求和保持条件 • 方…

什么是死锁,产生死锁的必要条件,以及避免死锁的方法

一、死锁的定义 死锁是指&#xff0c;有两个或两个以上的线程在执行的过程中&#xff0c;由于竞争的资源或者彼此通信而造成的一种阻塞状态&#xff0c;若无外力作用&#xff0c;他们将都无法进行下去&#xff0c;从而形成一直阻塞的状态叫死锁。 简单来说就是…

死锁产生的四个必要条件?如何避免和预防死锁产生?

一、什么是死锁&#xff1f; 两个线程或两个以上线程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是这些线程都陷入了无限的等待中&#xff0c;这就是死锁。 举个例子&#xff1a;如果线程1锁住了A&#xff0c;然后尝试对B进行加锁&#xff0c;同时线程2已…

死锁产生的原因和必要条件详解

3.5 产生死锁的原因和必要条件 在多道程序系统中&#xff0c;虽借助于多个进程的并发执行&#xff0c;改善了系统的资源利用率&#xff0c;提高了系统的吞吐量&#xff0c;但可能发生一种危险——死锁。 死锁&#xff08;deadlock&#xff09;&#xff1a; 是指多个进程在运…

死锁概念,死锁产生的四个必要条件,如何避免和预防死锁

一、死锁概念 死锁是指两个或多个进程在执行的过程中&#xff0c;因为竞争资源而造成互相等待的现象&#xff0c;若无外力作用&#xff0c;它们都无法推进下去。 1.在等待对方时占有不可抢占的资源 举个例子&#xff0c;假设有P1&#xff0c;P2两个进程&#xff0c;都需要A和…

关于死锁,死锁的四个必要条件的总结

什么是死锁&#xff1f; 死锁&#xff0c;指的是多个进程再运行期间因争夺资源而产生的一种僵局&#xff0c;若无外力作用&#xff08;破坏死锁&#xff09;&#xff0c;程序将无法运行。 死锁产生的四个必要条件 互斥条件&#xff1a; 进程要求对所分配的资源&#xff08;如…

死锁产生的四个必要条件

一、死锁产生的四个必要条件 互斥条件&#xff1a;资源是独占的且排他使用&#xff0c;进程互斥使用资源&#xff0c;即任意时刻一个资源只能给一个进程使用&#xff0c;其他进程若申请一个资源&#xff0c;而该资源被另一进程占有时&#xff0c;则申请者等待直到资源被占有者…

什么是死锁?死锁发生的四个必要条件是什么?如何避免和预防死锁产生?

什么是死锁&#xff1f; 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进程…

死锁和产生死锁的四个必要条件以及如何避免和预防死锁

什么是死锁 如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件&#xff0c;那么该组进程就是死锁的。 死锁出现的场景 &#xff08;1&#xff09;多个线程&#xff1a;彼此申请对方资源而导致的死锁。A申请B的资源时&#xff0c;因为资源被占用&am…

理解死锁产生的四个必要条件

死锁的定义 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进程称为死锁进…