RPC 原理与实践 | 青训营笔记

86 阅读2分钟

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

本节课程主要分为四个方面:

  1. RPC 相关的基本概念
  1. RPC 框架的分层设计
  1. 衡量 RPC 框架的一些核心指标
  1. 字节内部 RPC 框架 Kitex 实践分享

基本概念

rpc远程函数调用:解决的问题

1.函数映射 2.数据转换成字节流 3.网络传输

概念模型

image.png

任何 RPC 客户机-服务器程序的重要实体都包括 IDL 文件(接口定义文件)、客户机 stub、服务器 stub 以及由客户机和服务器程序共用的头文件。客户机和服务器 stub 使用 RPC 运行时库通信。RPC 运行时库提供一套标准的运行时例程来支持 RPC 应用程序。

分层设计

image.png 编解码层-生成代码:

客户端和服务端通过一份idl文件生成不同语言的codeGen

协议层:

特殊结束符 一个特殊字符作为每个协议单元结束的标示

image.png

变长协议 以定长加不定长的部分组成,其中定长的部分需要描述不定长的内容长度

image.png

协议构造

image.png LENGTH:数据包大小,不包含自身

HEADER MAGIC:标识版本信息,协议解析时候快速校验

SEQUENCE NUMBER:表示数据包的seqID,可用于多路复用,单连接内递增

HEADER SIZE:头部长度,从第14个字节开始计算一直到 PAYLOAD前

PROTOCOL ID:编解码方式,有Binary和Compact两种

TRANSFORM ID:压缩方式,如zlib和 snappy

INFO ID:传递一些定制的meta 信息

PAYLOAD:消息体

协议解析

image.png

网络通信层

Sockets API image.png

核心指标

  • 稳定性

    • 保障策略

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

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

      • BackupRequest
  • 易用性

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

    • Log
    • Metric
    • Tracing
    • 内置观测性服务
  • 高性能