RPC框架理论|青训营笔记

90 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第14天,今天学习了RPC框架理论,下面是我的笔记。

1、RPC基本概念

  • RPC:远程函数调用
  • 通过网络协议调用远程函数

一次RPC的完整过程:

  • IDL(Interface description language):通过一种中立的方式描述接口,使得在不同平台上运行的对象和不同语言编写的程序可以相互通信
  • 生成代码:通过编译器工具吧IDL文件转换成语言对应的静态库
  • 编解码 ,序列化与反序列化
  • 通信协议:规范了数据在网络中的传输内容和格式,除必须请求/响应数据外,通常还会包含额外的元数据。
  • 网络传输:通常基于成熟的网络库走TCP/UDP传输

RPC的好处:

  1. 单一职责,有利于分工协作和运维开发
  2. 可扩展性强,资源使用率更优
  3. 故障隔离,服务的整体可靠性更高

概念模型:

  • User User-stub RPCRuntime Server-stub Server

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

2、RPC框架

RPC 框架分层设计

  • 编解码层

    • 数据格式:
      • 语言特定格式
      • 文本格式
      • 二进制编码
        • TLV 编码:Thrift 使用 TLV 编码
        • Varint 编码:Protobuf 使用 Varint 编码
  • 传输协议层

    • 消息切分
      • 特殊结束符
      • 变长协议:length+body
  • 网络通信层

    • 网络库
    • 核心指标
      • 吞吐高
      • 延迟低

RPC框架核心指标

  • 稳定性
    • 熔断:保护调用方:一个服务A调用服务B时,服务B的业务逻辑调用C,c超时,导致B一直等待,而A一直调用服务B,而导致请求宕机
    • 限流:保护被调用方:当调用端发送请求过来时,服务端在执行业务逻辑之前先检查限流逻辑,如果发现访问量过大并且超出了限流条件,就让服务端降级处理或者返回给调用方一个限流异常
    • 超时:避免浪费资源在不可用结点,服务降级
  • 易用性
    • 开箱即用
    • 良好的周边工具
  • 扩展性
  • 观测性
    • Log,Metric,Tracing
    • 内置观测性服务
  • 高性能
    • 高吞吐量,低延迟
    • 连接池
    • 多路复用
    • 高性能编解码协议
    • 高性能网络库

3、小结

  1. 框架通过中间件来注入各种服务治理策略,保障服务的稳定性。
  2. 通过合理的默认配置和命令行工具可以提升框架的易用性。
  3. 框架应该提供丰富的扩展点
  4. 观测性除了传统的Log,tracing,内置状态暴露服务也很有必要
  5. 性能可以从多个层面去优化,选择高性能的编解码协议和网络库