网工干货知识

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

分布式系统中的RPC实现机制

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

在本文中,我们将探讨远程过程调用(Remote Procedure Call, RPC)的概念及其工作机制。

RPC是一种有效的机制,用于构建分布式客户端-服务器系统。它提升了客户端/服务器计算模式的编程效率和便利性。这是一种协议,它允许一个软件向网络中的另一台计算机上的另一个程序请求服务,而无需了解网络的细节。发出请求的软件被称为客户端,而提供服务的程序则被称为服务器。

在远程过程调用过程中,调用参数会被发送给远程进程,而调用者则等待来自远程进程的响应。下图展示了两个网络系统之间进行远程过程调用时的各种操作流程。

语义透明度:

  • 句法透明性:这意味着,远程进程与本地程序之间应该存在某种相似性。
  • 语义的透明性:这意味着,远程进程与本地程序在语义上应该具有相似性,也就是说,它们的含义应该是相同的。

RPC的工作原理:

在RPC的运作过程中,共有5个要素被使用:

  • 客户/用户
  • 客户端存根
  • RPC运行时
  • 服务器接口/服务器 stub
  • 服务器

  • 客户:客户端进程开始发起RPC调用。客户端执行一个标准的调用操作,这一操作会触发客户端存根中的相关程序。
  • 客户端存根:RPC使用这些接口来实现语义的透明性。客户端会调用客户端接口。客户端接口负责执行以下任务:
    • 客户端存根所执行的第一个任务,就是当它收到来自客户端的请求时,它会将远程/目标程序的参数以及所需的规格信息打包成一个消息。
    • 客户端的第二个任务是在执行完成后接收到结果值之后,将这些结果值进行解包处理,然后将其发送给客户端。
  • RPC运行时:RPC运行时负责通过网络在客户端和服务器之间传输消息。 它负责执行重传、确认、路由以及加密等任务。 在客户端方面,它会从服务器端接收到结果值,然后将这些结果值发送给客户端。而在服务器端,当RPC运行时从服务器端接收到相同的消息后,它也会将其转发到客户端机器上。 它还接受并转发客户端机器的呼叫请求消息到服务器接口。
  • 服务器接口:服务器 stub 执行以下任务:
    • 服务器 stub 所执行的第一个任务,就是解包从本地 RPC 运行时接收到的调用请求消息,然后以常规方式调用服务器中所需的程序。
    • 服务器存根所执行的第二个任务就是:当它接收到服务器的程序执行结果后,会将该结果打包成一个消息,然后发送给本地RPC运行时。之后,本地RPC运行时会将该消息重新解包,并将其传递给客户端存根。
  • 服务器:在收到客户端机器的调用请求后,服务器 stub 会将该请求传递给服务器本身。所需的操作由服务器来执行,最后,服务器会返回结果给服务器 stub。这样,服务器 stub 就可以利用本地 RPC 运行时将该结果传递给客户端机器。

RPC进程:

  • 客户端、客户端 stub 以及其中一个 RPC 运行实例,都运行在客户端机器上。
  • 客户端通过正常方式传递参数来启动客户端 stub 进程。客户端 stub 会获取客户端的地址空间中的存储空间。
  • 此时,用户可以通过常规的本地过程调用来访问RPC。RPC运行时负责通过网络在客户端和服务器之间传递消息。重新传输、确认、路由以及加密等功能都由RPC运行时来完成。
  • 在服务器端,当服务器操作完成之后,相关的值会被返回给服务器 stub。然后,服务器 stub 会将这些返回值打包成消息。传输层则负责接收来自服务器 stub 的消息。
  • 最终生成的消息会被传输层传递给客户端,而客户端则会将该消息发送回客户端接口。
  • 客户端负责解包那些作为返回参数的数据,此时,执行过程会回到调用者那里。

当客户端通过调用本地过程来发送请求时,该过程会将参数以请求格式传递出去,这样这些参数就可以作为消息被发送到远程服务器。 然后,远程服务器会执行本地过程调用(具体方式取决于客户端机器的请求内容)。执行完成后,远程服务器会以消息的形式向客户端返回响应。 目前,客户端处于阻塞状态。但是,一旦从服务器端收到响应,它就能从消息中获取到结果了。 在某些情况下,RPC请求也可以以异步方式执行。这样一来,客户端就不会因为等待响应而陷入等待状态。

参数可以通过两种方式传递。第一种方式是按值传递,第二种方式则是按引用传递。当我们将变量的值传递给函数时,接收该值的参数应该是指针类型。在按引用传递的情况下,使用指针来传递变量的地址。而按值传递则是指直接传递变量的实际数值。

通常,决定使用哪种参数传递方式的,就是语言的设计者。有时候,这种选择还会取决于所提供的数据类型。在C语言中,整数和其他标量类型总是以值传递的方式传递;而数组则总是以引用传递的方式传递。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

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