1 Scenario 场景
电商大厂常见促销手段:
-
优惠券
-
拼团
-
砍价
-
老带新
1.1 优惠券的种类
-
满减券
-
直减券
-
折扣券
1.2 优惠券系统的核心流程
1.2.1 发券
发券的方式:同步发送 or 异步发送
1.2.2 领券
-
谁能领? 所有用户 or 指定的用户
-
领取上限 一个优惠券最多能领取多少张?
-
领取方式 用户主动领取 or 自动发放被动领取
1.2.3 用券
-
作用范围 商品、商户、类目
-
计算方式 是否互斥、是否达到门槛等
1.3 需求拆解
1.3.1 商家侧
-
创建优惠券
-
发送优惠券
1.3.2 用户侧
-
领取优惠券
-
下单
-
使用优惠券
-
支付
2 Service 服务
2.1 服务结构设计
2.2 优惠券系统设计技术难点
-
券的分布式事务,使用券的过程会出现的分布式问题分析?
-
如何防止超发?
-
如何大批量给用户发券?
-
如何限制券的使用条件?
-
如何防止用户重复领券?
3 Storage存储
3.1 表单设计
券批次(券模板),coupon_batch
指一批优惠券的抽象、模板,包含优惠券的大部分属性。
如商家创建了一批优惠券,共1000张,使用时间为2022-11-11 00:00:00 ~ 2022-11-11 23:59:59,规定只有数码类目商品才能使用,满100减50。
券
发放到用户的一个实体,已与用户绑定。
如将某批次的优惠券中的一张发送给某个用户,此时优惠券属于用户。
规则
优惠券的使用有规则和条件限制,比如满100减50券,需要达到门槛金额100元才能使用。
券批次表 coupon_batch
添加图片注释,不超过 140 字(可选)
规则表 rule:
规则内容:
{
threshold: 5.01 // 使用门槛
amount: 5 // 优惠金额
use_range: 3 // 使用范围,0—全场,1—商家,2—类别,3—商品
commodity_id: 10 // 商品 id
receive_count: 1 // 每个用户可以领取的数量
is_mutex: true // 是否互斥,true 表示互斥,false 表示不互斥
receive_started_at: 2020-11-1 00:08:00 // 领取开始时间
receive_ended_at: