分布式系统——RPC 的透明性
RPC 是一种构建分布式客户端-服务器系统的有效机制。 RPC 增强了客户端/服务器计算概念的编程能力和易用性。透明 RPC 是程序员无法区分本地和远程过程调用的一种。设计 RPC 设施最困难的方面是确保它是透明的。
有两种必须使用的透明胶片:
- 语法透明性:远程进程的语法和对本地过程的调用应该是相同的。
- 语义透明性:远程过程调用和本地过程调用具有相同的语义。
语法透明不是问题,但由于远程和本地过程调用之间的差异,语义透明很难实现。以下是远程过程调用和本地过程调用之间的变化:
- 与本地过程调用不同,远程过程调用具有不相交的地址空间,即不同的地址空间。
- 由于可能的处理器故障或网络通信问题,远程过程调用比本地过程调用更容易出现故障。
- 由于通信网络的原因,远程过程调用比本地过程调用花费更长的时间。
如何在 RPC 中实现透明度:
- RPC 的主要目标是使远程过程调用显得透明。调用进程应该不知道被调用的过程正在另一台计算机上运行。类似地,RPC 实现了透明性。
- 当读取用作远程过程时,读取的客户端存根版本将添加到库中。调用序列用于调用它。
- 参数被封装在一条消息中,然后传送到服务器。服务器的操作系统将消息转发到服务器存根,当它到达服务器时,它调用接收和拒绝传入的消息。
- 服务器解包参数并调用服务器过程,完成其任务,并将结果以打包并将结果发送到客户端存根的通常方式传递给调用者。
- 当客户端从服务器获得消息时,客户端的操作系统将其识别为发往客户端进程。当调用者在调用 read 之后拥有控制权时,它所知道的就是它的数据是可用的。
- 它完全不知道该任务是远程执行的,而不是在本地操作系统上执行的。以这种方式获得透明度。
RPC 可以实现语法透明,但由于过程调用(本地和远程)的变化,不可能实现完全的语义透明。