Skip to main content

03小节:压测优惠券秒杀券性能

作者:程序员马丁

在线博客:https://nageoffer.com

note

热门项目实战社群,收获国内众多知名公司面试青睐,近千名同学面试成功!助力你在校招或社招上拿个offer。

压测牛券优惠券秒杀券性能,元数据信息:

©版权所有 - 拿个offer-开源&项目实战星球专属学习项目,依据《中华人民共和国著作权法实施条例》《知识星球产权保护》,严禁未经本项目原作者明确书面授权擅自分享至 GitHub、Gitee 等任何开放平台。违者将面临法律追究。


课程目录如下所示:

  • 压测注意事项
  • 压测环境
  • 压测结果
  • 代码临时变更
  • Jmeter 压测脚本

压测注意事项

什么是 QPS?什么是 TPS?项目并发量指的是 QPS 还是 TPS?详情查看压测第一章节。

压测环境

软件架构中,系统设计是一部分,基础设施是一部分。系统设计一般就是看我们的代码和架构是如何运作的,比如代码中运行了先查询缓存 Redis 再查询数据库 MySQL,防止缓存击穿和穿透等设计。基础设施指的是部署的规格,比如 Redis 什么配置、MySQL 什么配置、部署了几台牛券 oneCoupon 服务以及每台部署机器的配置是多少。

在和面试官说时,一定要先明确自己的部署配置,比如:

  • 在自己本地电脑上进行的测试,电脑配置 MacBook M2 Max 12C64G。
  • 启动了一个牛券 EngineApplication 结算服务。
  • 通过 Jmeter 配置了 100 个线程循环 400 次压测,最终吞吐量 xxxx

RocketMQ 我用自己电脑跑的 Docker,理论上如果代码和 RocketMQ 跑在同一台服务器或者同一个网段下应该会更快。

压测结果

秒杀有两个接口,一个是依赖数据库做实时扣减,这种稳定性较高,但是性能跟不上;一个是基于缓存和消息队列,极端情况下可能会有数据问题,但是从优惠券角度上可以容忍。所以,我们下面压测结果以后者展开。

Jmeter 我配置了 100 个线程,循环次数设置了 400,意味着有 100 个线程会调用 400 次牛券接口,最终会模拟产生 40000 次用户请求。

为什么设置 100 个线程?因为每台电脑的 CPU 性能不同,这个数据需要大家不断压测找到最优结果。其实再往上提升线程数还能提高点吞吐量,不过并不大,最终我就以 100 为结论了。

因为我们这个接口大部分是网络 IO,相比于前两次压测,大部分线程都在等待 IO,CPU 压力会小点。

解锁付费内容,👉 戳