GO语言|青训营笔记

55 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15天

RPC 原理与实践

RPC 的基本概念

  • IDL(Interface Definition Language) 文件

    • Thrift
    • Protobuf
  • 生成代码
  • 编解码(序列化/反序列化)
  • 通信协议

    • 应用层协议
  • 网络通信

    • IO 网络模型

      • blocking IO
      • unblocking IO
      • IO multiplexing
      • signal driven IO
      • asynchronous IO
  • 传输层协议

    • TCP
    • UDP### RPC 框架分层设计
  • 编解码层

    • 数据格式:

      • 语言特定格式

      • 文本格式

      • 二进制编码

        • TLV 编码:Thrift 使用 TLV 编码
        • Varint 编码:Protobuf 使用 Varint 编码
    • 选项:

      • 兼容性
      • 通用型
      • 性能- 传输协议层
    • 消息切分

      • 特殊结束符
      • 变长协议:length+body
    • 协议构造

      • 以 Thrift 的 THeader 协议为例讲解
  • 网络通信层

    • 网络库

    • 核心指标

      • 吞吐高
      • 延迟低### RPC 框架的核心指标
  • 稳定性

    • 保障策略

      • 熔断
      • 限流
      • 超时
    • 请求成功率

      • 负载均衡
      • 重试
    • 长尾请求

      • BackupRequest
  • 易用性

    • 开箱即用
    • 周边工具- 扩展性
  • 观测性

    • Log
    • Metric
    • Tracing
    • 内置观测性服务
  • 高性能### 字节内部 Kitex 实践分享

  • Kitex 整体架构

  • 合并部署### RPC 框架分层设计

CleanShot 2023-02-10 at 16.20.39@2x.png

编解码层

  • 数据格式

    • 语言特定格式:例如 java.io.Serializable
    • 文本格式:例如 JSON、XML、CSV 等
    • 二进制编码:常见有 Thrift 的 BinaryProtocol,Protobuf,实现可以有多种形式,例如 TLV 编码 和 Varint 编码
  • 选型考察点

    • 兼容性

    • 通用型

    • 性能

      • 空间开销
      • 时间开销
      • 间开销
  • 生成代码和编解码层相互依赖,框架的编解码应当具备扩展任意编解码协议的能力

CleanShot 2023-02-10 at 16.21.08@2x.png