商品详情接口单压 12000 QPS 很稳,按首页真实比例混合压测后 QPS 只有 300,超时率 22%。同一个线程池被推荐、库存、评价三个下游共用,队列堆到 2000。乍看像缓存或者权限的锅,追下去往往不是。
wrk -t8 -c500 -d300s -s mix.lua http://api.local/ grep -n 'math.random' mix.lua
追下去是这么回事:单接口压测只有一个下游,线程池和连接池都是独占的。首页一次请求要打四个服务,池子按单接口的量配,混合后立刻不够用。下游之间还会互相阻塞,一个慢查询把整条链路拖住。
「组合链路压测」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
具体做法是,按线上访问比例配混合场景 首页 40% 详情 30% 搜索 20% 其他 10%;把每个下游的连接池和线程池隔离 别共用一个;压测时看每个下游的 P99 而不是只看总 QPS;找出最慢的下游单独再加压 定位瓶颈。
验收就看一点,混合场景 QPS 达到单接口的 60% 以上,超时率降到 1% 以下。
