优惠券

作者: 言十年 | 来源:发表于2020-03-14 23:20 被阅读0次

一道题

面试的第一道程序是一个测试题,需要您先认真回答一下
京东优惠券的设计方式1. 优惠券有满减,满赠,运费(以后还可能有别的)2. 优惠券有地域、性别...使用条件3. 优惠券可能会通过某个活动码领取, 也有可能通过app之类的直接点击领取, 还有可能系统自动发放要求:1. 大概设计表结构2. 大概叙述程序逻辑3. 注意可扩展性 4 .考虑好目前的需求并且可以实现,答题要考虑周全谨慎作答.

简单体验下京东

分类

架构图

架构图

涉及系统交互

后台

运营人员创建券。调用优惠券服务进行存储。

c端界面:

店铺服务调用券服务展示。

PLUS会员系统调用券展示。

活动页调用券信息展示。

个人中心展示优惠券的使用状态。

下单后优惠信息也要保存。订单详情会展示。

各种领券的操作。

等等。。。。需要优惠券出现的地方,调用优惠券的基础服务。(接口也好,其他rpc的方式也好)

其他系统交互

消息流系统:

退单,优惠券补发。(根据业务而定)

推送系统:

通常浏览商品,会突然“从天而降”优惠券。

推送短信。

app内推送。

表设计

优惠券基础表:存储优惠券的 title 、利益点、类型、限额还是满多少可用、金额、

优惠券类型表:运费|平台|礼金 |会员|分类|商品等等

如果选择商品,可以关联一些商品id。
选择分类,可以选择分类id。

优惠券规则表:优惠券id, 各种优惠券的限制条件(限制地域、限制性别、使用时间、如果)

品类跟优惠券关联表:

店铺跟优惠券关联表:

商品跟优惠券关联表:商品id 、优惠券id

订单关联优惠信息表:下单后订单id 跟优惠券id 放在这张表里(退单后根据这张表补发)。放计算好的优惠信息。

其他方面的考虑

  1. 防止多领?(并发条件下)

加锁、判断是否领过(可用缓存做标记)

  1. 限流

2.1 削锋限流(外部网关、内部网关)

2.2 个人领取频率限流。如果有需要。可以用redis搞(redis-cell )。

3.分库分表

有需要可以根据优惠券id 分 ,优惠券的表。

商品id跟优惠券关联的,按照商品id分。

以什么维度主要查就以什么id去分。

  1. 连接数问题

连接池

5.优惠券系统缓存一致性怎么保证?

也分场景。优惠券后台的配置尽量走消息队列。更改库然后更改redis。然后消息标记为消息成功。如果消息不成功告警。重新执行。

参考资料

优惠券系统应该如何设计?

相关文章

网友评论

    本文标题:优惠券

    本文链接:https://www.haomeiwen.com/subject/zjnoshtx.html