高性能 RPC 的三个反模式:无界队列、隐式重试与只看均值
先把问题落到具体对象
RPC 框架的吞吐很容易被漂亮的平均值掩盖。无界队列把过载变成延迟,隐式重试放大流量,只看成功请求则会漏掉超时与拒绝成本。
数据怎样才可比
基准测试固定请求大小、连接数、预热、版本和硬件,一次只改一个变量。同时记录排队时间、端到端尾延迟、拒绝率与资源占用,不能把客户端等待从服务耗时里删掉。
基准与故障验证顺序
- 固定请求大小、连接数、预热方式、版本和硬件,保存可重放的压测命令。
- 先关闭自动重试,记录排队、端到端延迟、拒绝与资源占用的原始分布。
- 分别打开队列上限和重试策略,一次只改一项,观察过载时请求被等待还是拒绝。
- 将失败请求也计入结果;只报告均值或删除客户端等待的数据不进入结论。
交付前检查
保留原始命令、配置、样本和失败请求分布;关闭重试后再跑一组对照,分清框架性能与重试掩盖的失败。
适用边界
这套对比只能说明所记录负载和环境下的行为。请求分布、网络或重试策略变化后,需要重新建立基线,不能沿用原结论。