有一个每年都举行的投票活动,原系统是很多年前开拓,系统的支持的并发数不高,在投票期间常常涌现崩掉的情形。

投票规则为按IP限定,每24小时投1票。

1.1、原系统的技能架构

php投票ip限制应用go和新闻队列优化投票功效 JavaScript

运行在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%;