09月28, 2017

Remote Procedure Call Protocal

RPC, 一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同. 程序员对于本地的过程调用很熟悉,那么我们把 RPC 作成和本地调用完全类似.

Nelson 的论文中指出实现 RPC 的程序包括 5 个部分:

  1. User
  2. User-stub
  3. RPCRuntime
  4. Server-stub
  5. Server alt

user 就是 client 端,当 user 想发起一个远程调用时,它实际是通过本地调用 user-stub。user-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的 RPCRuntime 实例传输到远端的实例。远端 RPCRuntime 实例收到请求后交给 server-stub 进行解码后发起本地端调用,调用结果再返回给 user 端。 Java 原生的 RMI

RPC 的目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。 调用分两种:

  1. 同步调用 客户方等待调用执行完成并返回结果。
  2. 异步调用 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。 若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。

两台服务器A,B,一个应用部署在A上,想要调用B上应用提供的方法,不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

RPC的协议有很多,CORBA, JAVA RMI, web service 的RPC, Hessian, Thrift, Rest API.

本文链接:https://harry.ren/post/remote-procedure-call.html

-- EOF --

Comments