“10 万并发”不是性能需求:大促压测必须算清六个参数

简介: 直播电商大促性能需求不能只提“10万并发、P95<500ms”。需明确流量模型(如30秒尖峰)、业务混合比例、支付真实性及降级策略。并发是结果而非输入,压测须还原真实路径、验证交易正确性,并交付可执行的容量账与退让方案。

直播电商项目提出大促性能需求:“帮我测到 10 万并发,接口 P95 不超过 500ms。”

这句话无法直接写压测脚本。10 万人是 30 秒内同时点“抢购”,还是 2 小时在线浏览?他们是否集中购买一个爆品?支付链路是否真实?超过容量后允许排队、限流,还是必须全部成功?不把这些问题说清,测出来的 10 万只是一个仪表盘数字。

image.png

并发数不是流量入口,而是系统里的在途结果

同样每秒进入 1000 个请求,平均响应 100ms 时大约有 100 个在途;响应恶化到 3 秒,在途会膨胀到约 3000。若压测工具采用“一个用户等响应回来再发下一个”的关闭模型,系统越慢,工具发得反而越少,会掩盖最危险的排队阶段。

直播开售更适合按外部到达率还原:预热阶段逐步增长,主播口令后 30 秒形成尖峰,随后回落。浏览、领券、下单、查询和支付按真实比例混合,而不是只压一个最轻的 GET 接口。

image.png

把“10 万人”编译成负载模型

假设 10 万用户在 30 秒内涌入,70% 浏览商品、18% 领取资格、8% 创建订单、4% 查询结果。热点爆品承接 65% 下单,其他商品分散。可以先写成开放到达模型:

export const options = {
   
  scenarios: {
   
    browse: {
   
      executor: 'ramping-arrival-rate',
      startRate: 300,
      timeUnit: '1s',
      preAllocatedVUs: 1200,
      stages: [
        {
    target: 2400, duration: '20s' },
        {
    target: 2400, duration: '30s' },
        {
    target: 600, duration: '40s' }
      ]
    }
  },
  thresholds: {
   
    http_req_failed: ['rate<0.01'],
    http_req_duration: ['p(95)<500', 'p(99)<1200']
  }
};

代码里的速率只是示例,真实数值要从活动预测与历史流量推导。还要为下单、支付使用不同函数和权重,按业务键制造热点;否则一万商品均匀访问会把缓存和数据库锁竞争“洗平”。

压测分五段,才能找到容量拐点

第一段做单请求基线,排除脚本和环境问题;第二段逐步加压,观察延迟何时偏离线性;第三段在目标容量稳定运行,检查内存和队列是否持续积累;第四段超过目标寻找拐点与降级行为;第五段停止高压,验证系统是否在规定时间恢复。

不要只记录 CPU。至少联动客户端等待、网关排队、线程池、连接池、缓存命中、数据库锁、下游耗时、消息积压和业务成功数。某个服务 CPU 只有 50%,连接池已经耗尽,系统一样会崩。

性能报告必须能对业务账

请求成功不代表抢购正确。下单数不能超过可售库存;同一用户不能重复占资格;支付成功必须有订单;被限流用户要收到明确结果;超时后查询能找到最终状态。

def assert_sale_reconciliation(report, repository, stock):
    paid = repository.count_orders(status="PAID")
    reserved = repository.count_orders(status="RESERVED")
    unique_buyers = repository.count_unique_buyers()

    assert paid + reserved <= stock
    assert report["accepted_orders"] == paid + reserved
    assert unique_buyers == paid + reserved
    assert report["unknown_outcomes"] == 0

如果业务允许一人多单,最后一条需按实际规则调整。关键是让性能测试同时验证速度与正确性,不把数据库里悄悄错掉的订单当成吞吐成绩。

image.png

最终要交付的是容量账和退让方案

报告应给出安全容量,而不是极限截图:在既定业务混合下,满足 SLO 且资源留有余量的到达率;扩容需要提前多久;排队到什么长度触发限流;哪些用户或业务优先;故障后多久恢复;目标高峰超过安全容量时需要削减什么。

高级性能课程适合团队补齐建模、诊断与容量规划能力;对于大促、核心交易或复杂微服务,也可以采用企业内训或性能专项外包共同完成业务建模、脚本、观测和演练。无论采用哪种方式,验收都不应停留在“工具打出了多少并发”。

性能测试真正回答的不是系统能不能扛住 10 万,而是用户以什么方式到来时,系统在哪个点开始失控、怎样有序退让、恢复后业务账是否仍然正确。

相关文章
|
6月前
|
JSON 缓存 开发工具
拒绝/usage用量焦虑,用 Claude Code 自定义状态栏
告别手动查用量!本文教你用Claude Code自定义状态栏,实时显示模型、Git信息、上下文使用率(66%)、缓存命中率、Token消耗及费用(~$23.21)、5小时/7天用量进度等关键指标,支持颜色预警。提供两种配置方式:一键粘贴脚本,或更推荐——直接对话Claude Code,让它自动完成全部配置!
|
14天前
|
人工智能 自然语言处理 数据挖掘
阿里云千问办公企业版购买流程:填写组织名称、管理员手机号、企业邮箱获取组织ID,并下单全流程
千问办公(QwenWork)是阿里推出的AI智能办公平台,支持自然语言驱动的数据分析、PPT生成、视频剪辑、网页搭建等,直接输出可用成果。企业版含席位与积分包(需绑定有效席位),提供完整购买与管理流程。(239字)
122 2
|
7月前
|
算法 测试技术 Python
Blender游乐场:用参数运行模式解锁3D创作新姿势
本文带你玩转Blender脚本工作区,以“参数运行模式”为核心,用Python代码直观控制3D对象:一键清空场景、参数化创建/变形物体、批量生成阵列与建筑、实现动态动画。零基础也能快速上手,提升建模效率!
609 5
|
JSON 监控 API
速卖通商品列表API秘籍!轻松获取商品列表数据
速卖通商品列表API支持关键词搜索、分类筛选、多语言返回及分页排序功能,适用于比价系统、库存监控、市场研究等场景。开发者可快速获取商品数据,构建自动化应用。
|
关系型数据库 MySQL Docker
PolarDB-X安装部署初体验
本文档介绍了体验阿里云PolarDB-X分布式数据库的安装和使用过程。首先提到PolarDB-X在稳定性及性能上的优势,然后详细描述了在CentOS 7环境下遇到的Python版本不兼容和Docker容器iptables配置问题的解决方法。通过创建Python 3.8的虚拟环境解决PyYAML依赖问题,接着在解决Docker容器内部网络问题后,成功安装并启动PolarDB-X。文中强调PolarDB-X完全兼容MySQL,适合熟悉MySQL的用户,并分享了安装历史记录以供参考。
1074 7
|
Python
【Python-Numpy】numpy.stack()的解析与使用
本文介绍了numpy的np.stack()函数,它用于在指定轴上增加数组的维度,通过不同轴参数可以改变张量的形状,例如axis=0会将形状变为(N, A, B),而axis=-1可以实现数组的转置。
1030 0
|
JavaScript 搜索推荐
js 混合排序(同时存在数字、字母、汉字等)
js 混合排序(同时存在数字、字母、汉字等)
1389 0
|
NoSQL 编译器 Linux
linux交叉编译环境的配置
linux交叉编译环境的配置
822 0
|
JSON 分布式计算 关系型数据库
Spark中使用DataFrame进行数据转换和操作
Spark中使用DataFrame进行数据转换和操作
|
druid Java 数据库
SpringBoot整合Druid
SpringBoot整合Druid
452 0