RPC 的通信协议
本文将详细介绍分布式系统中远程过程调用 (RPC) 的通信协议的概念。
远程过程调用的通信协议:
以下是使用的通信协议:
- 请求协议
- 请求/回复协议
- 请求/回复/确认-回复协议
请求协议:
- 请求协议也称为 R 协议。
- 当从调用过程向被调用过程发出请求时,它在远程过程调用 (RPC) 中使用。请求执行后,被调用的过程没有任何返回,并且不需要确认过程的执行。
- 因为没有确认或回复消息,所以只有一条消息从客户端发送到服务器。
- 不需要回复,因此在发送请求消息后,客户端可以进一步处理下一个请求。
- 该协议提供了可能调用语义,从而消除了重新传输请求数据包的要求。
- 异步远程过程调用 (RPC) 使用 R 协议来增强客户端和服务器的组合性能。通过使用此协议,客户端无需等待服务器的回复,服务器也无需发送该回复。
- 在异步远程过程调用 (RPC) 中,万一通信失败,RPC 运行时不会重试请求。 TCP 是比 UDP 更好的选择,因为它不需要重新传输并且是面向连接的。
- 在大多数情况下,使用具有不稳定传输协议的异步 RPC 来实现定期更新服务。它的应用之一是分布式系统窗口。
请求/回复协议:
- Request-Reply 协议也称为 RR 协议。
- 它适用于涉及简单 RPC 的系统。
- 参数和结果值包含在简单 RPC 中的单个数据包缓冲区中。通话的持续时间和通话之间的时间都是简短的。
- 该协议具有使用隐式确认而不是显式确认的概念基础。
- 这里,来自服务器的回复被视为对客户端请求消息的确认(ACK),客户端的后续调用被视为服务器对客户端先前调用的回复消息的确认(ACK)。
- 为了处理失败处理,例如丢失消息,超时传输技术与 RR 协议一起使用。
- 如果客户端在预定的超时时间内没有收到响应消息,它会重新发送请求消息。
- 服务器提供 Exactly-once 语义,因为响应被保存在回复缓存中,这有助于过滤重复的请求消息,并且回复消息在不再次处理请求的情况下重新传输。
- 如果没有过滤重复消息的机制,那么 RR 协议结合超时传输使用至少调用语义。
请求/回复/确认-回复协议:
- 该协议也称为 RRA 协议(请求/回复/确认-回复)。
- RR 协议提供了 Exactly-once 语义,它指的是响应被保存在服务器的回复缓存中,从而导致未交付的回复丢失。
- RRA(Request/Reply/Acknowledgement-Reply)协议用于摆脱RR(Request/Reply)协议的缺点。
- 在该协议中,客户端确认收到回复消息,并且当服务器从客户端返回确认时,仅从其缓存中删除信息。
- 因为回复确认消息有时可能会丢失,所以 RRA 协议需要唯一的有序消息标识。这会跟踪已发送的确认系列。
复杂的 RPC
- 涉及长时间调用或调用之间存在较大间隙的 RPC。
- 涉及参数(参数)和/或导致值太大而无法放入单个数据报包中的 RPC。
- 涉及长时间调用或调用之间间隔较大的 RPC:
- 客户端定期探测服务器:客户端向服务器提交请求消息后,客户端不断发送探测包,服务器需要确认。如果发生通信失败,则将异常状态传达给相应的用户。每个探测包都包含来自初始请求消息的消息标识符。
- 服务器定期生成确认:如果服务器生成下一个数据包的时间延迟到预测的重传时间间隔,则它自己生成确认。因此,在长时间通话期间,可能会从服务器生成许多确认,因为若干确认直接对应于通话持续时间。如果在设定的时间间隔内,客户端未收到来自服务器的响应或确认,则可以得出结论,服务器已崩溃或故障发生在客户端,或者在通信失败的情况下向用户发出警报关于异常情况。
- 涉及参数/参数和/或导致值太大而无法放入单个数据报包中的 RPC:
- 带有长消息的 RPC:要处理这样的 RPC,为单个逻辑 RPC 使用许多物理 RPC。每个物理 RPC 中的数据发送以单个数据报包的大小进行。这种技术效率低下,因为无论传输的数据量如何,每个 RPC 都会产生一定数量的开销。
- 多数据报消息:多数据报消息是处理此类复杂 RPC 的另一种方法。它涉及将长的 RPC 参数(参数)或结果划分为多个数据包,然后以多个形式发送。多数据报消息中的所有数据包都使用单个确认数据包来提高通信性能。