RPC框架|青训营笔记

42 阅读2分钟

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

基本概念

远程函数调用(RPC - Remote Procedure Calls)

  • RPC的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server

image.png

  • 相比本地函数调用,RPC调用需要解决的问题

    • 函数映射
    • 数据转换成字节流
    • 网络传输
  • 一次 RPC 的完整过程

image.png

  • RPC 带来的问题将由 RPC 框架来解决

    • 服务宕机如何感知?
    • 遇到网络异常应该如何应对?
    • 请求量暴增怎么处理?

分层设计

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

  • 数据格式

    • 语言特定格式:例如 java.io.Serializable
    • 文本格式:例如 JSON、XML、CSV 等
    • 二进制编码:常见有 Thrift 的 BinaryProtocol,Protobuf,实现可以有多种形式,例如 TLV 编码 和 Varint 编码
  • 选型考察点:兼容性、通用型、性能(空间开销和时间开销)

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

image.png

协议层

  • 协议解析

image.png

网络通信层

image.png

关键指标

稳定性

  • 保障策略

image.png

  • 请求成功率:负载均衡、重试
  • 长尾请求:backuprequest

image.png

易用性

扩展性

  • Middleware:middleware 会被构造成一个有序调用链逐个执行,比如服务发现、路由、负载均衡、超时控制等
  • Option:作为初始化参数
  • 核心层是支持扩展的:编解码、协议、网络传输层
  • 代码生成工具也支持插件扩展

image.png

观测性

image.png

高性能

image.png

企业实践

  • Kitex

image.png

感受与总结

最开始知道rpc是在6.824里面,现在更全面且深入地了解了rpc的架构、分层以及关键指标。虽然感觉这次大项目由于和期末考试冲突无法尝试用kitex进行架构,但是可以之后尝试用kitex完善那个项目。加油加油~

参考资料

  1. juejin.cn/course/byte…
  2. web.eecs.umich.edu/~mosharaf/R…
  3. bytedance.feishu.cn/file/boxcn5…