高并发场景下,如何保证优惠券的匀速发放
前提
- 高并发场景,参与用户在千万级,优惠券总数量假设为一百万
- 每天固定时间段开放抢优惠券活动(假设 20:00 ~ 22:00),持续一周(所以每天 2 小时共发放约 13 万张,每小时 6.5 万张)
要求
在每天的 2 个小时时间内,要求优惠券尽量平滑地发放,也就是说,不能前半小时就把 13 万张优惠券给发完了,要让后来的用户仍然能够有机会得到优惠券,并且活动时间内不管什么时候来,获得优惠券的几率尽量一致。
请问要如何设计这样的算法?望大神不吝赐教!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
用活动进行时间/总时长*总优惠券数,得到当前时间应该送出的优惠券数,与实际上已送出的优惠券数比较,若实际上已送出的少了,则中奖,否则不中奖。
这样可以不?
我觉得你可以把优惠券放到redis里,一天发放多少,计算好数量和时间间隔,用户请求时候按照时间戳随机发给其中一个人或几个人。得不到优惠券的要给个友好提示。
其实这个感觉还是不好控制,因为网站有些时段访问人多,有些时段访问人少,本身也不均匀,均匀发放势必导致发不完和领不到的情况。
不如设置时段发放数量,让大家去抢。反正每个时间段都有优惠券,这样还可以让网站整天都保持较高访问。
个人愚见
可以参考令牌桶,虽然它是为API限流而设计的,但是思路可以借鉴。