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

64 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第 14 天。笔记旨在记录自己的学习过程以及跟更多人分享交流,重点讲干货,不扣细节,从整体认知。废话不多说,上内容!!!

本堂课重点内容

  1. RPC 相关的基本概念
  1. RPC 框架的分层设计
  1. 衡量 RPC 框架的一些核心指标
  1. 字节内部 RPC 框架 Kitex 实践分享

详细知识点介绍

RPC 的基本概念
  • RPC的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server
  • IDL(Interface Definition Language) 文件

  • 生成代码
  • 编解码(序列化/反序列化)
  • 通信协议

    • 应用层协议
  • 网络通信

    • IO 网络模型

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

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

    • 函数映射
    • 数据转换成字节流
    • 网络传输
  • 一次 RPC 的完整过程
  • RPC 带来的问题将由 RPC 框架来解决

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

image.png

  • 编解码层

    • 数据格式:

      • 语言特定格式

      • 文本格式

      • 二进制编码

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

      • 兼容性
      • 通用型
      • 性能

image.png

  • 传输协议层

    • 消息切分

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

      • 以 Thrift 的 THeader 协议为例讲解

image.png

  • 网络通信层

    • 网络库

    • 核心指标

      • 吞吐高
      • 延迟低

image.png

RPC 框架的核心指标
  • 稳定性

    • 保障策略

      • 熔断
      • 限流
      • 超时
    • 请求成功率

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

      • BackupRequest
  • 易用性

    • 开箱即用
    • 周边工具
  • 扩展性
  • 观测性

    • Log
    • Metric
    • Tracing
    • 内置观测性服务
  • 高性能

实践练习例子

字节内部 Kitex 实践分享

  • 合并部署

课后个人总结

  1. RPC 就是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

  2. RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。 HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

引用参考

  1. 稀土掘金字节内部课
  2. 深入浅出RPC框架
  3. 后端专场 学习资料五 第五届字节跳动青训营