(优惠券)DDD重构和数据迁移
2021-11-30 10:18:49 4 举报
采用ddd的思想来指导优惠券系统业务重构并进行数据迁移
作者其他创作
大纲/内容
是否成功
调用old api
拼团
发送MQ
使用规则
old db
读接口校验
写入Command
新接口
轮询下一页
停止双写
生成分布式 uniqueid
N
new api
单边存在数据
结束
资源存储
选品
库存上下文
定时任务
mysql凭证
回退校验
运营库
双写开关是否开启
fromMigrate=true
配置后台
返回结果
删除data_migrate_error
重来
核销转换
拉新
促活
失败次数++
投放测试
路由
new db
一致性校验
查券服务
方案1-接口兼容
资格
发券
展示规则
审核系统
兼容处理mapping
数仓
db_index
是否灰度
人群标签
规格定义
table_31
mssqlslave
true
城市策略
Y
消费者
mkt-gateway
数据分析
B端
毛利
Nothing
【job3】新增update数据同步更新时间>= startT1
DB解耦
选品子域(支撑)
调用方
END
数据同步
门店策略子域(支撑)
proof_0
发券服务
返回old结果
发券业务
记录失败明细
门店策略
打印error日志和报警
是否有数据
<100条
服务
对账&补齐
写接口并行双写支持一致性校验
库存
配券
判断fromMigrate
应用层
用券业务
组合售卖
成功率>99.9%
资格子域(支撑)
用户界面层
精细化运营
log
方案2-数据迁移
数据迁移
不需要
需要
一致性校验和双写
扩展性
老接口不太好扩展
扩展性好
依赖上游切换
上游无感知
迁移时间
长
短
判断开关是否开启
返回new结果
查询详情-old
读接口一致性校验和灰度过程
业务
基础设施
删除command
读接口切换
使用范围
券后价
大客户
fromMigrate=false
执行new逻辑
存量新增修改表结构重构设计水平、垂直拆分
用券服务
写接口切换
改价
核心应用场景
兼容Mapping
成功次数++
异常:修复数据
业务重构
binlog sync
存量重新设计
双写&灰度优先级
table_1
失败
方案设计DB解耦
开始
百度地图
投放分析
抵扣券
proof_31
校验双写/灰度开关
创建模板
根据master补齐数据
计数上下文
实付券
数据双写
false
4
proof_1
中转层
SLA
1
uniqueid
凭证域
延期
【接口】数据双写
美容套餐
成本预算
old接口
批次子域(核心)
uniqueId
状态机
核销校验
写接口灰度
3
灰度策略是否命中
核销
分批灰度支持回滚
创建批次
终端
写入业务数据
配券业务
2
分页查询data_migrate_error
绑定mapping
读接口灰度
DoubleWrite
mssqlMaster
proof_17
优惠规则
分布式id
配券服务
水平拆分
生产者
业务校验
DB对账
随机立减
作废
proof_15
大翻盘
数据不一致
执行new业务逻辑
获取到commandId
【job1】存量数据同步创建时间< startT1
记录到DataMigrateError
领券上下文
判断新老结果是否一致
库存告警
userid分库分表策略
调用new接口
卖券
该流程只针对写灰度开启以前生效写灰度阶段会存在问题:同一数据的操作流水可能会命中两种场景【双写&灰度】导致更新覆盖的数据出错解决方法:1.根据日志来还原场景,进行数据修复,对数据的实效性要求较高2.根据关联的业务数据,进行数据修复,比如优惠券凭证新老数据不一致,一边是未核销一边是已核销,这时候可以根据订单的核销记录来进行数据恢复
梯度优惠
聚合返回接口
进行灰度操作
落地页
门店范围上下文
商户库
Gray
有效期
冻结/解冻
回退规则
领域模型
券模板定义
【job2】新增Insert数据同步创建时间>= startT1
门店
支付券
迁移过程
批次域
埋点
进行双写操作
查询详情-new
用券
满减券
白名单
成功
按流量进行灰度【随机】
商品
成功则插入command
根据时间判断是否更新数据最终保障一致性
查券业务
写接口双写一致性校验
产品功能
灰度总开关是否开启
H5
库存子域(支撑)
开始消费
商品范围上下文
计数子域(通用)
赠品
异常:关闭灰度
优惠信息
同步商品
cluster-2
AB测试
会员权益
new接口
兑换码
监控告警
灰度策略:以接口的流量百分比
返券任务
B端业务
获取uniqueId
一致性校验自动化测试业务测试压测和优化
凭证子域(核心)
人群推送
风控
MQ
写Command
基础依赖
创建券批次
业务架构
客诉补偿
技术架构
tb_index
订单渠道
C端
领券
配置服务
一致
【job4】对账&补齐
执行老逻辑
业务告警
执行old逻辑
cluster-1
压测&性能优化
商详页领券组件
用户标签
限领/用上下文
开始时间 startT1
相等
app
数仓接入
叠加使用
下单服务
售卖分析
成本分摊
领券/发券
双写&补齐
到期提醒
写入mapping
服务层
人群圈定
proof_16
old api
读接口一致性校验
新配置后台
券模板
用券上下文
领取规则
券批次
回退
领取资格
总次数++
核心模型
table_0
mysql批次
券凭证
是否一致性校验
场景营销
数据同步过程
折扣券
星选活动
数据一致性校验
灰度
小程序
分页查询Command
网关
正式投放
领域层
配置
退券
算法:【userID或者proofid后四位hash后取模】
异步调用old发券
节假日
推送
开始进入老接口
0 条评论
下一页