RPC框架分层设计理论

60 阅读2分钟

RPC(Remote Procedure Calls)

  • RPC = 远程函数调用
    • 例如:网上支付
  • 本地函数调用通过指针来解决,但是远程函数调用需要解决以下问题
    • 函数映射
      • 每个都有ip
    • 数据转换成字节流
      • 客户端转换成字节流,再传给服务端
    • 网络运输
  • RPC的优点
    • 单一职责,有利于分工和维护,故障隔离
    • 可扩展性强:压力大的时候可以扩展
  • RPC的弊端
    • 网络异常,服务宕机,如何处理?
    • 可以通过RPC框架解决

RPC概念模型

Screenshot 2023-08-08 at 10.35.04 PM.png

RPC完整过程

  • IDL(Interface description language) 文件
    • 通过中立方式描述接口,使在不同平台运行的对象和用不同语言编写的程序互相通信
    • 可以预计算并且分配内存,来达成优化
  • 生成代码(GenCode)
    • 通过编译工具把IDL文件转换成语言对应静态库
  • 编解码(Encoder/Decoder)
    • 从内存中的表示到字节序列的转换称为编码(序列化),反过来是解码(反序列化)
  • 通讯协议(Protocol)
    • 规范了数据在网络中的传输内容和格式
  • 网络传输(Transfer)
    • 使用 TCP/UDP protocol

Screenshot 2023-08-08 at 11.52.05 PM.png

RPC框架

分层设计 Screenshot 2023-08-08 at 11.52.46 PM.png

编解码层

  • 依赖同一份IDL文件
  • IDL数据格式
    • 语言特定编码格式
      • ex:java.io.Serializable
    • 文本格式
      • JSON,XML,CSV
      • human readable,但是性能不高
    • 二进制
      • 跨语言,高性能
      • Thrift BinaryProtocol: TLV(Tag, Length, Value)编码
  • 编解码选型要考虑的要素
    • 兼容性
      • 支持自动增加新字段,不影响老服务
    • 通用性
      • 跨平台,跨语言
    • 性能
      • 空间和时间

框架协议层

  • 特殊结束符:一个特殊字符作为每个协议单元结束的表示
    • '\r','\n'
  • 变长协议:在每个内容前面加上固定长度的部分,用来表示长度
    • length+message body
  • 协议构造
  • 协议解析过程
    • 读取 magic number 获得协议
    • 读取 编码方式
    • 解码

网络通信层

Sockets API

  • between Application and Transport layer Screenshot 2023-08-08 at 11.53.28 PM.png

网络库

  • 提供易用API
    • 封装底层的Socket API
  • 功能
    • 支持TCP,UDP...
    • 优雅退出以及异常处理
  • 性能
    • use application layer buffer to reduce copy

    • 高性能定时器以及对象池