网工干货知识

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

分布式系统——RPC中的参数传递语义

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

分布式系统是由一系列机器组成的网络,这些机器可以通过消息传递的方式相互交换信息。这种机制非常有用,因为它有助于实现资源的共享。在本文中,我们将详细探讨分布式系统中RPC机制中的各种参数传递语义问题。

RPC中的参数传递语义:

在远程过程调用中,参数传递是客户端与服务器之间共享信息的唯一方式。在分布式应用程序中,远程过程调用所使用的各种参数传递方式包括以下几种:

按值调用:客户端将数值复制并打包成消息,然后通过网络将其发送到服务器。

  • 参数打包是指将各个参数封装成一个消息的过程。以远程过程 add(x, y)为例,该过程会返回两个整数参数的相加结果。
  • 客户端 stub 会将它的两个参数存储在一个消息中,同时还会包含被调用方法的名称或编号。
  • 当消息到达服务器时,该 stub 会评估该消息的内容,以确定需要调用哪种方法,然后执行相应的操作。
  • 在服务器完成执行后,客户端会将服务器的结果作为一条消息发送过来。这条消息会被客户端接口接收,然后经过处理之后,才会被返回给客户端程序。
  • 只要客户端和服务器上的计算机具有相似的特性,且所有参数和结果都是标量类型,比如布尔值、字符以及整数,那么这种参数解析方式就能很好地工作。

2. 引用传递:所谓“按引用传递”,指的是参数指向的指针是从客户端传输到服务器端的。在某些RPC技术中,参数可以通过引用方式传递。这种技术通常用于封闭系统中,即多个进程共享同一个地址。

  • 例如,在采用分布式共享内存技术的分布式系统中,参数可以通过引用方式传递。
  • 如果在客户端方面,第二个参数表示的是缓冲区的地址。假设这个地址为100,那么仅仅向服务器提供100这个数字是不够的。因为服务器上的地址可能位于程序文本的中间位置。在某些系统中,这种地址是通过向服务器发送指针来实现的,同时还需要在服务器函数中实现与指针相关的特殊逻辑处理。
  • 可以先将指针存储在一个寄存器中,然后再通过该寄存器间接访问该指针所指向的地址。使用这种技术时,需要向客户端发送消息,指示其获取并传递所指向的对象的内容(即读取该对象的值),或者将该对象的值存储到指定的地址中(即写入该地址)。虽然这种方法效果不错,但大多数情况下效率并不高。
  • 只有在该进程的内存地址空间中,指针才具有实际意义。如果第二个参数是客户端上缓冲区的地址,即1000,那么仅仅向服务器提供1000这个数值是不够的,因为服务器上的地址1000可能位于程序文本的中间位置。
  • 例如,在C语言中,当处理数组时,需要提供变量的地址。此外,还需要处理基于指针的数据结构,比如指针、列表、树、栈、图等。
    • 对象调用引用:在这里,RPC机制使用的是对象调用方式。存储变量的数值被用来指向某个对象。
    • 按移动方式调用:参数是通过引用传递的,这与按对象调用的方式类似。不过,在调用过程中,参数所指向的对象会被移动到目标节点上。如果参数仍然留在调用方的节点上,那么这种调用方式就被称为“按访问点调用”。这种方式使得参数对象可以与调用消息一起被打包在同一网络中,从而减少了网络流量和消息数量。

问题/困难:

  • 然而,在大型分布式系统中,通常会存在多种不同类型的机器。数字、字母以及其他数据对象,在不同机器上呈现的方式也会有所不同。
  • 例如,IBM大型机和IBM个人计算机所使用的编码方式不同。IBM大型机使用EBCDIC编码方式,而IBM个人计算机则使用ASCII编码方式。由于这种差异,这两个系统之间无法相互传输字符数据。
  • 无论是整数还是浮点数,在表示方式上都可能遇到一些挑战。
  • 另一个问题是,有些机器是从右向左来计数字节的,而另一些机器则是从左向右来计数字节的。例如,Intel/AMD的x86架构、Digital VAX以小端格式处理数据,而Sun SPARC和Power PC则采用大端格式来处理数字。
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

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