概述

红包系统本质上是高并发资金秒杀系统。

架构一览

红包系统架构

系统演进之路

  1. 满足业务需求,快速迭代上线
  2. 出现超卖现象,启用事务锁
  3. 流量增加,收红包出现性能瓶颈,改为乐观锁,性能提升3倍
  4. 流量继续增加,乐观锁也扛不住了,上缓存
  5. 分布式MQ解决异步写
  6. 数据分片来解决DB横向拓展

业务场景需求分析

红包发送者从红包商那里购买一定数量和一定金额的红包(每个红包的规格一样活着不一样),之后将红包商品赠送出去(对象是红包接受人群),收红包本质上是对红包商品的秒杀活动。存在B2B和B2C两个过程。

红包是小额金融产品:充值卡、购物卡

发红包:从中间商购买和发布
发红包:秒杀、兑换

红包资金账户满足用于红包业务资金账户的交易和记账

业务模型分析和设计

四色建模法

追踪事件和痕迹-发红包
追踪事件和痕迹-收红包
追踪事件和痕迹-红包过期
骨干模型构建-建立联系
寻找和添加参与者-人&事&物
添加角色

红包算法概述

  • 简单随机法
  • 2次随机算法:先随机再洗牌、先洗牌再随机
  • 2倍均值法:微信红包算法

红包序列是按照红包金额和数量通过算法进行拆分得到的子红包集合,红包序列可以在发红包时生成,也可以在抢红包时计算。

发红包时计算:红包可以预置,可以以商品交易系统的思路来进行构建,红包数量就是库存,抢红包的时候只需要从库存中扣除一个即可。缺点是会产生大量数据,造成大量DB读写操作。
抢红包时计算:发红包时只需要确定红包的几个基本属性,不需要生成实际的红包序列,在抢红包的时候动态构建和计算库存。