直播间红包架构设计

780 阅读1分钟

一、背景

随着直播行业的兴起,相信大部分小伙伴都看过直播,有的伙伴可能还会给自己喜欢的主播进行打赏,本期介绍的是直播间红包的玩法以及架构是如何设计的。

二、红包玩法

首先让我们来看看最基本的红包的玩法。

红包玩法.png

三、用户/主播发起抽奖

创建红包流程 (1).png

细心的小伙伴看到这可能会提问了,(扣款、创建红包、延迟队列)如何保证事务呢。 下面列举两种异常情况

  1. 扣款成功-创建红包失败
  2. 创建红包成功-发送延迟队列失败

解决策略

情况1: 定时任务轮训,发现扣款成功创建红包失败场景触发退款逻辑

情况2: 延迟队列是用于处理后续逻辑,可以定时任务来做兜底策略。避免延迟任务出问题而无法进行后续流程。

四、参与抽奖、开奖、发奖

用户参与抽奖、开奖流程.png

其他说明

  1. 抽奖过程数据存储方式采用redis存储,数据结构采用zset;最后中奖数据使用mysql落盘

    总共分为二个队列

    1.1. 待开奖队列

    1.2. 开奖队列

  2. 计算中间结果这块是一个随机算法,randcom.nexInt(待开奖队列size) + 用户权重。

  3. 真是发放奖励采用异步kafka监听Event 事件,通过部署多台Consumer ,做好幂等操作,来提升奖励实际发放速度

五、性能相关

1、此架构目前压测最大峰值

QPS: 1000
参与人数:100W;
开奖数量:18W (注:还可以继续往上进行压测)