老师什么时候分析下红包的设计方案
来源:5-17 【阿里真题思考】 生成、发放大量红包并控制资金流速

qyholy
2021-06-15
老师什么时候分析下红包的设计方案
写回答
2回答
-
求老仙
2021-07-14
这里说下思路。
写一个红包生成器(输入是红包数量, 总金额), 然后用随机数去产生。最终的红包数量不需要是输入的值,但是遵循大数概率,最后的值会接近输入的值。前提是你的生成区间是对称的,比如你生成的每个金额是random( 输入是红包数量/总金额 - 1, 输入是红包数量/总金额 + 1)。
生成好的红包存入一个本地文件就可以。然后用一个线程读取就好了。(因为瓶颈在IO,多读意义不大)。最好用NIO的FileChannel,这样效率高。
读入红包用单线程+缓冲区,读入后恢复成红包对象,然后写入一个带反向压力的阻塞队列。比如用TransferQueue。这样如果发不过来了,就阻塞生产者读取缓存。
步骤3也可以考虑消息队列(自己想办法实现背压),比如监控队列中未处理数据的数量
红包考虑用多个Work发出,从编程模型上考虑Worker数量可以动态调整就好。Worker上面实现一个调度程序,管理发送速录,控制到每秒,红包数量/发送时间区间内。Work如果阻塞,生产者读取文件也会阻塞。
用户状态的缓存可以考虑用时间窗口算法。为什么?因为红包特别多,缓存不可能设置到redis这些工具,太占用内存。比如总共有5000W个红包, 小于Low的红包都已经确定被领取,因此可以清理这部分数据缓存。大于low+10W的红包肯定没有被领取,因此这部分不需要缓存。
012022-04-16 -
慕沐0177137
2021-06-19
同问啊
00
相似问题