分析抖音的互联网框架-RPC|青训营

217 阅读3分钟

分析抖音的互联网框架-RPC(远程过程调用协议)

原文链接‍‬深入浅出 RPC 框架 副本.pptx - 飞书云文档 (feishu.cn)

一、基本概念

1.RPC需要解决的问题

  • 函数映射
  • 数据转换成字节流
  • 网络传输

2.RPC概念模型

  • user(服务调用方)
  • user-stub(调用方的本地存根)
  • RPCRuntime(RPC通信者)
  • server-stub(服务端的本地存根)
  • server(服务端)

3.一次RPC的完整过程

IDL文件(interface description lanuage)

  • 通过一种中立的方式去描述接口,使得在不同平台上运行的对象和用不同语言编写的程序得以通信。

生成代码

  • 通过编译器工具把IDL文件转换成语言对应的静态库。

编解码

  • 从内存中表示到字节序列的转换称为编码,反之为解码,叫做序列化和反序列化。

通信协议

  • 规划数据在网络中的传输格式和内容,除必须的请求和响应数据外,通常还会包括额外的元数据。

网络传输

  • 基于成熟的网络库走向TCP/UDP传输

4.RPC的好处

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

二、分层设计

1.以Apache Thrift为例

image.png 图片来源于‍‬​⁣​​‍‌​⁡⁡⁤​⁣​‬​‌‍⁡⁢⁡​⁢⁡⁡⁢‬⁢⁣⁡‌⁣⁣⁣⁢‍⁤‌⁢​​‬‌深入浅出 RPC 框架 副本.pptx - 飞书云文档 (feishu.cn)

2.编解码层-数据格式

  • 语言特定的格式:许多编程语言都内建了将内存对象编码为字节序列的支持
  • 文本格式:JSON、CSV、XML
  • 二进制编码:具备跨语言和高性能等优点,常见有Thrift的BinaryProtocol,Protobuf等

3.协议层

协议是双方确定的交流语义,比如:设计一个字符串的传输协议,它允许客户端发送一个字符串,服务端接收到对应的字符串。 协议构造

  • LENGTH:数据包大小,不包含自身。
  • HEADER MAGIC:标识版本信息,解析协议时快速校验。
  • SEQUENCE NUMBER:表示数据包的seqID,可用于多路复用,单连接内递增。
  • HEADER SIZE:头部长度,从第14个字节开始计算一直到PAYLOAD前。
  • PROTOCOLID:编解码方式,有Binary和Compact两种。
  • TRANSFORM ID:压缩方式有zlib和snappy
  • INFO ID:传递一些定制的meta信息
  • PAYLOAD:消息体。

4.网络通信层

  • 提供易用API:封装底层Socket API;连接管理和事件分发
  • 功能:协议支持tcp,udp,uds等;优雅退出,异常处理等
  • 性能:应用层Buffer减少copy,高性能定时器、对象池等

三、关键指标

1.稳定性-保障策略

  • 熔断:保护调用方,防止被调用的服务出现问题而影响整个链路。
  • 限流:保护被调用方,防止大流量把服务压垮
  • 超时控制:避免浪费资源在不可用节点上

2.易用性

  • 开箱即用:合理的默认参数选项、丰富的文档
  • 周边工具:生成代码工具、脚手架工具

3.小节

  • 框架通过中间件来注入各种服务治理策略,保障服务的稳定性。
  • 提供合理的默认配置和方便的命令行工具可以提升框架的易用性。
  • 框架应当提供丰富的扩展点,例如核心的传输层和协议层。
  • 观测性除了传统的Log、Metric和Tracing之外,内置状态暴露服务也很有必要
  • 性能可以从多个层面去优化,例如选择高性能的编解码协议和网络库