一、背景
随着直播行业的兴起,相信大部分小伙伴都看过直播,有的伙伴可能还会给自己喜欢的主播进行打赏,本期介绍的是直播间红包的玩法以及架构是如何设计的。
二、红包玩法
首先让我们来看看最基本的红包的玩法。
三、用户/主播发起抽奖
细心的小伙伴看到这可能会提问了,(扣款、创建红包、延迟队列)如何保证事务呢。 下面列举两种异常情况
- 扣款成功-创建红包失败
- 创建红包成功-发送延迟队列失败
解决策略
情况1: 定时任务轮训,发现扣款成功创建红包失败场景触发退款逻辑
情况2: 延迟队列是用于处理后续逻辑,可以定时任务来做兜底策略。避免延迟任务出问题而无法进行后续流程。
四、参与抽奖、开奖、发奖
其他说明
-
抽奖过程数据存储方式采用redis存储,数据结构采用zset;最后中奖数据使用mysql落盘
总共分为二个队列
1.1. 待开奖队列
1.2. 开奖队列
-
计算中间结果这块是一个随机算法,randcom.nexInt(待开奖队列size) + 用户权重。
-
真是发放奖励采用异步kafka监听Event 事件,通过部署多台Consumer ,做好幂等操作,来提升奖励实际发放速度
五、性能相关
1、此架构目前压测最大峰值
QPS: 1000
参与人数:100W;
开奖数量:18W (注:还可以继续往上进行压测)