03小节:压测优惠券秒杀券性能
作者:程序员马丁
热门项目实战社群,收获国内众多知名公司面试青睐,近千名同学面试成功!助力你在校招或社招上拿个offer。
压测牛券优惠券秒杀券性能,元数据信息:
- 什么是牛券oneCoupon:https://t.zsxq.com/pAWgS
- 代码仓库:https://gitcode.net/nageoffer/onecoupon —— 申请项目权限参考上述牛券项目链接
- 章节难度:★★★☆☆ - 较难
- 视频地址:文档先行视频次之
©版权所有 - 拿个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 压力会小点。