网工干货知识

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

用于 RPC 的通信协议

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

本文将详细阐述分布式系统中用于远程过程调用(RPC)的通信协议概念。

用于远程过程调用的通信协议:

以下是所使用的通信协议:

  • 请求协议
  • 请求/响应协议
  • 请求/回复/确认回复协议

请求协议:

  • 该请求协议也被称为R协议。
  • 在远程过程调用中,当调用者向被调用者发送请求时,就会使用这种机制。在请求执行完成后,被调用的程序不需要返回任何结果,也不需要确认该过程的执行情况。
  • 由于没有收到任何确认或回复消息,因此从客户端到服务器只发送了一条消息而已。
  • 不需要立即得到回复,因此在发送请求消息之后,客户端可以继续处理下一个请求。
  • 该协议提供了“可能调用”的语义,从而消除了对请求数据包进行重传的需求。
  • 异步远程过程调用(Asynchronous Remote Procedure Call, RPC)采用了R协议来提升客户端和服务器之间的性能。通过使用该协议,客户端无需等待服务器的回复,而服务器也无需主动发送响应。
  • 在异步远程过程调用中,如果通信失败的话,RPC运行时不会重新尝试发送请求。与UDP相比,TCP是一种更好的选择,因为TCP不需要重新传输数据,而且它是一种面向连接的协议。
  • 在大多数情况下,使用不稳定的传输协议的异步RPC技术来实现周期性更新服务是常用的方式。其应用之一就是分布式系统窗口功能。

请求/响应协议:

  • 请求-响应协议也被称为RR协议。
  • 这种方案适用于那些涉及简单RPC调用的系统。
  • 这些参数和结果值被封装在一个单独的包中,通过简单的RPC机制进行传输。调用的持续时间以及两次调用之间的时间间隔都非常短。
  • 该协议的核心概念是采用隐式确认机制,而非显式确认机制。
  • 在这里,服务器返回的响应被视作客户端请求消息的确认信息。而客户端后续的调用则被视为对服务器之前发送的响应的再次确认。
  • 为了处理诸如消息丢失等失败情况,RR协议中采用了超时传输技术。
  • 如果客户端在预定的超时时间内没有收到任何响应消息,那么它将重新发送该请求消息。
  • 服务器所提供的精确语义处理功能,是通过将响应信息存储在应答缓存中来实现的。这一机制有助于过滤掉重复的请求消息,同时,回复消息在重新传输时无需再次处理请求内容。
  • 如果不存在用于过滤重复消息的机制,那么RR协议就会使用“至少调用一次”的语义,同时结合超时传输机制来解决问题。

请求/回复/确认回复协议:

  • 该协议也被称为RRA协议,即请求/回复/确认-回复协议。
  • RR协议提供了精确的时间语义支持。所谓“精确的时间语义”,指的是服务器在回复缓存中存储了这些响应信息,因此那些未能被传递的响应信息就丢失了。
  • RRA协议用于消除RR协议存在的缺陷。
  • 在这个协议中,客户端会确认自己已经收到了回复消息。只有当服务器从客户端那里收到确认消息后,才会将其缓存中的信息删除。
  • 由于回复确认消息有时可能会丢失,因此RRA协议需要采用唯一且有序的消息标识。这样就能记录下已经发送过的确认消息的序列号。

复杂的RPC调用

  • 那些需要长时间进行调用的RPC调用,或者是在调用之间存在较大时间间隔的RPC调用。
  • 那些包含参数的RPC调用,以及那些导致返回的值过大、无法被单个数据报包所容纳的RPC调用。
  • 那些需要长时间进行调用的RPC调用,或者调用之间间隔较长的RPC调用:
    • 客户端会定期向服务器发起查询请求。在客户端向服务器发送请求消息之后,客户端会持续发送探测包,而服务器则需要对这些探测包进行确认。如果通信发生失败,那么异常状态会被通知给相应的用户。每个探测包中都包含初始请求消息中的消息标识符。
    • 服务器会定期发送确认消息。如果服务器生成下一个数据包的过程出现延迟,那么预测的重新传输时间间隔也会相应推迟。在这种情况下,服务器会自行发送确认消息来表明其已经完成了重新传输操作。 因此,在长时间的通话过程中,服务器会生成许多确认消息。实际上,这些确认消息的数量与通话的持续时间是直接相关的。 如果在指定的时间范围内,客户端仍然没有收到来自服务器的任何响应或确认消息,那么可以得出结论:要么服务器出现了故障,要么问题出在客户端方面。此外,如果通信过程中出现异常情况,用户也会收到相关提示信息。
  • 那些包含参数的/RPC调用,或者那些产生的数值过大、无法被单个数据报包所容纳的/RPC调用:
    • 包含长消息的RPC:为了处理这样的RPC,通常需要使用多个物理RPC来组合成一个逻辑RPC。每个物理RPC中传输的数据都是以单个数据报的形式进行的。这种方法的效率很低,因为无论传输的数据量多少,每个RPC都会产生固定的开销。
    • 多数据图消息:多数据报消息是处理这类复杂RPC的另一种方式。它通过将较长的RPC参数或结果拆分成多个数据包来传输,从而提升通信性能。在多个数据报消息中,所有数据包都会使用一个确认数据包来进行同步处理,以此来确保通信的顺利进行。
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

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