📜  分布式系统——RPC中的调用语义

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

分布式系统——RPC中的调用语义

本文将详细介绍分布式系统中的调用语义、它的类型以及 RPC 中的问题。 RPC 与本地过程调用具有相同的语义,调用过程调用过程,向它提供输入,然后在它执行时等待。当过程完成时,它可以将结果返回给调用进程。如果分布式系统要实现透明化,那么在设计 RPC 系统时,必须考虑以下有关远程过程调用属性的问题:

  • 绑定:绑定在调用者进程的名称和远程过程的位置之间建立链接。
  • 通信透明度:用户应该不知道他们正在调用的进程是远程的。
  • 并发:通信技术不应与并发机制混合。当单线程客户端和服务器在等待 RPC 结果时被阻塞时,可能会出现相当大的延迟。轻量级进程允许服务器处理来自多个客户端的并发调用。
  • 异构性:不同的机器可能有不同的数据表示,在不同的操作系统下运行,或者有用不同语言编写的远程过程。

RPC失败的原因:

RPC 运行时包括处理故障的代码。确定发生故障时远程操作的运行频率。

  • 调用者/被调用者节点失败。
  • 缺少响应消息/呼叫。

调用语义的类型:

  • 也许或可能调用语义:它是最弱的,在这里,调用者等待到预定的超时时间,然后继续执行。它用于需要定期更新的服务。
  • Last-one Call Semantics:基于超时,重传呼叫消息。超时时间过后,调用者使用上次执行获得的结果。它发出孤儿呼叫。它在设计简单的 RPC 中得到了应用。
  • Last-of-Many Call Semantics:它类似于 Last-one Call 语义,但这里的区别在于它通过调用标识符忽略了孤立调用。每当重复呼叫时,都会为呼叫分配一个新的呼叫 ID。只有当主叫方 ID 与最近的重复呼叫匹配时,主叫方才会接受它。

RPC 中的调用语义类型

  • At-least-once Call Semantics:调用执行一次或多次,但没有指定给调用者的结果。这里的重传也依赖于超时时间,而不考虑孤儿呼叫。在嵌套调用的情况下,如果存在孤立调用,则从第一个响应消息中获取结果,而忽略其他调用,而不管接受的响应是否来自孤立调用。
  • Exactly-once Call Semantics:无论呼叫传输多少次,都消除了多次执行该过程的可能性。当服务器收到来自客户端的确认时,它只会从回复缓存中删除信息。