美文网首页
RPC学习心得

RPC学习心得

作者: 小pb | 来源:发表于2019-12-10 13:18 被阅读0次

    IPC和RPC

    进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。
    进程是计算机系统分配资源的最小单位。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一计算机上或网络连接的不同计算机上。 进程间通信技术包括消息传递、同步、共享内存和远程过程调用。 IPC是一种标准的Unix通信机制。

    有两种类型的进程间通信(IPC)。

    • 本地过程调用(LPC)LPC用在多任务操作系统中,使得同时运行的任务能互相会话。这些任务共享内存空间使任务同步和互相发送信息。
    • 本地过程调用(LPC)LPC用在多任务操作系统中,使得同时运行的任务能互相会话。这些任务共享内存空间使任务同步和互相发送信息。

    为什么RPC呢?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如不同的系统间的通讯,甚至不同的组织间的通讯。由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用。

    RPC的通信过程

    RPC(Remote Promote Call) 一种进程间通信方式。允许像调用本地服务一样调用远程服务。
    RPC 这个概念术语在上世纪 80 年代由 Bruce Jay Nelson 提出的,Nelson 的论文中指出实现 RPC 的程序包括 5 个部分:

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

    这五个部分的关系是:


    rpc基本结构.png

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

    RPC结构的实现

    Rpc结构图.png

    客户端具体的调用过程:

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

    服务器端具体的调用过程:

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

    RPC 组件职责

    上面我们进一步拆解了 RPC 实现结构的各个组件组成部分,下面我们详细说明下每个组件的职责划分。

    1. RpcServer
       负责导出(export)远程接口
    2. RpcClient
       负责导入(import)远程接口的代理实现
    3. RpcProxy
       远程接口的代理实现
    4. RpcInvoker
       客户方实现:负责编码调用信息和发送调用请求到服务方并等待调用结果返回
       服务方实现:负责调用服务端接口的具体实现并返回调用结果
    5. RpcProtocol
       负责协议编/解码
    6. RpcConnector
       负责维持客户方和服务方的连接通道和发送数据到服务方
    7. RpcAcceptor
       负责接收客户方请求并返回请求结果
    8. RpcProcessor
       负责在服务方控制调用过程,包括管理调用线程池、超时时间等
    9. RpcChannel
       数据传输通道
    

    协议理解

    接口调用通常包含两个部分,序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、bytes等;通信比较流行的是http、soap、websockect,RPC通常基于TCP实现,常用框架例如netty。

    参考:
    RPC简介及框架选择
    深入浅出 RPC - 深入篇

    深入浅出 RPC - 浅出篇

    相关文章

      网友评论

          本文标题:RPC学习心得

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