项目
博客
文档
归档
资源链接
关于我
项目
博客
文档
归档
资源链接
关于我
30| 高性能的数据一致性方案-扣减库存和优惠券记录锁定设计
2024-08-14
·
·
原创
·
·
本文共 375个字,预计阅读需要 2分钟。
### 分布式事务的另一种解决方案-下单商品库存扣减 1. 防重提交 2. 用户微服务-确认收货地址 3. 商品微服务-获取最新购物项和价格 4. 订单验价 - 优惠券微服务-获取优惠券 - 验证价格 5. 锁定优惠券 6. 锁定商品库存 7. 创建订单对象 8. 创建子订单对象 9. 发送延迟消息-用于自动关单 10. 创建支付信息-对接三方支付 **分布式事务** ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-08-14/9b606d70-0dd3-4dd2-bc67-c99ca986f62a.jpg) * 核心逻辑 * 用下单:锁库存和优惠券记录 * 下单异常或者超时未支付:释放库存和优惠券记录 * 初体验 ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-08-14/07cdaefc-3dc7-43d8-ba60-8f5cd4ccb0b1.jpg) ### 【重点】深入架构流程图-下单商品库存扣减多场景异常处理 * 核心逻辑 * 用下单:锁库存和优惠券记录 * 下单异常或者超时未支付:释放库存和优惠券记录 * 锁定记录状态 `lock_state` '锁定状态锁定LOCK-完成 FINISH-取消CANCEL', ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-08-14/34a6ae91-1780-4ef5-85d2-b8c6f44f00b5.jpg) ### 抽取架构业务模型-优惠券记录扣减-释放流程解析 **简介:触类旁通-抽取架构业务模型-转移到优惠券记录扣减回收** * 核心逻辑 * 用下单:锁库存和优惠券记录 * 下单异常或者超时未支付:释放库存和优惠券记录 * 锁定记录状态 `lock_state` '锁定状态锁定LOCK-完成 FINISH-取消CANCEL', ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-08-14/c9c47bcc-f798-49ab-93a7-de430f81a4b1.jpg) ### 商品库存锁定和优惠券记录锁定任务表设计 **简介:商品库存锁定和优惠券记录锁定任务表设计** * 下单锁库存任务表设计(p-nla-product库) ```sql CREATE TABLE `product_task` ( `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT, `product_id` bigint(11) DEFAULT NULL COMMENT '商品id', `buy_num` int(11) DEFAULT NULL COMMENT '购买数量', `product_name` varchar(128) DEFAULT NULL COMMENT '商品标题', `lock_state` varchar(32) DEFAULT NULL COMMENT '锁定状态锁定LOCK 完成FINISH-取消CANCEL', `out_trade_no` varchar(32) DEFAULT NULL, `create_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='下单锁库存任务表'; ``` * 优惠券记录锁定任务表设计(p-nla-coupon库) ```sql CREATE TABLE `coupon_task` ( `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT, `coupon_record_id` bigint(11) DEFAULT NULL COMMENT '优惠券记录id', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `out_trade_no` varchar(64) DEFAULT NULL COMMENT '订单号', `lock_state` varchar(32) DEFAULT NULL COMMENT '锁定状态 锁定LOCK-完成FINISH 取消CANCEL', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='优惠券记录锁定任务表'; ``` **商品库存锁定和优惠券记录锁定任务表代码生成**