Yujun's Portfolio
用户行为返利场景
April 8, 2024 (1y ago)
用户行为返利场景
在实际业务场景中,我们通常会遇到如下需求:
核心需求:用户在完成某些指定的行为动作后,系统能够自动地给予用户相应的奖励。
比如,我们可以想像一个用例图,两种主要的用户行为:
- 打卡/签到
- 期望:用户完成签到后,应该获得某种奖励。
- 用户每天可以执行一次签到操作。
- 特点:
- 频次限制:通常是每天一次。
- 唯一性:对于某个用户,某一天的签到行为是唯一的。可以用“用户ID + 日期”来唯一标识一次签到。
- 外部项目商品支付完成
- 期望:用户完成支付后,大营销系统应该给予用户相应的奖励。
- 为后续系统集成预留的一个场景。当用户在另一个关联的项目中完成了支付行为,该支付系统会发送一个“支付完成”的消息给大营销系统。(涉及到了微服务之间的调用)
- 特点:
- 外部触发:这个行为不是用户直接在大营销系统中操作的,而是由外部系统通知的。
- 唯一性:每次支付行为也应该有一个唯一的标识(如支付订单号)。
基于上述的用例图(想像),也就是两种用户行为,我们的系统需要实现以下核心功能。
思考要实现的功能,后续的支撑业务的库表设计才能够顺利进行。
核心功能点
当行为被成功记录后,系统需要根据预设的规则,向用户发放相应的奖励。这就是结算的过程。
这时候我们就要考虑到奖励类型的多样性,即一定要设计成可扩展的 。
- SKU (抽奖资格/次数):奖励可以是前面定义的SKU。获取这个SKU后,用户的活动账户中会增加相应的抽奖次数(总次数、日次数、月次数)。这是本项目主要实现的奖励类型。
- 积分 (Points):奖励也可以是用户积分。
- 其他预留:设计上要考虑到未来可能奖励其他类型的虚拟物品或权益。
另外,为了不阻塞记录用户行为的主流程,奖励的发放过程设计为异步处理,通过MQ进行解耦。
这种思想在系统设计的时候也一定要学会运用,本项目有多处运用了这样的思想。
总结
总结一下,对于这一个小场景要完成的核心功能有,
首先要建立一个 用户行为 - - > 奖励发放 的通用框架。那么框架内部有哪些流程?
梳理一下,用户完成特定操作(比如签到)之后,我们的系统要能够:
- 自动记录这次行为的流水。
- 根据配置,确定应该给什么奖励。
- 可靠地、异步地将奖励发放到用户账户(比如发放SKU,即增加用户的抽奖次数)。
最后,要注意整个功能从能用到可靠的转变。整个设计要考虑到可靠性(幂等、消息不丢失)、可配置性和未来的可扩展性。
用户行为返利功能,可以极大地丰富营销活动的玩法,激励用户更积极地参与到平台定义的各种行为中,从而提升用户活跃度和粘性。可以即插即用的插入进其他系统中。