探寻RPC

8 篇文章 0 订阅
8 篇文章 0 订阅

探寻RPC

1 什么是RPC

RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。也是一种协议。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员 无论是调用本地的还是远程的,本质上编写的调用代码基本相同。

他的创始人Nelson提到几点:

    1. 简单:RPC 概念的语义十分清晰和简单,这样建立分布式计算就更容易。
     2. 高效:过程调用看起来十分简单而且高效。
     3. 通用:在单机计算中过程往往是不同算法部分间最重要的通信机制。 

通俗一点说,就是一般程序员对于本地的过程调用很熟悉,那么我们把 RPC 作成和本地调用完全类似,那么就更容易被接受,使用起来毫无障碍。Nelson 的论文发表于 30 年前,其观点今天看来确实高瞻远瞩,今天我们使用的 RPC 框架基本就是按这个目标来实现的。

1.1 RPC的结构

RPC采用客户机/服务器模式。 请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端, 进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

 

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

1.2 RPC结构拆解

RPC 服务方通过 RpcServer 去导出(export)远程接口方法,而客户方通过 RpcClient 去引入(import)远程接口方法。客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy 。代理封装调用信息并将调用转交给RpcInvoker 去实际执行。在客户端的RpcInvoker 通过连接器RpcConnector 去维持与服务端的通道RpcChannel,并使用RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。


RPC 服务端接收器 RpcAcceptor 接收客户端的调用请求,同样使用RpcProtocol 执行协议解码(decode)。解码后的调用信息传递给RpcProcessor 去控制处理调用过程,最后再委托调用给RpcInvoker 去实际执行并返回调用结果。

1.3 RPC中各组件的作用

1. RpcServer  负责导出(export)远程接口  

2. RpcClient  负责导入(import)远程接口的代理实现  

3. RpcProxy  远程接口的代理实现  

4. RpcInvoker  客户方实现:负责编码调用信息和发送调用请求到服务方并等待调用结果返回 ;            服务方实现:负责调用服务端接口的具体实现并返回调用结果  

5. RpcProtocol  负责协议编/解码  

6. RpcConnector    负责维持客户方和服务方的连接通道和发送数据到服务方  

7. RpcAcceptor   负责接收客户方请求并返回请求结果  

8. RpcProcessor   负责在服务方控制调用过程,包括管理调用线程池、超时时间等  

9. RpcChannel    数据传输通道 

1.4 RPC调用分类

RPC分为两种:

  1. 同步调用:客户方等待调用执行完成并返回结果。

  2. 异步调用:客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。

  若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。

异步和同步的区分在于是否等待服务端执行完成并返回结果。我们toaster的例子使用的的是异步的调用,因为使用了future接口。

 

2 为什么要使用RPC?

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

为何需要RPC。对于controller来说,如何快速高效的调用功能和方法显得十分重要,RPC通过提供一种透明的调用机制,让使用者不必明显的区分本地调用和远程调用。这一点类似于SDN的控制面与转发面分离的思想。同时RPC还可以向controller返回调用的结果。

RPCNotification都能返回消息,他们返回消息区别是:

RPC处理的是进程之间的调用,无论调用结果是什么都会返回给controller;而Notification只有当处理结果达到一定状态的时候才会返回结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值