owenzhang的博客

如何设计抽奖活动

字数统计: 1.7k阅读时长: 5 min
2018/11/04
loading

如何设计抽奖活动

抽奖的意义

抽奖是一个很好的运营手段,通过抽奖,能够短时间内吸引大量用户,让用户集中使用产品。
是运营活动中最常用的方法。

抽奖中的注意事项

设计一个完美的抽奖活动,需要思考很多细节,最本质只有一个词「可控」。

所有的细节都是围绕着可控来实行的。

概率可控

这是最基本的,抽奖要能控制概率。大奖概率低,小奖甚至不中奖概率高。如果人人可中,那是福利。如果人人都不中,就成了耍猴。

在设计抽奖奖品的时候,要有抽中概率字段。一般直观想到的是按百分比,例如有两个奖品。配置表如下:

A 25%
B 25%

但是这种配置方法是不对的。为什么呢?扩展性不强。

因为把概率总和定位100了,每次增减或修改奖品概率,都要保证百分比加起来是100%,增加了运算逻辑。

最好的方法是用权重,如果一个奖品不想让有人抽中,直接调为0,其他的奖品项也不用更改。

数量可控

每个奖品只有概率约束还不完整,还要加上每个奖品的数量,控制奖品的产出。即使有概率控制,百万分之一,一百万人抽奖,也不一定只有一个人中,理论上存在一百万人都中的情况。所以除了有权重,还要有奖品的数量控制。

怎么确定奖品发光了呢?
一种是每发一个奖品,给奖品数减少,另外一种是加个抽了多少个的字段,每抽到一个,给「已抽数量」加一。
好处是后面增加奖品库存时不存在写冲突,而且经过多次加减抽奖数量,也知道实际发送了多少。

如果奖品抽光了,可以有多种策略:
1、该奖品的权重自动降为0,从其他奖开始抽。
2、当有奖品数为0时被抽到,找剩余有奖品权重最大的那个给他。

时间可控

抽奖有时效,有活动时间控制。要能后端修改,就能立即终止或开启抽奖活动。当系统有故障时,这是一个很好的开关。

发奖也要有时间控制,防止由于其他人把程序启动,活动都过了,还能继续发奖。

预算可控

每个活动都有预算,发出去的奖品都是有价值的,发现发送的奖品累计价值超过了预算,要及时告警,停止发送。而且接近预算也要告警,人工确定到底是奖品快抽光了,还是程序有问题发多了。

满足抽奖资格组合模式

活动会对积极抽奖,或积极参加的用户给予一些优惠。例如游戏中的十连抽比重高级卡牌。当满足九次抽奖时,第十次的奖池就是一个单独奖池了。要支持多奖池配置,逻辑能根据用户的状态选择不同的奖池。

防止多抽

很多程序都是分布式的,会导致并发,产生抽奖次数变多。例如一个人只能有一次抽奖机会。但是如果并发产生了两个请求,两个进程分别处理,会都读到有一次抽奖机会,然后都能抽成功,就造成了多了一次抽奖机会。如果用程序产生更多的并发,抽的更多。

这里要加锁处理。对于一个用户的抽奖次数加锁。大多数都用乐观锁,
一种是加抽奖状态:未抽奖、抽奖中;
一个用户要想抽奖,必须先把用户的状态从未抽奖变为抽奖中,此时其他并发的进程发现已经是抽奖中了,就返回失败。

还有一种是控制抽奖数量,当抽完奖品后,并不马上返回前端,而是去更新抽奖数量,更新时要判断是否有超过最大数量,如果超过,直接算作失败,回滚抽到的奖品,返回前端。

发放奖励

有些活动是抽完马上发奖,有的是抽完隔一段时间发奖。本质也是一样的。只是间隔的时间长短。发奖和抽奖是两种事情,也要慎重对待。

先标记,再发送

判断一个奖品是否已经发送,都会有一条记录表,有个字段表示是否已发送。是先发送奖品,再更新发送字段,还是先标记字段,再发奖呢?
先标记,再发送。

因为在标记和发送中间,会有程序突然crash的情况。先发再标,会导致多发;先标再发,会少发。

对于活动举办方,肯定是少发最好,少发了可以补,多发想要回来就难了。

大奖发送要慎重

对于一些金额比较大的奖品,发送要慎重,要经过审核。因为本身奖品数就不多,审核包括是否有多发,是否抽奖人符合资格,是否程序有问题……

防止多发

在发奖环节,也有类似与多抽的并发问题。也要有锁,保证一条发奖记录,不会被发送多次。通常也是加发送状态。未发送、发送中、已发送。先用发送中抢到发送资格,再慢慢发送这条,发完标记为已发送。如果发现有发送中,证明没有处理完,要人工检查下为什么。

多发有在一个机器或多台机器启动多个进程,导致多发。

还有同样一个请求,两次发送,导致多发。这种要用唯一id保证幂等性,及时相同的请求出现多次,也不会造成多发情况。唯一id要用能唯一标识发送记录的字段,而不应该用时间戳,随机值等每次都变的变量。

发送通知也要防止多发

防止一个人发送了多条通知消息;

防止把通知消息发送给未中的人。

这些都要控制好发送逻辑,要经过细心review才能发现。

对账机制

对于发奖,要有对账机制,实际用户抽到的奖励,和发送的要有数量价值比对。做好风控和审计。

总结

抽奖和发奖,想做好并不容易。要多思考很多细节才能做好。

本质上就是让程序可控,一切尽在控制。

程序的并发、幂等性,产品逻辑的扩展性,奖品数量调整,概率调整,都需要经过推敲。

CATALOG
  1. 1. 抽奖的意义
  2. 2. 抽奖中的注意事项
    1. 2.1. 概率可控
    2. 2.2. 数量可控
    3. 2.3. 时间可控
    4. 2.4. 预算可控
    5. 2.5. 满足抽奖资格组合模式
    6. 2.6. 防止多抽
  3. 3. 发放奖励
    1. 3.1. 先标记,再发送
    2. 3.2. 大奖发送要慎重
    3. 3.3. 防止多发
    4. 3.4. 发送通知也要防止多发
    5. 3.5. 对账机制
  4. 4. 总结