(二) RPC

作者: 穿秋衣的李白 | 来源:发表于2020-09-13 20:59 被阅读0次

定义

RPC(Remote Procedure Call)远程过程调用,是一种进程间通信方式。通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。

结构

实现RPC的程序需要5个部分
1.User
2.User-stub
3.RPCRuntime
4.Server-stub
5.Server


RPC结构

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

以上是粗粒度的 RPC 实现概念结构,接下来我们进一步细化它应该由哪些组件构成,如下图所示。


细粒度RPC实现
  • RPC 服务方通过 RpcServer 去导出(export)远程接口方法,而客户方通过 RpcClient 去引入(import)远程接口方法。
  • 客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy 。
  • 代理封装调用信息并将调用转交给RpcInvoker 去实际执行。
  • 在客户端的RpcInvoker 通过连接器RpcConnector 去维持与服务端的通道RpcChannel,并使用RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。
  • RPC 服务端接收器 RpcAcceptor 接收客户端的调用请求,同样使用RpcProtocol 执行协议解码(decode)。
  • 解码后的调用信息传递给RpcProcessor 去控制处理调用过程,最后再委托调用给RpcInvoker 去实际执行并返回调用结果。
    如下是各个部分的详细职责:
  1. RpcServer
    负责导出(export)远程接口
  2. RpcClient
    负责导入(import)远程接口的代理实现
  3. RpcProxy
    远程接口的代理实现
  4. RpcInvoker
    客户方实现:负责编码调用信息和发送调用请求到服务方并等待调用结果返回
    服务方实现:负责调用服务端接口的具体实现并返回调用结果
  5. RpcProtocol
    负责协议编/解码
  6. RpcConnector
    负责维持客户方和服务方的连接通道和发送数据到服务方
  7. RpcAcceptor
    负责接收客户方请求并返回请求结果
  8. RpcProcessor
    负责在服务方控制调用过程,包括管理调用线程池、超时时间等
  9. RpcChannel
    数据传输通道

工作原理

RPC的设计由Client,Client stub,Network ,Server stub,Server构成。

  • 其中Client就是用来调用服务的。
  • Cient stub是用来把调用的方法和参数序列化的(因为要在网络中传输,必须要把对象转变成字节)。
  • Network用来传输这些信息到Server stub。
  • Server stub用来把这些信息反序列化的。
  • Server就是服务的提供者,最终调用的就是Server提供的方法。


    RPC工作原理

1. Client像调用本地服务似的调用远程服务;
2. Client stub接收到调用后,将方法、参数序列化
3. 客户端通过sockets将消息发送到服务端
4. Server stub 收到消息后进行解码(将消息对象反序列化)
5. Server stub 根据解码结果调用本地的服务
6. 本地服务执行(对于服务端来说是本地执行)并将结果返回给Server stub
7. Server stub将返回结果打包成消息(将结果消息对象序列化)
8. 服务端通过sockets将消息发送到客户端
9. Client stub接收到结果消息,并进行解码(将结果消息反序列化)
10. 客户端得到最终结果。

RPC 调用分以下两种:

  • 同步调用:客户方等待调用执行完成并返回结果。
  • 异步调用:客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。
    异步和同步的区分在于是否等待服务端执行完成并返回结果。

作用

RPC的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。通过RPC能解耦服务,这才是使用RPC的真正目的。

相关文章

  • RPC(二)浅谈RPC

    上一节《RPC(一)简单理解RPC》中曾提到, “在本地去调用远程机器上的执行(或者叫程序,过程),这个调用过程就...

  • (二) RPC

    定义 RPC(Remote Procedure Call)远程过程调用,是一种进程间通信方式。通过网络从远程计算机...

  • RPC(二)

    上篇文章简单的介绍了RPC的原理和传输协议采用HTTP协议与TCP协议的区别。 其中说到HTTP 协议有连接的建立...

  • (1)SOFARPC 框架之总体设计与扩展机制(源码部分看的好简

    二、RPC 是什么 三、通用 RPC 框架原理 四、SOFARPC 框架设计 五、SOFARPC扩展机制 一、前言...

  • grpc

    Go的RPC标准库 简单使用 Go语言标准库(net/rpc)的RPC规则:方法只能有两个可序列化的参数,其中第二...

  • rpc

    一、什么是rpc? 简而言之,RPC就是一个本地程序可以通过网络调用远程的一个子程序。 二、Go语言的rpc rp...

  • RPC - 小结

    目录 RPC是什么 RPC的优点 RPC的缺点 RPC是什么 RPC(Remote Procedure Call)...

  • 基于Spring、Netty、Zookeeper等实现Rpc远程

    Rpc 核心模块:rpc-client, rpc-server,rpc-support,rpc-api 整个项目基...

  • 服务之间的调用为啥不直接用 HTTP 而用 RPC?

    什么是 RPC?RPC原理是什么? 什么是 RPC? RPC(Remote Procedure Call)—远程过...

  • RPC入门介绍

    RPC 什么是RPC RPC全称Remote Procedure Call,即远程过程调用。要理解RPC,首先要...

网友评论

      本文标题:(二) RPC

      本文链接:https://www.haomeiwen.com/subject/zqybektx.html