高并发场景下,如何保证优惠券的匀速发放

发布于 2022-09-11 23:12:35 字数 292 浏览 41 评论 0

前提

  1. 高并发场景,参与用户在千万级,优惠券总数量假设为一百万
  2. 每天固定时间段开放抢优惠券活动(假设 20:00 ~ 22:00),持续一周(所以每天 2 小时共发放约 13 万张,每小时 6.5 万张)

要求

在每天的 2 个小时时间内,要求优惠券尽量平滑地发放,也就是说,不能前半小时就把 13 万张优惠券给发完了,要让后来的用户仍然能够有机会得到优惠券,并且活动时间内不管什么时候来,获得优惠券的几率尽量一致。

请问要如何设计这样的算法?望大神不吝赐教!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小帐篷 2022-09-18 23:12:35

用活动进行时间/总时长*总优惠券数,得到当前时间应该送出的优惠券数,与实际上已送出的优惠券数比较,若实际上已送出的少了,则中奖,否则不中奖。
这样可以不?

单身情人 2022-09-18 23:12:35

我觉得你可以把优惠券放到redis里,一天发放多少,计算好数量和时间间隔,用户请求时候按照时间戳随机发给其中一个人或几个人。得不到优惠券的要给个友好提示。

其实这个感觉还是不好控制,因为网站有些时段访问人多,有些时段访问人少,本身也不均匀,均匀发放势必导致发不完和领不到的情况。

不如设置时段发放数量,让大家去抢。反正每个时间段都有优惠券,这样还可以让网站整天都保持较高访问。

个人愚见

嘿哥们儿 2022-09-18 23:12:35

可以参考令牌桶,虽然它是为API限流而设计的,但是思路可以借鉴。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文