大营销平台
2024年11月15日大约 2 分钟
大营销平台
项目简介
抽奖服务是营销平台系统的重要模块,本次抽奖服务的设计,主要以支撑各类差异化的抽奖玩法,如:通过黑名单用户、积分消耗情况等策略指定抽奖奖品范围,支持 N 次抽奖次数解锁等玩法。在此抽奖模块的设计中运用了模板模式、责任链模式、组合模式和工厂模式,提高代码的可扩展性。
项目架构
微服务架构、DDD 领域驱动模型、前后端分离设计
核心技术
SpringBoot、MyBatis、MySQL、Redis、RabbitMQ、ES、Canal、xxl-job、DB-Router、DynThreadPool
系统设计
领域模型设计
基于 PRD 需求评审,将抽奖流程抽象为三个核心阶段:
- 抽奖前:人群判断、规则校验、资格验证
- 抽奖中:策略执行、库存处理、概率计算
- 抽奖后:奖品发放、兜底策略、补偿机制
技术方案设计
流程标准化
- 使用模板方法模式定义标准抽奖流程
- 责任链模式处理抽奖前的规则验证(黑名单、权重等)
- 组合模式构建决策树,处理抽奖后逻辑(解锁、库存、兜底奖品)
- 通过数据库配置实现策略的动态构建
数据模型
- 抽奖策略表:定义抽奖基本配置
- 策略明细表:配置具体奖品及概率
- 规则配置表:设置抽奖规则
- 规则树动作表:构建规则执行路径
分库分表方案
对用户抽奖单、获奖记录等大数据量表进行分库分表,使用自研 DB-Router 组件进行路由,通过路由切分键控制多数据源事务。
库存控制方案
- Redis decr 原子操作处理库存扣减
- setNx 分布式锁作为兜底方案
- 异步延迟队列 + 定时任务更新数据库库存
- 确保无超卖且降低数据库压力
消息可靠性保障
- MQ 解耦发奖流程,缩短响应链路
- 发奖消息写入 task 任务表
- DynThreadPool 动态线程池 + 定时任务进行消息补偿