分布式系统中的远程过程调用 (RPC) 协议

⚡ 智能摘要

远程过程调用 (RPC) 是一种进程间通信协议,它允许程序在另一个地址空间或机器上执行过程,从而在分布式客户端-服务器系统中将网络细节隐藏在普通的本地函数调用之后。

  • 📞 定义: RPC 允许客户端像在本地调用一样调用远程服务器上的过程。
  • 🗂️ 类型: 回调式、广播式和批处理模式 RPC 在请求的路由和排队方式上有所不同。
  • ????️ 结 构: 每次调用都由五个部分协同工作:客户端、客户端存根、RPC 运行时、服务器存根和服务器。
  • 🔄 如何使用: 存根将参数编组到消息中,并将返回给调用者的结果解编组。
  • 权衡: RPC 简化了分布式代码,但与本地调用相比,增加了网络开销和故障点。
  • 🤖 人工智能视角: gRPC 在微服务之间提供机器学习模型,而 Copilot 可以加快编写 RPC 存根的速度。

分布式系统中的远程过程调用(RPC)

什么是 RPC?

远程过程调用(RPC) 是一个 进程间通信 RPC 是一种用于客户端-服务器应用程序的技术。RPC 的全称是远程过程调用 (Remote Process Call)。当计算机程序使一个过程或子例程在不同的地址空间中执行时,就会使用 RPC 机制。这种执行方式与普通的过程调用类似,但程序员无需显式地编写远程交互的细节代码。

该过程调用还管理底层传输协议,例如 UDP 和 TCP/IP,以便在程序之间传递消息数据。

RPC 的类型

三种类型的 RPC 为:

  • 回调RPC
  • 广播 RPC
  • 批处理模式 RPC

回调RPC

这种类型的 RPC 支持参与进程之间的点对点 (P2P) 通信模式。它允许进程同时充当客户端和服务器。

回调RPC的功能:

  • 处理远程处理的交互式应用程序问题。
  • 向服务器提供客户端句柄。
  • 回调会使客户端进程等待。
  • 管理回调死锁。
  • 它促进了参与过程之间的点对点模式。

广播 RPC

广播 RPC 是客户端向网络发出的请求,所有具有处理该请求方法的服务器都会对其进行处理。

广播RPC的功能:

  • 允许您指定必须广播客户端的请求消息。
  • 您可以声明广播端口。
  • 它有助于减轻物理网络的负载。

批处理模式 RPC

批量模式 RPC 有助于将客户端的多个 RPC 请求排队到传输缓冲区中,然后通过网络将它们作为一个批次发送到服务器。

批处理模式 RPC 的功能:

  • 它最大限度地减少了发送请求所涉及的开销,因为它通过网络一次性向服务器发送请求。
  • 这种类型的 RPC 协议只适用于调用频率较低的应用。
  • 它需要一个可靠的传输协议。

RPC的 Archi质地

RPC架构主要有五个程序组件:

  1. 客户
  2. 客户端存根
  3. RPC 运行时
  4. 服务器存根
  5. 服务器

RPC的 Archi质地

RPC的 Archi质地

RPC 如何工作?

RPC 过程中会执行以下步骤:

步骤1) 客户端、客户端存根和 RPC 运行时的一个实例在客户端机器上执行。

步骤2) 客户端通过传递参数以常规方式启动客户端存根进程。客户端存根存储在客户端自身的地址空间中。它还会请求本地 RPC 运行时将请求发送到服务器存根。

步骤3) 在此阶段,用户通过常规的本地过程调用来访问 RPC。RPC 运行时负责管理客户端和服务器之间通过网络传输的消息。它还执行重传、确认、路由和加密等工作。

步骤4) 服务器流程完成后,执行返回到服务器存根,服务器存根将返回值打包(编组)成一条消息。然后,服务器存根将该消息发送回传输层。

步骤5) 在此步骤中,传输层将结果消息发送回客户端传输层,客户端传输层再将消息返回给客户端存根。

步骤6) 在此阶段,客户端存根对结果数据包中的返回参数进行解包,并将执行返回给调用者。

RPC 的特征

以下是 RPC 的基本特征:

  • 被调用的程序位于另一个进程中,该进程很可能位于另一台机器上。
  • 进程不共享地址空间。
  • 参数仅通过值传递。
  • RPC 在服务器进程环境中执行。
  • 它不提供对调用程序环境的访问权限。

RPC 的功能

以下是 RPC 的重要特性:

  • 简单的调用语法。
  • 提供已知的语义。
  • 提供定义明确的接口。
  • 它可以在同一台机器上或不同机器上的进程之间进行通信。

RPC 的优点

以下是RPC的优点/好处:

  • RPC 通过在高级语言中使用常规的过程调用来帮助客户端与服务器进行通信。
  • RPC 以本地过程调用为模型,但被调用的过程很可能在不同的进程中执行,而且通常是在不同的计算机上执行。
  • RPC 支持面向进程和面向线程的模型。
  • RPC 将内部消息传递机制对用户隐藏起来。
  • 它致力于提高许多协议层的性能。
  • RPC 提供绝对值trac例如,网络通信的消息传递本质对用户来说是隐藏的。
  • RPC既可用于分布式环境,也可用于本地环境。
  • 重写和重新开发代码所需的工作量极小。

RPC 的缺点

以下是使用 RPC 的缺点/缺点:

  • 远程过程调用仅允许按值传递参数;不允许使用指针(引用)值。
  • 远程过程调用(和返回)时间——即开销——比本地过程要高得多。
  • 该机制极易发生故障,因为它涉及通信系统、另一台机器和另一个流程。
  • RPC 概念可以用不同的方式实现,因此没有单一的标准。
  • 由于它主要基于交互,因此在硬件架构方面缺乏灵活性。
  • 由于远程过程调用,该过程的成本增加了。

常见问题

RPC 将操作公开为远程过程,而 REST 将数据公开为可通过 HTTP 动词访问的资源。RPC 的使用体验类似于调用本地函数;REST 则侧重于资源和状态。

gRPC是 Google这是一个现代化的、高性能的 RPC 框架。它使用 HTTP/2 和协议。 Buffer它支持双向流,因此在微服务​​通信中很受欢迎。

RPC 可以同时采用这两种方式。同步调用会阻塞,直到服务器返回结果;而异步调用则会立即返回结果,并在稍后处理响应。像 gRPC 这样的框架同时支持这两种方式。

RPC 是一种跨机器工作的进程间通信 (IPC) 形式。虽然许多 IPC 方法共享同一主机上的内存,但 RPC 通过网络交换消息,使不同计算机上的进程能够协同工作。

常见的 RPC 实现包括 gRPC、Apache Thrift、XML-RPC、JSON-RPC 等。 Java RMI(远程管理接口)。它们在数据格式和传输方式上有所不同,但都允许客户端调用远程服务器上的过程。

RPC 默认情况下并不安全;安全性取决于传输层。实现过程中会添加 TLS 加密、身份验证令牌和访问控制来保护 RPC 调用。

机器学习平台使用 RPC(尤其是 gRPC)在微服务之间传递模型预测结果。客户端发送特征并接收推理结果,以保持模型的完整性和可用性。ping 人工智能系统快速且松耦合。

是的。GitHub Copilot 可以为 gRPC 生成 .proto 服务定义、客户端存根和服务器端处理程序。开发人员在部署到生产环境之前,仍然应该检查生成的接口、错误处理和版本控制。

总结一下这篇文章: