• RPC


    rpc是啥?

      作为好像是程序员的我,并不知道啥是rpc啊,看到一篇文章说程序员给他媳妇说什么是rpc,说是Remote Procedure Call,远程过程调用,然后我的反应是跟他媳妇一样,远程过程调用是啥?继续“相对于本地过程调用”,那本地过程调用是啥?悲剧的我。

      单体应用时,要调用Calculator的add方法来执行一个加运算,直接new一个CalculatorImpl,然后调用add方法就行了,这其实就是非常普通的本地函数调用,因为在同一个地址空间,或者说在同一块内存,所以通过方法栈和参数栈就可以实现。
      慢慢为了高可用高性能,将重复的业务抽离出去,单独放到一个服务里头,让别的服务去调用它,暴露restful接口供调用,需要http请求去调是http协议。而rpc是tcp协议。

    RPC要解决的两个问题:

    1. 解决分布式系统中,服务之间的调用问题。
    2. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
      看了一圈还是蒙的,没看明白啥是RPC。难道是通过socket方式进行调用,不用http么?以下是网上找到的说明,见https://www.cnblogs.com/swordfall/p/8683905.html

      (1) 客户端(client)以本地调用方式(即以接口的方式)调用服务;

      (2) 客户端存根(client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体(将消息体对象序列化为二进制);

      (3) 客户端通过sockets将消息发送到服务端;

      (4) 服务端存根( server stub)收到消息后进行解码(将消息对象反序列化);

      (5) 服务端存根( server stub)根据解码结果调用本地的服务;

      (6) 本地服务执行并将结果返回给服务端存根( server stub);

      (7) 服务端存根( server stub)将返回结果打包成消息(将结果消息对象序列化);

      (8) 服务端(server)通过sockets将消息发送到客户端;

      (9) 客户端存根(client stub)接收到结果消息,并进行解码(将结果消息发序列化);

      (10) 客户端(client)得到最终结果。

    RPC的目标是要把2、3、4、7、8、9这些步骤都封装起来。

      那rpc和restful有啥区别呢?rpc是在传输层的TCP协议上,效率更快,不需要网络传输和3次握手等,适合大型企业;restful是在http协议上,应用层,适合小型企业,迭代快开发方便。

      简单的实现如:https://www.cnblogs.com/nele/p/7577178.html

  • 相关阅读:
    php发送http请求带json格式数据
    a标签跳转,打开一个新页面
    echarts图例多行显示,并且全部对齐
    原子性,有序性,可见性
    winds消息大全
    C#中的结构体和对象区别
    装饰者模式
    hashMapp
    linux 定时任务
    windsServer2008设置定时重启
  • 原文地址:https://www.cnblogs.com/yokiblogs/p/12202283.html
Copyright © 2020-2023  润新知