RPC框架 | 青训营笔记

30 阅读2分钟

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

基本概念

一般我们调用函数都在本地,RPC就是一个让我们远程调用函数的工具

需要解决的问题

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

一次RPC的完整过程

  • IDL
  • 生成代码
  • 编解码
  • 通信协议
  • 网络传输

优点

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

问题

  • 如何解决服务宕机
  • 如何保证消息可达性
  • 请求量徒增导致服务无法及时处理,有哪些应对措施

分层设计

编解码

  • 数据格式

    • 语言特性格式:许多编程语言都内建了将内存对象棉麻为字节序列的支持,例如java有java.io.Serializable
    • 文本格式:JSON,XML,CSV等文本格式,具有人类可读性
    • 二进制编码:BinaryProtocol,Protobuf
  • 选型

    • 兼容性
    • 通用性
    • 性能

协议层

  • 概念

    • 特殊结束符:一个特殊字符作为每个协议单元结束的表示
    • 变长协议:以定长加不定长的部分组成,其中定长的部分需要描述不定长的内容长度
  • 构造

    • LENGTH
    • HHEADER MAGIC
    • SEQUENCE NUMBER
    • HEADER SIZE
    • PROTOCOL ID
    • TRANSFORM ID
    • INFO ID
    • PAYLOAD

网络通信层

  • 网络库
    • 提供易用API
    • 支持TCP,UDP,UDS等
    • 应用层buffer减少copy提高性能

关键指标

稳定性

  • 熔断

    • 保护调用方,防止被调用的服务出现问题而影响到整个链路
  • 限流:

    • 保护被调用方,防止大流量把服务压垮
  • 超时控制

    • 避免浪费资源在不可用结点上

易用性

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

拓展性

  • Middleware
  • Option
  • 解编码层
  • 协议层
  • 网络传输层
  • 代码生成工具插件拓展

高性能

保证在单机多机,不同大小请求包等场景中,利用连接池,多路复用,高性能编解码协议,高性能网络库等手段实现高吞吐低延迟的目标

企业实践

  • Kitex

    • Kitex Core
    • Kitex Byted
    • Kitex Tool
  • Netpoll