浅谈优惠券系统设计
一.概述
利用闲暇时间总结下优惠券系统的一些业务与技术方案的设计及其注意事项。从业务与技术角度构建一个安全的高可用的优惠券系统
我们的目标:安全,可扩展,高可用
二.优惠券业务架构
优惠券的种类:
满减券:如满100-10,满2件减10元
折扣券:如满100打9折
优惠券相关概念:
规则定义:涉及计算的部分,作用范围:商品、商户、类目,计算方式:是否累加,是否互斥等
优惠券定义、模板:发放有效期,使用有效期,使用渠道,发放渠道,券类型:商户券,平台券
优惠券:发放到用户手中的优惠券
优惠券用法:
1. 发券:业务方调发券接口发券,运营后台为指定用户批量导券,发券常用于价值比较高的券
领券:由运营创建一个优惠券模板, 配置在活动页或者商品详情页上,让用户主动领券,领券常用于价值比较低的券,用户自己就能领到
3. 用券:消费者收到优惠券后,在结算页从优惠券列表中选择优惠券并使用.
优惠券的使用流程:
配置券定义(券模板)
运营给用户发券/用户主动领券
用户使用券
核销,退券等
优惠券数据统计:通过读取线上优惠券发放与使用的记录,数据分析团队创建数据报表,提供给大数据团队进行分析,通过分析,优惠券发放也可以做到千人千面
优惠券的发放限制:
具体业务方,比如激活中心,新手券,下单券,用户生日券
具体的发放时间:如2017-09-01到2017-09-10
具体活动,如双十一
具体地点,如上海
具体的人群,如男性
优惠券的使用限制:
门槛
状态
有效期
业务渠道
有效期的三种类型:
模板固定有效期
模板动态有效期
发券时指定有效期
发券方式:
同步
异步
发放的数量限制:
券库存限制
用户总数限制
用户每天限制
通知方式:
短信通知
邮件通知
app消息通知
报警:
优惠券库存告警
优惠券使用时间告警
主要业务方:
1. 用户端:商详页领券,店铺页领券,活动页领券
2. 后台系统:批量发放优惠券
3. 抽奖发券
4. 新用户注册返券
5. 下单返券
评价返券
非功能特性:
幂等性:发券,使用券要保证幂等性,领券不需要。
高性能:活动页领券等业务场景必须拥有高性能,服务可水平扩展
可扩展性:对于新的优惠券方式实现快速扩展,对于外部渠道的优惠券可以快速对接
三.技术架构设计
1.整体架构:优惠券系统属于底层系统,需要应对高并发,服务必须支持水平扩展,分布式部署
2.表设计
规则定义表:由于记录优惠券对应的规则相关,计算脚本等
优惠券定义表(模板表):由于记录优惠券模板相关属性,发放相关,使用相关
优惠券实例表:发券到用户账户,用于记录优惠券与用户的关系
优惠券作为基础平台,根据功能特性划分成以下基础接口
优惠券模板查询接口:需要展示券详情的业务
用户领券接口:用户在活动页或者商详页领券
批量发券接口(同步):业务方RPC调用
批量发券接口(异步),适用于秒杀,抢券等活动场景
查询用户优惠券接口:我的优惠券
商详页接口:提供商品查询可用优惠券列表,供用户领取。
下单页接口:根据用户id与商品列表,商户,类目查询可用优惠券列表
用券接口
四.优惠券计算
优惠券的计算采用规则引擎,利用groovy脚本作为计算核心算法,具体见促销计算
注意事项:
不要将自增id作为业务id,防止用户在商详页或者活动页通过尝试伪造id来领取优惠券
不要暴露用户优惠券code,防止用户在下单页通过尝试伪造code来使用优惠券
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。