RPC

作者: 侧耳倾听y | 来源:发表于2021-03-20 13:33 被阅读0次

    RPC基本原理

    什么是RPC

    RPC是远程过程调用(Remote Procedure Call)的缩写。

    像调用本地方法一样调用远程方法。

    RPC原理

    核心是代理机制

    1. 本地代理存根:Stub
      1. 生成了一个代理类
    2. 本地序列化/反序列化
      1. 借口/方法/参数序列化为二进制数据
    3. 网络通信
      1. 可以走各种协议:tcp/udp/http
    4. 远程序列化/反序列化
    5. 远程服务存根:Skeleton
      1. 找到实现类,负责去调用
    6. 调用实际业务服务
    7. 原路返回服务结果
    8. 返回给本地调用方

    RPC是基于接口的远程服务调用。

    • 设计:本地应用程序与远程应用程序需要共享什么信息,角色有什么不同
      • 共享:POJO实体类定义,接口定义。注意,定义指的并非一定是一个java的实体类,也可以是其他选择:WSDL/WADL/IDL。好处:可以跨语言平台。
      • 本地-》消费者,远程-》提供者
    • 代理
      • java:动态代理,字节码增强;c#有远程代理
      • 深入理解java反射和字节码增强和面向对象的关系
        • 字节码增强完全破坏了面向对象
    • 序列化:序列化和反序列化的选择
      • 语言原生的序列化:RMI,Remoting
      • 二进制平台无关Hessian,avro,kyro,fst等
        • 传输时数据包比较短小
      • 文本/JSON/XML/JSON RPC等
    • 网络传输
      • TCP/SSL
      • http/https
    • 查找实现类:通过借口查找服务端实现类
      • 一般是注册方式:dubbo默认将接口和实现类配置到spring

    RPC技术框架

    如何设计一个RPC

    从哪些方面考虑

    • 基于共享接口还是IDL(接口描述语言)
    • 动态代理or aop
    • 序列化用什么,文本 or 二进制
    • 基于tcp还是http
    • 服务端如何查找实现类
    • 异常处理

    从RPC到分布式服务化

    分布式场景,除了能远程调用方法,还需要考虑什么

    • 多个相同服务如何管理
    • 服务的注册发现机制
    • 如何负载均衡/路由等集群功能
    • 熔断/限流等治理能力
    • 重试等策略
    • 高可用/监控/性能等

    相关文章

      网友评论

          本文标题:RPC

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