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

64 阅读2分钟

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

本节导航

  • RPC 的基本概念
  • RPC 框架分层设计
  • RPC 框架的核心指标

RPC 的基本概念

  • RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。简言之,RPC使得程序能够像访问本地系统资源一样,去访问远端系统资源。比较关键的一些方面包括:通讯协议、序列化、资源(接口)描述、服务框架、性能、语言支持等。
  • RPC的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server

  • IDL(Interface Definition Language) 文件

    • Thrift
    • Protobuf
  • 编解码(序列化/反序列化)

  • 通信协议

    • 应用层协议
  • 网络通信

    • IO 网络模型

      • blocking IO
      • unblocking IO
      • IO multiplexing
      • signal driven IO
      • asynchronous IO
    • 传输层协议

      • TCP
      • UDP

RPC 框架分层设计

img

  • 编解码层

    • 数据格式:

      • 语言特定格式

      • 文本格式

      • 二进制编码

        • TLV 编码:Thrift 使用 TLV 编码
        • Varint 编码:Protobuf 使用 Varint 编码
    • 选项:

      • 兼容性
      • 通用型
      • 性能
  • 传输协议层

    • 消息切分

      • 特殊结束符
      • 变长协议:length+body
    • 协议构造

      • 以 Thrift 的 THeader协议为例讲解
  • 网络通信层

    • 网络库

    • 核心指标

      • 吞吐高
      • 延迟低

RPC 框架的核心指标

  • 稳定性

    • 保障策略

      • 熔断
      • 限流
      • 超时控制

img

  • 请求成功率

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

    • BackupRequest
  • 易用性

    • 开箱即用

      • 合理的默认参数选项、丰富的文档
    • 周边工具

      • 生成代码工具、脚手架工具
  • 扩展性

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

    • 三件套:Log、Metric 和 Tracing
    • 内置观测性服务,用于观察框架内部状态
  • 高性能

    • 连接池和多路复用:复用连接,减少频繁建联带来的开销
    • 高性能编解码协议:Thrift、Protobuf、Flatbuffer 和 Cap'n Proto 等
    • 高性能网络库:Netpoll 和 Netty 等