老师什么时候分析下红包的设计方案

来源:5-17 【阿里真题思考】 生成、发放大量红包并控制资金流速

qyholy

2021-06-15

老师什么时候分析下红包的设计方案

写回答

2回答

求老仙

2021-07-14

这里说下思路。

  1. 写一个红包生成器(输入是红包数量, 总金额), 然后用随机数去产生。最终的红包数量不需要是输入的值,但是遵循大数概率,最后的值会接近输入的值。前提是你的生成区间是对称的,比如你生成的每个金额是random( 输入是红包数量/总金额 - 1, 输入是红包数量/总金额 + 1)。 

  2. 生成好的红包存入一个本地文件就可以。然后用一个线程读取就好了。(因为瓶颈在IO,多读意义不大)。最好用NIO的FileChannel,这样效率高。

  3. 读入红包用单线程+缓冲区,读入后恢复成红包对象,然后写入一个带反向压力的阻塞队列。比如用TransferQueue。这样如果发不过来了,就阻塞生产者读取缓存。

  4. 步骤3也可以考虑消息队列(自己想办法实现背压),比如监控队列中未处理数据的数量

  5. 红包考虑用多个Work发出,从编程模型上考虑Worker数量可以动态调整就好。Worker上面实现一个调度程序,管理发送速录,控制到每秒,红包数量/发送时间区间内。Work如果阻塞,生产者读取文件也会阻塞。

  6. 用户状态的缓存可以考虑用时间窗口算法。为什么?因为红包特别多,缓存不可能设置到redis这些工具,太占用内存。比如总共有5000W个红包, 小于Low的红包都已经确定被领取,因此可以清理这部分数据缓存。大于low+10W的红包肯定没有被领取,因此这部分不需要缓存。

0
1
ciphermagic
老师啥时候出个视频详细讲讲,或者是代码
2022-04-16
共1条回复

慕沐0177137

2021-06-19

同问啊

0
0

笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

深度剖析大厂面试高频真题,让你秒变offer收割机

1783 学习 · 314 问题

查看课程