有一个每年都举行的投票活动,原系统是很多年前开拓,系统的支持的并发数不高,在投票期间常常涌现崩掉的情形。
投票规则为按IP限定,每24小时投1票。
1.1、原系统的技能架构
运行在4核8G做事器上,用了PHP+MySQL+Redis开拓,运行在4核8G的做事器上。
投票页面的功能很大略:
- 1、是投票页面的访问,涉及当前选项的投票结果显示;
- 2、用户点击按钮进行投票,涉及数据入库保存和投票结果刷新问题。
旧投票系统虽然都用了缓存(有缓存韶光),但是在持续流量下,缓存被击穿,访问页面或点击投票,涌现数据库被读写的情形,系统崩掉。
Jmeter压测性能在100并发旁边 。
1.2、新系统的技能架构
利用Go(gin、sqlx、go-redis)+Redis缓存+Redis行列步队+MySQL
实现逻辑图如下:
2、压测结果
测试结果是在4核8G的Centos7虚拟机上压测。
2.1、设置的Jmeter线程组
线程数1000,Ramp-up为1秒,循环次数1000,共产生100万条投票压测数据。
2.2、Jmeter聚合报告结果,支持11240/秒吞吐量
2.3、Jmeter TPS结果,支持15000/秒最大并发
2.4、总CPU和总内存变革情形
CPU从0%上升到31.2%最大值,随后在这个范围内高下浮动。
内存也在不断上升,压入100万数据后,内存从1.7GB上升到2.3GB,随后低落。
2.5、Redis和go进程占用资源
go运用./main:CPU从0%上升到280%;内存从0.3%上升到0.8%,变革不大;
redis-server:CPU从0%上升到81.2%;内存从10.3%上升到12.9%;