• RPC远程过程调用详解



    RPC(remote procedure call)
    分布式系统中, 服务之间的相互调用更加方便, 像调用本地服务一样.(无感远程调用)

    实现RPC模型的函数和模块有很多, 只要通过该模型来实现远程调用, 都可称呼为RPC

    Python中的RPC模型包有gRPC,xmlrpc等
    但是, 需要明确的一点, RPC只是实现远程调用的一种思维, 一种模型. 许许多多的模块都会使用RPC思想模型进行构建.

     


    RPC的调用步骤为:
    发送 另端服务
    user调用 ==>> client-stub打包参数 ==>> RPCRun发送... RPCRun接受 ==>> Server-stub 解包 ==>> Server进行调用,处理结果.

    接受顺序相反: 客户端
    Server得到结果,发送 ==>> ServerStub 打包返回值 ==>> RPCRun发送 ... RPCRun接受 ==>> ClientStub解包 ==>> 传递给User

     



     


    RCP模块的工作内容:

    除了中间的RPC部分, 其他和本地调用基本一样: 调用, 然后返回结果.
    封装在RPC的服务调用部分工作内容:
    在调用别的服务器的时候需要.
    打包相关参数, 然后通过RPC发送请求并等待返回.
    其他服务的RPC接收到请求,解包运行 打包返回.


    每个服务要做的就是, 接受RPC解包分析请求, 然后调用服务返回结果, 最后返回内容前依旧打包.


    打包解包:

    在流程中, 除了相应服务这个必不可少的环节, 打包解包对也占比很重.

    一般不管使用何种协议进行通讯, 必要的加密和解密, 以及数据的核对校验都十分重要.
    RPC的编写应注意高效低延时, 数据保密性等.

    在需要高效低延的RPC中, 一般很少去采用http通讯协议, http协议头较重, 相对二进制通讯来说需要传递很多臃肿的信息.

    更多的时候是用过 序列化 和 反序列化 来实现内容的.


    拓展:

    -----
    RPC与RESTful与RMI的区别差异.
    RPC是完成 远程调用的方式方法的过程
    RESTful 是url的命名风格.

    如果书写一个RPC模块API的url地址,应该为:
    queryGoods?goods_id = 1

    RPC用来书写接口的时候更多是偏向于查询过程:
    Goods?goods_id = 1

    RESTful是资源的资源的增删改查.

    两者在风格上的体现完全不同,显而易见, RESTful风格的接口在对接前端和阅读上拥有更好的可读性.

    -----
    RPC 与 RMI(Remote Method Ivocation)
    RMI 是远程方法调用.
    只有Java里面才可使用, 可以理解为是java语言中的RPC.
    java中的虚拟机jvm实现进程通讯采用的就是RMI协议.
    RMI中的每个方法都具有签名, RMI客户端和服务器通过方法签名进行远程方法调用,

    -----
    高性能的RPC框架:
        Dubbo


    -----
    RPC与Celery
    Python中常用的异步处理,中的消息队列的实现原理, 与RPC类似.
    都需要传递响应的参数以及函数名.


     

  • 相关阅读:
    你的代码又导致资金损失了?活该!
    rabbitmq实现指定消费者才能消费
    没有绝对,没有百分百
    jenkins构建触发器之Build whenever a snapshot dependency is built
    豁然明白的囧事 之 执行mvn:clean deploy提示401 Unauthorized
    (8/8)RPC方法的参数,能用枚举就请考虑枚举
    abstract 关键字
    练习题------代码块
    代码块
    static 关键字
  • 原文地址:https://www.cnblogs.com/jrri/p/11863749.html
Copyright © 2020-2023  润新知