后端学习 | 青训营笔记

50 阅读2分钟

这是我参与「第五届青训营 」伴学笔记活动十五天。 

RPC


基本概念

  • 相比本地函数调用,RPC调用需要解决的问题(使用ip+port 或者是 DNS 不能满足微服务所需的远程函数调用)
    • 函数映射 使用ip+端口提供的端口数量有限
    • 数据换成字节流
    • 网络传输
  • 一次完整的调用过程
  • RPC问题
    • 服务宕机如何感知?
    • 网络异常如何应对
    • 请求暴增怎么处理
  • 概念模型
    • user
    • user-stub
    • rpc-runtime
    • server-stub
    • server‘
  • IDL (interface definition language)文件
    • thrift
    • protobuf
  • 生成代码
  • 编解码(序列化、反序列化)
  • 通信协议
    • 应用层协议
      • 二进制流的传输
  • 网络通信
    • IO网络模型
      • blocking IO
      • unblocking IO
      • IO mutiplexing
      • signal driven IO
      • asynchronous IO
    • 传输层协议
      • TCP
      • UDP

RPC框架分层设计

  • 编解码层
    • 数据格式
      • 语言特定格式 java.io
      • 文本格式 json XML CSV
      • 二进制编码
        • TLV编码:thrift使用TLV编码
        • Varint编码:protobuf使用varint编码
      • 选项
        • 兼容性
        • 通用型
        • 性能
          • 空间开销
          • 时间开销
    • 传输协议层
      • 消息切分
        • 特殊结束符
        • 变长协议:length+body
      • 协议构造
        • thrift header协议
    • 网络通信层
      • IO
        • 阻塞:浪费线程
        • 非阻塞:浪费CPU
      • 网络库
      • 核心指标
        • 吞吐高
        • 延迟低

PRC框架的核心指标

  • 稳定性
    • 保障策略
      • 熔断
      • 限流
      • 超时
      • 三者是一种服务降级手段
    • 请求成功率
      • 负载均衡
      • 重试
    • 长尾请求
      • backrequest
  • 易用性
    • 开箱即用
      • 合理默认的参数选项、丰富的文档
    • 周边工具
      • 生成代码工具、脚手架工具
  • 扩展性
  • 观测性
    • LOG
    • metric
    • tracing
    • 内置观测性服务
      • 当前环境变量
      • 配置参数
      • 缓存信息
      • 内置pprof用于排查问题
  • 高性能
    • 连接池和多路复用
    • 高性能编解码协议
    • 高翔能网络库

总结

 RPC在我看来,是在大量服务端内部功能调用的时候,遇到了传统通信协议不能满足其性而量身定制的通讯协议组件。