卡飞资源网

专业编程技术资源共享平台

使用go和消息队列优化投票功能

1、优化方案与主要实现代码

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

投票规则为按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%;

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言