上个项目做了一个红包雨功能,这里回顾总结一下,红包雨高并发场景如下:
提供2万用户30秒内5次请求的并发服务支持
红包雨的实例配置:
- AMD 计算型 c7a
- 16 vCPU
- 32 GiB
- 云盘类型(ESSD AutoPL)所选云盘的最大IOPS为 40000,最大吞吐量为 705 MB/s
- ecs.c7a.4xlarge 100Mbps (峰值)
压测的实例配置:
- 8 vCPU 16 GiB (I/O优化)
- ecs.e-c1m2.xlarge 100Mbps (峰值)
- 云盘类型(ESSD AutoPL)所选云盘的最大IOPS为 40000,最大吞吐量为 705 MB/s
分红包
流程:拆分红包-》写入缓存–》写入文件
接口示例:http://139.224.70.38:8097/api/v3/sendRedPackage?totalMoney=1000000&redPackageNumber=500000
抢红包
流程:从缓存中取一个红包–》存入另一个缓存–》线程池异步发送消息队列–》消息队列消费保持缓存日志消息–》定时任务获取缓存–》分批次插入数据库中。
如果运行中出现以下错误说明RocketMQ的收发TPS有上限,需要调整机器的配置,升配:
RocketMQ Message hasn’t been sent. Caused by CODE: 215 DESC: Proxy rocketmq-proxy-rmq-cn-zpr3fdq3u0d messages flow control
由于10万次请求都是同一个应用服务收发,使用支持消息读写TPS总和20万次,在30秒内处理完,则需要6,666.666666666667
由于代码是异步发送消息
可以降低一些要求
性能瓶颈在redis和rocketmq,由于mysql是定时任务分批次批量插入,所以对其要求不高。