深入浅出RPC框架(下)| 青训营笔记

92 阅读2分钟

03 关键指标

  1. 稳定性 框架通过中间件来注入各种服务治理策略,保障服务的稳定性
  • 保障策略:熔断、限流、超时控制
  • 请求成功率:负载均衡、重试
  • 长尾请求:Backup Request
  1. 易用性 通过提供合理的默认配置和方便的命令行工具可以提升框架的易用性
  • 开箱即用
  • 周边工具
  1. 扩展性 框架应当提供丰富的扩展点,例如核心的传输层和协议层
  • Middleware
  • Option
  • 编解码层
  • 协议层
  • 网络传输层
  • 代码生成工具插件扩展
  1. 观测性 观测性除了传统的 Log、Metric 和 Tracing 之外,内置状态暴露服务也很有必要
  • Log、Metric、Tracing
  • 内置观测性服务
  1. 高性能 性能可以从多个层面去优化,例如选择高性能的编解码协议和网络库

场景:

  • 单机多机
  • 单连接多连接
  • 单/多client
  • 单/多server
  • 不同大小的请求包
  • 不同请求类型: 例如 pingpong、streaming 等

目标:高吞吐、低延迟(更重要)

手段

  • 连接池
  • 多路复用
  • 高性能编码协议
  • 高性能网络库

04 企业实践

  1. 介绍了 Kitex 的整体架构

  2. 介绍了自研网络库 Netpoll 的背景和优势

  • 解决无法感知连接状态问题
    • 引入 epoll 主动监听机制,感知连接状态
  • 解决 goroutine 暴涨的风险
    • 建立 goroutine 池,复用 goroutine
  • 提升性能
    • 引入 Nocopy Buffer,向上层提供 NoCopy 的调用接口,编解码层面零拷贝
  1. 从扩展性和性能优化两个方面分享了相关实践
  • 网络库优化(LinkBuffer、Pool)、编解码优化(CodeGen:Thriftgo、JIT技术)等
  1. 介绍了内部正在尝试落地的新的微服务形态: 合并部署