什么是rpc
rpc(remote procedure call)远程进程调用,例如:在分布式或者微服务架构中,服务器A想调用服务器B中的一个方法,由于不在同一个内存空间,不能直接调用,需要通过网络来表达调用的语义和调用的数据。
rpc的工作原理
RPC 工具使用户看起来好像客户端直接调用位于远程服务器程序中的过程。客户端和服务器都有自己的地址空间;也就是说,每个都有自己的内存资源分配给过程使用的数据。下图说明了 RPC 架构。
如图所示,客户端应用程序调用本地存根过程,而不是实现该过程的实际代码。存根被编译并与客户端应用程序链接。客户端存根代码不包含实现远程过程的实际代码:
- 从客户端地址空间中检索所需的参数。
- 根据需要将参数转换为标准 NDR 格式,以便通过网络传输。
- 调用 RPC 客户端运行时库中的函数以将请求及其参数发送到服务器。
服务器执行以下步骤来调用远程过程。
- 服务器 RPC 运行时库函数接受请求并调用服务器存根过程。
- 服务器存根从网络缓冲区检索参数,并将它们从网络传输格式转换为服务器需要的格式。
- 服务器存根调用服务器上的实际过程。
然后远程过程运行,可能生成输出参数和返回值。当远程过程完成时,类似的步骤序列将数据返回给客户端。
- 远程过程将其数据返回给服务器存根。
- 服务器存根将输出参数转换为通过网络传输所需的格式,并将它们返回给 RPC 运行时库函数。
- 服务器 RPC 运行时库函数将网络上的数据传输到客户端计算机。
客户端通过接受网络上的数据并将其返回给调用函数来完成该过程。
- 客户端 RPC 运行时库接收远程过程返回值并将它们返回给客户端存根。
- 客户端存根将数据从其 NDR 转换为客户端计算机使用的格式。存根将数据写入客户端内存并将结果返回给客户端上的调用程序。
- 调用过程继续进行,就像在同一台计算机上调用了该过程一样。
运行时库分两部分提供:与应用程序链接的导入库和作为动态链接库 (DLL) 实现的 RPC 运行时库。
服务器应用程序包含对服务器运行时库函数的调用,这些函数注册服务器的接口并允许服务器接受远程过程调用。服务器应用程序还包含由客户端应用程序调用的特定于应用程序的远程过程。
|