3. 高并发核心概念
做支付网关的容量设计,第一步不是选中间件,而是把指标口径统一。很多团队在评审时争论“系统到底能扛多少”,本质是有人在说QPS、有人在说TPS、有人在说并发连接数,口径不一致,结论自然对不上。本节把七个关键指标的定义、换算关系和工程用法一次讲清。
一、核心指标定义与口径
QPS(Queries Per Second):每秒查询数,强调“请求次数”。在支付网关中,一次下单可能对应多个内部查询(查商户、查路由、查限额),因此要区分“入口QPS”和“内部调用QPS”。
TPS(Transactions Per Second):每秒事务数,强调“完整业务事务”。一笔支付从请求到落库、记账、返回结果算一个TPS。TPS通常小于等于入口QPS,因为一个事务可能包含多次查询。
RT(Response Time):响应时间,通常关注平均值、P95、P99。支付场景必须看P99,因为尾延迟直接决定用户是否重复提交。
并发数(Concurrency):系统同时正在处理的请求数量,不是连接数。用利特尔法则描述:并发数 ≈ QPS × RT。这是容量估算最常用的桥梁公式。
吞吐量(Throughput):单位时间内系统成功处理的请求或数据量,是QPS/TPS的统称,但强调“成功处理”,失败请求不计入有效吞吐。
峰值系数(Peak Factor):峰值流量与平均流量的比值。支付网关日常峰值系数常在3~8之间,大促或发薪日可达10以上。
容量水位(Capacity Water Level):当前实际负载占系统安全容量的百分比。行业通常把70%作为警戒线,85%以上视为高风险。
核心换算关系:
并发数 ≈ QPS × RT(秒)
峰值QPS = 平均QPS × 峰值系数
所需实例数 = 峰值QPS ÷ 单实例安全QPS
容量水位 = 当前QPS ÷ 安全容量QPS × 100%
安全容量QPS = 单实例压测QPS × 实例数 × 冗余折扣(通常0.7)
二、指标之间的换算与容量推导流程
容量推导不是拍脑袋,而是一条可复算的链路。建议按以下步骤执行:
- 从业务侧拿到日均交易笔数和峰值系数,算出峰值TPS。
- 根据网关内部调用放大倍数,把峰值TPS换算为入口峰值QPS。
- 用压测得到单实例在目标RT下的安全QPS。
- 用峰值QPS除以单实例安全QPS,得到理论实例数。
- 叠加冗余折扣和容量水位目标,得到最终部署实例数。
- 上线后持续观测实际水位,反哺压测模型。
下面这张图展示了从业务交易量到最终实例数的推导关系,以及各指标在链路中的位置。
三、支付场景案例:一次大促的容量估算
某支付网关日常日均交易800万笔,峰值系数取6,网关内部平均放大倍数为2.5,单实例在P99 RT≤200ms下压测安全QPS为1200。估算过程如下:
日均TPS = 8,000,000 ÷ 86,400 ≈ 92.6
峰值TPS = 92.6 × 6 ≈ 555.6
入口峰值QPS = 555.6 × 2.5 ≈ 1389
理论实例数 = 1389 ÷ 1200 ≈ 1.16 → 向上取整为2
叠加冗余折扣0.7:2 ÷ 0.7 ≈ 2.86 → 最终部署3台
容量水位 = 1389 ÷ (1200 × 3 × 0.7) × 100% ≈ 55.1%
这个结果说明:日常峰值下水位约55%,处于健康区间;但如果大促峰值系数升到10,入口峰值QPS变为2315,水位将升至约91.9%,必须提前扩容或限流。
实用提示:压测时必须同时记录QPS和RT。只报QPS不报RT的压测结果没有容量意义,因为RT恶化时并发数会迅速堆积,系统可能在QPS未达上限时就因线程池耗尽而雪崩。
四、常见误区与复盘要点
| 误区 | 问题本质 | 正确做法 |
|---|---|---|
| 把并发连接数当并发数 | 连接数包含空闲长连接,远大于实际处理中请求 | 用QPS×RT估算真实并发处理数 |
| 用平均RT做容量规划 | 平均值掩盖尾延迟,P99才是用户体验瓶颈 | 以P99 RT为约束做压测和扩容 |
| 忽略峰值系数直接按日均扩容 | 日均QPS远低于峰值,上线即被打满 | 按峰值QPS叠加冗余折扣计算 |
| 容量水位长期高于85%不处理 | 无缓冲应对突发流量,故障概率陡增 | 水位超70%预警,超85%强制扩容 |
| 把失败请求计入吞吐量 | 虚高吞吐掩盖真实处理能力 | 只统计成功响应,失败单独监控 |
复盘提醒:容量水位不是一次性计算,而是持续运营指标。建议在网关层暴露gateway_qps、gateway_p99_rt、gateway_concurrency、capacity_water_level四个核心指标,按分钟粒度采集,并设置水位超过70%自动告警。只有把指标变成可观测、可告警、可复算的闭环,容量设计才真正落地。
掌握这七个指标的定义与换算,是后续做限流、降级、弹性扩容和全链路压测的基础。口径统一之后,团队讨论容量时才能从“感觉能扛”走向“算得清楚、测得明白、扩得及时”。