网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

RPC消息协议

更新时间:2026年03月27日   作者:spoto   标签(Tag):

分布式信息系统可以被定义为“由多个相互依赖的计算机通过网络连接在一起,以便在这些计算机之间共享信息的一种系统”。分布式信息系统由多个自主运行的计算机组成,这些计算机通过计算机网络进行通信或交换信息。在分布式系统中,各个实体之间进行通信的方式有三种:

  • 进程间通信:这是一种低层次的通信方式。例如:分布式共享内存机制,就像邮箱一样。
  • 远程调用:这是一种高层且直接的通信方式。常见的例子包括 RPC、RMI 等。
  • 间接通信:这是一种高层次的间接通信方式。例如:群体通信、发布/订阅模型等。

RPC指的是远程过程调用。 在RPC中,计算机程序使得某个过程能够在不同的地址空间中运行。该程序被设计得就像是一个普通的过程调用一样。 无论该子程序是属于当前程序的局部部分,还是远程的,程序员编写的代码本质上都是相同的。 请求-响应消息传递机制通常用于实现这种客户端-服务器交互方式。 与其将其视为分布式系统的一种通用结构,不如这样理解它更为合适。 RPC之所以受欢迎,是因为它基于本地过程调用的语义机制来实现的。即,应用程序会调用某个过程,无论该过程是本地还是远程的,然后等待该过程的返回结果。 在面向对象编程范式中,RPCs是通过远程方法调用来表示的。

关于以远程过程调用作为网络操作范式的理论建议,其起源可以追溯到20世纪70年代。而实际的实现则始于20世纪80年代初。1981年,Bruce Jay Nelson首次提出了“远程过程调用”这一术语。该术语目前被广泛使用于各种网络操作中。

  • Protobufs(谷歌公司开发)
  • 在 Facebook 上节省开支
  • 在Twitter上胡闹罢了

RPC的目的是让网络通信看起来就像是一个函数调用而已。如果应用程序开发人员完全不知道某个操作是本地进行的还是远程进行的,那么他们的工作就会大大简化。当被调用的过程是面向对象语言中的对象的方法时,这种通信方式就被称为“远程方法调用”。虽然RPC的概念很简单,但它存在一些缺陷。

  • 在呼叫方与被叫方的进程之间,消息的大小往往受到限制。此外,消息还容易丢失或重新排序。
  • 被调用和调用方所处理的进程,可能运行在架构和数据处理方式截然不同的机器上。

RPC机制由两个关键组成部分构成:

  • 这是一种用于管理客户端与服务器之间传递的消息的协议,同时还能处理网络中可能存在的各种不利因素。
  • 这些参数被打包成请求消息,发送到客户端计算机上。之后,这些请求消息会被重新转换为服务器上的参数。而返回的值则会被重新转换为相应的参数。在这一过程中所使用的工具被称为“ stub编译器”。
  • 客户端-服务器请求已丢失
  • 服务器与客户端之间的通信中断了。
  • 在收到请求后,服务器出现了崩溃的情况。
  • 在提交请求后,客户端出现了崩溃现象。

这个基本算法很容易理解。客户端发送一个请求消息,服务器会确认该消息的接收。之后,服务器在完成相关操作后会发送一个回复消息,客户端也会确认这个回复消息。

RPC时间线

在RPC机制中,会遵循以下步骤:

  • 每个RPC操作都是在某个线程中进行的。所谓“线程”,指的是一个单一的控制流程,在任何时候,该流程只有一个执行点。而“应用程序线程”则是指由应用程序代码所创建并维护的线程。
  • 无论是RPC调用还是RPC运行时的调用,都是由RPC应用程序通过应用程序线程来发起的。一个RPC客户端由一个或多个客户端应用程序线程组成,每个线程都可以执行一个或多个RPC调用。
  • 此外,RPC服务器还会使用由RPC运行时框架提供的一个或多个调用线程来执行远程操作。在启动监听时,服务器应用程序的线程会设定可以同时执行的调用次数上限。
  • 在单线程程序中,通常只有一个调用线程。而在多线程应用程序中,调用线程的最大数量则取决于应用程序的架构以及RPC实现方式。这些调用线程是由RPC运行时机制在服务器执行上下文中创建的。
  • RPC可以在客户端和服务器环境中同时使用。因此,当客户端应用程序的线程与远程过程进行通信时,它实际上就变成了RPC线程的一部分,而RPC线程则是一种逻辑上的执行线程。
  • RPC线程是一种概念性结构,它涵盖了实际的执行线程以及网络层面,从而能够涵盖RPC过程中的各个阶段。
  • 在发起RPC调用之后,调用客户端的应用程序线程会加入RPC线程中。在调用返回之前,通常由RPC线程来继续执行任务。
  • 在成功的RPC过程中,其线程会经历RPC线程执行阶段中所描述的各个执行步骤。
  • 执行阶段包括以下内容:
    • 当客户端应用程序的线程向其 stub 发起一个 RPC 请求时,RPC 线程就会在客户端进程中开始运行。之后,客户端线程会加入这个 RPC 线程中。
    • RPC线程通过网络连接到服务器。
    • RPC线程就变成了调用线程,它负责执行远程过程。
    • 当被调用的远程操作正在执行时,该调用线程就会成为RPC线程的一部分。
    • 当通话结束之后,发起呼叫的线程就不再属于RPC线程的一部分了。
    • 然后,RPC线程会通过网络返回到客户端。
    • 当 RPC 线程到达调用客户端应用程序的线程时,它会将所有的调用结果传递出去。之后,客户端应用程序的线程就会离开该 RPC 线程。

在网络限制下如何移动:

由于网络并非理想的传输渠道,因此RPC协议通常会执行一些额外的功能。这类功能主要有两种:

  • 及时传递信息。
  • 分片处理和重新组合技术被用来支持巨大的消息大小。

在大多数情况下,RCP协议会在不可靠的传输层之上构建自己的可靠消息传递机制(例如,使用UDP/IP)。与TCP类似,这样的RPC协议也会通过确认机制和超时机制来确保数据传输的可靠性。

RPC的益处:

  • 无论是面向过程的架构还是面向线程的架构,都可以通过远程过程调用来实现。
  • 远程过程调用既可以在分布式环境中使用,也可以在本地环境中使用。
  • 用户并不了解RPC所使用的消息传输方式。
  • 为了提升性能,RPC省略了多个协议层。
  • 在远程过程调用中,重新编写和开发代码所需的工作量是非常小的。

RPC的缺点:

  • 远程过程调用的概念可以通过多种方式来实现。它并不是一套固定的规则或准则。
  • RPC并不具备硬件架构上的灵活性。它完全依赖于交互来实现其功能。
  • 由于远程过程调用的存在,相关成本已经上升。
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料