📜  分布式系统中的存根生成

📅  最后修改于: 2022-05-13 01:56:15.793000             🧑  作者: Mango

分布式系统中的存根生成

存根是一段代码,用于在分布式计算中的远程过程调用期间转换客户端和服务器之间发送的参数。 RPC 的主要目的是允许本地计算机(客户端)远程调用另一台计算机(服务器)上的过程,因为客户端和服务器使用不同的地址空间。这就是函数(过程)调用中使用的参数必须被翻译的原因;否则,这些参数的值将毫无用处,因为指向一台计算机内存中参数的指针将指向另一台计算机上的不同数据。

在大多数情况下,存根库安装在客户端和服务器上。客户端存根转换(编组)函数调用中使用的参数,然后在函数完成时重新转换服务器返回的结果。另一方面,客户端参数由服务器存根重新转换,并在函数执行后转换回结果。

存根生成:

可以通过两种不同的方式创建存根:

  • 存根的手动生成在存根的手动生成中,RPC 实现者提供了一组翻译函数,用户可以使用这种方式创建自己的存根。此方法易于使用,并且可以处理多种参数类型。
  • 存根的自动生成在存根的自动生成中,客户端和服务器接口是使用接口定义语言 (IDL) 定义的。例如,接口规范包含指示每个参数是输入、输出还是两者的信息;只有输入参数必须从客户端传递到服务器,而只有输出元素必须从服务器复制到客户端。这是最流行的生成存根的方法。

RPC - 存根生成

  • 导入接口:从接口调用过程的客户端程序称为导入接口。
  • 导出接口:在接口中实现过程的服务器程序称为导出接口。
  • 接口定义语言 (IDL):在构建分布式应用程序时,程序员首先在 IDL 中创建接口定义,然后编写导入接口的客户端程序和导出接口的服务器程序。 IDL 编译器用于处理接口定义并生成可以与客户端和服务器程序耦合的组件,而无需对现有编译器进行任何更改。编译器在每个存根过程中生成所需的编组和解编组操作,并从接口为接口中的每个过程生成支持接口规范中的数据类型的头文件。客户端程序和服务器程序都包含头文件,客户端存根程序编译并与客户端程序链接,而服务器存根程序编译并与服务器程序链接。可以对 IDL 编译器进行编程以解释各种语言的接口定义,从而允许用不同语言编写的客户端和服务器通过远程过程调用 (RPC) 进行通信。

为了实现语义透明,设计者使用存根的概念使 RPC(远程过程调用)看起来像 LPC(本地过程调用)。存根从与底层 RPC 系统接口的应用程序中屏蔽了真正的 RPC 实现。