积分作为一种营销手段,被广泛运用于线上/线下的产品中,以此来增加用户对于产品的粘性。比如天猫积分可以用来兑换商品,京豆可以在下单折扣等,如下图所示。

如今,随着获客成本的增加,如何减少用户的流失,变成了各个产品的核心命题之一。也正因如此,很多业务引入了各式各样的积分系统。为了更好的面对业务带来的变化,对整个积分兑换流程做一个合理的抽象是正确且有必要的。只是,整个积分的兑换是一个非常庞大且复杂的流程,因此,本着一切从简的理念,我们这期先聊一聊如何设计一个积分领取系统

从具体到抽象

无论是天猫积分/京豆,都会有一个规则说明,笼统的来说,无外乎两个主要的功能点:如何获取积分以及如何消费积分。

获取京东的方式通常有:

  1. 每天签到一次,领5个京豆

  2. 买100元以上的东西,领20个京豆

  3. 发1条20字以上的评论,领10个京豆

  4. ……

从上面的规则中,我们可以看出,基本符合一个格式:xx行为,执行yy次,可以得到zz个ww。

于是我们可以将上述案例抽象成以下三步:

  1. 行为感知

  2. 任务推进

  3. 权益领取

架构设计

本着高内聚与低耦合的理念,我们可以抽象成几个核心模块

行为感知模块

该模块负责对用户的行为进行感知,如果用户的登录行为、点赞行为、下单行为等。通常情况,该模块是异步进行的。

原因也很简单,行为感知作为依附于主链路存在的功能,其存在不应该影响到主链路的运行。

例如“用户每日登录获取一个积分”这样的案例,我们不应该在登录接口同步进行行为感知。通常采取的做法是,开一个子线程调用一下行为感知接口即可

但是,行为的种类千奇百怪,如何对行为进行一个合理的抽象便是我们要考虑的问题了。一个简易的流程图如下所示:

在上述流程里,行为感知模块可以感知多种数据源(消息),解析不同业务的消息数据后,为了转换成系统内部需要的行为对象,通常还需要有一步数据填充的过程,这一步需要我们和其他的服务进行联动的,在数据填充完成后,外部的行为才真正变成我们整个积分领取系统内部所需要行为对象,这一步可以可以再发出一个行为变更消息出去,以便和其他业务解耦(当然也可以提供一个接口)。

任务推进模块

我们将如何领取积分归到该模块中。

所谓任务推进,便是我们上述案例中提到的例如:下单20元的物品、点赞10条内容、登录1次这样的行为。在该模块中,我们需要维护一张用户行为记录表和一个任务规则表。

行为记录表负责维护用户每天的任务进度状态,例如点赞了多少条内容等信息。

任务规则表负责录入玩法规则,比如点赞10条内容可得一个积分这样的信息。该部分通常会由一个运营后台来承接。

一个简易的流程图如下

在上述流程中,任务的匹配与任务进度的更新是比较核心的部分。如何做好技术选型是比较重要的一点,我们将会在下一章详细介绍。

权益领取模块

出于高内聚低耦合的思想,我们可以将权益系统的职责设置的简单一些,只需要负责增加积分、减少积分,查询积分明细这几个工作。至于从什么渠道加积分、加多少积分,则将职责上移到任务推进模块中进行。

举个例子解释一下。比如,用户通过下订单赚取积分。订单系统通过异步发送消息或者同步调用接口的方式,告知行为感知模块订单交易成功,补全必要的信息后,发送给任务推进模块;任务推进模块根据拿到的订单信息,查询订单对应的积分兑换规则(兑换比例、有效期等),计算得到订单可兑换的积分数量,然后调用权益领取模块的接口给用户增加积分。

这一部分的流程比较简单,就不画图了。但是如何保证积分加的正确,如何保证不重复加或者不漏加则是该模块的难点。

小结一下

简单对上述三个模块进行一个小结。有了上述共识后,我们可以抽象出如下的功能图。

详细设计(数据表设计)

数据库和接口的设计非常重要,一旦设计好并投入使用之后,这两部分都不能轻易改动。

改动数据库表结构,需要涉及数据的迁移和适配。改动接口,需要推动接口的使用者作相应的代码修改。这两种情况,即便是微小的改动,执行起来都会非常麻烦。因此,我们在设计接口和数据库的时候,一定要多花点心思和时间,切不可过于随意。

相反,业务逻辑代码侧重内部实现,不涉及被外部依赖的接口,也不包含持久化的数据,所以对改动的容忍性更大。

在对上述流程进行了一个抽象之后,我们发现有两个非常重要的表:任务规则表任务进度明细表

数据字典设计

任务规则表

这张表的设计比较简单,只需要指明相应的活动规则即可,表结构如下。

字段 说明
id 活动ID
name 任务名称
description 任务描述
type 任务类型
userAction 用户行为
num 任务次数
rewardCount 任务完成后的奖励数值
rewardType 任务完成后的奖励类型
period 单次任务的周期,本次需求仅支持天级别(DAY)的周期
threshold 每个任务周期内能完成的次数上限

如何设计一个积分领取系统相关推荐

  1. 如何设计一个优惠卷系统

    如何设计一个优惠卷系统 场景 优惠券的种类 优惠券系统的核心流程 发券 领券 用券 需求拆解 商家侧 用户侧 编码 Service 服务 服务结构设计 优惠券系统设计技术难点 Storage存储 表单 ...

  2. mysql每秒支持多少并发_如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确 ...

  3. oom 如何避免 高并发_【面试题】如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 原文链接:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/high- ...

  4. 面试题:如何设计一个高并发系统?

    面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确实有真才实学,在互联网公司里干过高 ...

  5. fifo页面置换算法设计思路_千万级并发!如何设计一个多级缓存系统?

    什么是一个多级缓存系统?它有什么用?我们又如何设计一个多级缓存系统? 图片来自 Pexels 所谓多级缓存系统,就是指在一个系统的不同的架构层级进行数据缓存,以提升访问效率. 我们都知道,一个缓存系统 ...

  6. 高并发面试 - 如何设计一个高并发系统?

    高并发面试 - 如何设计一个高并发系统? 面试题 如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里 ...

  7. 【面试】如何设计一个高并发系统

    一.为什么需要秒杀系统? 电商平台本质是在线上撮合买卖双方的购销需求,达成交易.虽然是线上交易,但也遵守朴素的经济学原理,供求关系决定了商品的经济活动.当供求平衡时,买方和卖方处于对等关系,双方相对稳 ...

  8. 主题 04:如何设计一个复杂的系统(下)

    1. 引言 设计复杂系统的能力是高阶工程师的必备能力,设计出完备.健壮.优雅.前瞻的系统是工程师的不懈追求.在上一篇文章中,笔者介绍了设计一个复杂系统的第一步:深入理解业务.本文作为<如何设计一 ...

  9. 如何设计一个单点登录系统

    本文来说下如何设计一个单点登录系统 文章目录 概述 JWT的组成 头部(Header) 载荷(Payload) 签名(签名) 签名的目的 信息会暴露 JWT的适用场景 用户认证八步走 和Session ...

最新文章

  1. 十亿级流量下,我与Redis时延小突刺的战斗史
  2. Python之sort()函数详解
  3. python和access哪个实用_access和python学哪个
  4. 把MySQL中的各种锁及其原理都画出来
  5. spring的基本配置和使用
  6. Vue2.0史上最全入坑教程(中)—— 脚手架代码详解
  7. 【影视后期】认识After Effects
  8. 软件测试职业发展-王学丹
  9. Javascript:各种定位clientX、pageY、screenX、offsetY区别
  10. python作用域总结_关于Python作用域自学总结
  11. java batik_使用BATIK解析SVG生成PNG图片
  12. 思源黑体(魅族)、方正兰亭(小米)、冬青黑体(锤子)比较
  13. 谷歌浏览器无法登陆百度贴吧
  14. matlab激活中遇到 matlab2017a license error -8,523错误
  15. html相册滑动手风琴效果实现,JS实现图片手风琴效果
  16. 局部钩子能防全局钩子吗_这个英雄还值得我们去练吗?百里玄策打法难点解析...
  17. QQ在线图标 离线 QQ开通在线QQ服务 QQ陌生人直接聊天
  18. 实现Tumblr的标题栏跟滑动渐变颜色(在2个色值之间)的动画
  19. 如何彻底清除还原精灵
  20. Unity通过协程实现回合制战斗

热门文章

  1. 【漫画科普】什么是POL?什么是全光?
  2. Spring入门-1-基本配置和IOC、DI
  3. 这篇3万字的Java后端面试总结,面试官看了瑟瑟发抖(汇总)
  4. TCP长连接,心跳机制介绍
  5. 微信公众号+获取文章内容【只是记录自己的学习过程】
  6. EasyPR--开发详解(5)颜色定位与偏斜扭转
  7. 寒冬,是修炼内功的最好机会
  8. P2P贷款全攻略,贷前、贷中、贷后工作事项解析
  9. 在Windows上使用EDA软件——利用WSL安装IC618、SPECTRE181
  10. Python学习 Day43 数据解析-BeautifulSoup 07