知识卡片

TPS/HPS/QPS三层流量指标差异及主流限流为何选HPS

普通读书笔记卡

内容

限流要先弄清楚”限的到底是什么流”,三个常被混用的指标其实对应调用链的 三个不同层次。TPS(每秒事务数)衡量的是逻辑上原子的业务操作,比如一次 “支付”,不存在半成功半失败;HPS(每秒请求数,注意是Request而非Click) 指客户端发向服务端的请求数——一笔业务在技术实现上可能要经过多次请求 才能完成(如扫码支付要经过显示二维码、扫码、校验支付结果多个请求), 此时HPS大于TPS;QPS(每秒查询数)指单台服务器要应答的查询次数——分布式 场景下一次外部请求的响应,后台可能要向多个内部服务发起多次查询(如 支付要同时查库存、划款、改积分),此时QPS大于HPS。理想上应该直接基于 TPS限流,因为用户只关心业务操作本身、不关心背后经过了多少次请求查询; 但TPS天然不适合做限流指标——不同业务对系统的压力差异巨大不具可比性, 更关键的是真实业务耗时会受用户交互的不确定性影响(比如扫码前顺手回了 条短信),按业务开始/结束计数并不能准确反映系统压力。因此主流系统更 倾向用相对容易统计、能较好反映当前及未来一段时间压力的HPS作为限流指标 ——但这不是唯一法则,I/O密集型系统(下载/视频/直播)可能改用报文大小 限流,长连接应用(网络游戏)可能改用在线连接数限流。

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第8章"流量治理"8.2.1节 "流量统计指标"(源文件:_epub-src对应OEBPS/Text/chapter101.xhtml) - 结论依据:原文用支付场景逐一定义TPS/HPS/QPS三个指标的层次关系,说明 直接基于TPS限流不可行的原因(不具可比性+用户交互不确定性),并指出 主流系统倾向使用HPS,直接支撑本卡片结论。 - 原始内容:以上这三个指标都是基于调用计数的指标,在整体目标上我们 当然最希望能够基于TPS来限流……直接针对TPS来限流实际上是很难操作的。 目前,主流系统大多倾向使用HPS作为首选的限流指标。