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