压测面试追问补充(拼团)

2026-04-02
3
-
- 分钟
|

这个项目我专门做了三项可量化验证,目标是证明风控、降级和消息一致性不是“接了就完”,而是有结果闭环。

1)责任链风控拦截率

我把交易锁单接口当作压测入口,固定构造一批“非法/受限请求”样本,循环发起 200 次请求,统计返回码。
最终结果是 200 次全部被拦截,拦截率 100%

  • 接口是 lock_market_pay_order

  • 样本是固定受限用户 + 合法结构参数(避免参数非法导致误判)

  • 每次更换 outTradeNo,避免幂等缓存影响统计

为什么可信
我不是看日志主观判断,而是按“总请求数/被拦截数”程序化计数,直接算比例。


2)动态降级开关下 QPS / P95

我通过 DCC 接口动态切换 downgradeSwitch=0/1,在同一个接口、同一套请求体、同一压测工具参数下跑 A/B 对比。
最终拿到:

  • 降级关闭14.00 QPSP95=27ms

  • 降级开启1010.23 QPSP95=15ms

我重点强调两点:

  1. 这是“同口径对比”(同接口、同请求体、同并发参数),不是两次不同场景硬比。

  2. 压测过程中有过网络长尾,我只采用“完整跑完且参数一致”的结果作为最终口径。

为什么可信
有明确开关变量(只变一个因子),并且结果同时体现吞吐提升 + 尾延迟改善,不是单指标偶然抖动。


3)本地消息表投递成功率

我直接从本地消息表 notify_task 做状态统计,不靠业务口头描述。
统计口径:成功条数 / 总条数,其中成功状态是 notify_status=1
结果是 4/4,成功率 100%

为什么可信
这是数据库落表后的最终状态统计,属于结果数据,不是中间过程日志。


你如果继续追问“怎么保证可复现?”

我会这样回答:

  1. 环境固定:Docker 起 MySQL/Redis,应用使用同一版本配置启动。

  2. 入口固定:交易锁单接口作为统一压测入口。

  3. 变量隔离:性能测试只切 downgradeSwitch,其余参数不变。

  4. 统计可追溯

    • 风控:请求计数脚本输出拦截比例

    • 性能:AB 原始报告(QPS、P95)

    • 消息:SQL 聚合结果

  5. 异常处理透明:出现库表不一致/依赖超时时先修复再测,不把异常环境下的数据当最终结论。


一句话高密度版本(面试收尾)

我对这个项目做了结果闭环验证:责任链风控拦截率 100%(200/200)、动态降级开关把接口从 14.00 QPS / P95 27ms 提升到 1010.23 QPS / P95 15ms、本地消息表最终投递成功率 100%(4/4);并且三项都是按固定口径可复现统计出来的。

评论交流

文章目录