保底奖被普通抽奖抽走了,保底就兜不住了
问题
我在做一个线上抽奖活动,规则是每个人能抽 3 次,前面两次要是都没中,第 3 次必须中(这就是常说的保底)。为了这个保底,我单独准备了一个保底奖,平时不发给普通用户,只有轮到第 3 次、而且前两次全空的时候才发它。
我当时想得挺简单:奖都放一个池子里,抽奖时随机挑一个就行,保底奖也丢进去,反正它库存我盯着别空就好。
现象
写完后自己推了一遍流程,发现不对劲。
保底奖虽然”专门给保底用”,但它毕竟也在那个随机池里。前面两次普通抽奖,每次都有可能随机抽到它。假设保底奖只有一份,运气差一点的用户,第 1 次就把保底奖给随机抽走了。
等到第 3 次、前两次都空、该触发保底发奖的时候,池子里早就没保底奖了。这时候要么发不出来(保底承诺落空),要么就得临时从别的地方抠一个奖补上,整个逻辑就乱了。
说白了:保底奖本来是”留到最后兜底”的,结果被前面的正常抽奖提前消耗掉了,兜底就兜不住。
怎么解决
把保底奖从普通随机池里拿出去。
- 普通抽奖只在”非保底奖池”里随机挑,保底奖不参与这部分的随机;
- 只有当满足保底触发条件(这是最后一次、且前面没中过)时,才单独去发保底奖;
- 保底奖的库存我额外盯着,一旦它库存见底就直接报错告警,绝不静默地返回”谢谢参与”把用户糊弄过去——因为保底是我明确保证的,空了就是真出问题了。
这样保底奖在正常流程里永远不被消耗,只有该兜底的那一刻才出场。
结论
兜底用的资源,不能混进正常随机流程里一起被消耗。一旦混进去,它就不是”兜底”而是”也被随机抽”了,该用的时候早没了。保底、备用、兜底这类机制,得在流程上就把它隔在普通路径之外,而不是指望靠库存数字去压住。