RPC, 一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同. 程序员对于本地的过程调用很熟悉,那么我们把 RPC 作成和本地调用完全类似.
Nelson 的论文中指出实现 RPC 的程序包括 5 个部分:
- User
- User-stub
- RPCRuntime
- Server-stub
- Server
user 就是 client 端,当 user 想发起一个远程调用时,它实际是通过本地调用 user-stub。user-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的 RPCRuntime 实例传输到远端的实例。远端 RPCRuntime 实例收到请求后交给 server-stub 进行解码后发起本地端调用,调用结果再返回给 user 端。 Java 原生的 RMI
RPC 的目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。 调用分两种:
- 同步调用 客户方等待调用执行完成并返回结果。
- 异步调用 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。 若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。
两台服务器A,B,一个应用部署在A上,想要调用B上应用提供的方法,不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
RPC的协议有很多,CORBA, JAVA RMI, web service 的RPC, Hessian, Thrift, Rest API.
Comments