apc_库存流转_UML
2022-06-22 17:58:38 1 举报
活动商品库存流转功能UML
作者其他创作
大纲/内容
计算库存值
同步基础信息准备数据fromRPC
不满足
异常处理
异常控制
普通库存
满足
乐观锁:LOCK_HIGHSEAS_PRODUCT_SKU
Order
告警,不允许失败
悲观锁batch
重复&合法校验
sku批量
乐观锁:目的:保证多操作来源高并发时对活动品sku的库存值的扣减操作不会造成冲突,产生无效数据;方式:乐观锁;粒度:活动品sku粒度细节:1. 更新sql中使用变化量,防止覆盖;2. 乐观锁仅限制库存扣减时即可,增加的场景不需要限制;
事务控制
7
活动库存
5. 活动池释放独享库存
乐观锁:目的:保证多操作来源高并发时对活动池活动品sku库存值的扣减操作不会造成冲突,产生无效数据;方式:乐观锁;粒度:活动品sku粒度
活动池活动品sku增加
乐观锁
HighSeas
逻辑注解:1. 支持部分成功;失败的部分以业务结果返回;2. 两层事务套接:循环体外事务控制整体结果;循环体内控制每个活动品打捞结果,通过异常捕获作为异常业务结果返回;
携带凭证批量
公海活动品sku批量增加
循环活动品
携带凭证
异常业务结果返回
公海活动品刷新信息
活动池活动品刷新信息
乐观锁:目的:保证多操作来源高并发时对活动品sku库存值的扣减操作不会造成冲突,产生无效数据;方式:乐观锁;粒度:活动品sku粒度
库存类别
公海活动品不可售
Stock
乐观锁:LOCK_POOL_PRODUCT_SKU
变更活动品sku库存
1. 提报sku进公海;- 初始化未提报进公海的商品;- 不容错已提报过的sku;
6
悲观锁:LOCK_SUBMIT目的:同类操作并发互斥;方式:悲观锁;粒度:活动品粒度
否
循环sku
活动池活动品sku批量扣减
撤销sku
业务方/提报渠道
2. 编辑已提报sku的活动库存;
变更备注:与撤销操作互斥1. 撤销操作现根据需求调整至Sku维度;故悲观锁维度由:LOCK_HIGHSEAS_PRODUCT 调整至:LOCK_HIGHSEAS_PRODUCT_SKU2. 由于同时存在SPU维度的整体撤销;故实现方式暂定通过批量悲观锁(LOCK_HIGHSEAS_PRODUCT_SKU)控制;
4
告警,人工介入
变更备注:与撤销操作互斥优化1. 撤销操作,撤销操作第一步,将对应活动品(公海&活动池)置为不可售;自此,步骤4不再可执行;2. 批量将对应活动品从各活动池中删除;注:因当公海活动品不可售时,可人工操作活动池活动品撤销至公海;所以本环节可能跟上述情况冲突,此时需做兼容处理;3. 撤销公海活动品;注:- 根据上述步骤1、2得知,步骤5会被控制发生在步骤3之前,所以步骤3、5不会冲突;- SKU失效MQ&商家商品池发出已提报SPU删除的MQ时,也遵循上述撤销步骤:结论:- 只需要对提报渠道的三种操作执行互斥锁即可;
5
打捞规则过滤
综述:1. 提报sku进公海;2. 编辑已提报sku活动库存;3. 撤销已提报sku;4. 活动池独享打捞;5. 活动池释放独享;6. C端扣减活动池活动品独享库存;7. C端返还活动池活动品独享库存;8. C端扣减公海活动品共享库存;9. C端返还公海活动品共享库存;注:C端逐级返还的场景复用上述情况;
抛异常
逻辑注解:1. 不支持部分成功;仅保证全量成功or失败;2. 前置处理sku库存批量交互;不在事务中执行;3. 获取锁之后,循环处理sku;4. 发生异常本地回滚,并调用stock回滚RPC;
悲观锁:LOCK_SUBMIT目的:与其他公海活动品sku操作记性互斥控制;方式:悲观锁;粒度:活动品粒度
根据凭证批量回滚
执行sku库存变更
校验撤销规则(手动撤销时)
悲观锁:LOCK_HIGHSEAS_PRODUCT目的:与其他公海活动品sku操作记性互斥控制;方式:悲观锁;粒度:活动品粒度
逻辑注解:1. 支持部分成功;失败的部分以业务结果返回;2. 两层事务套接:循环体外事务控制整体结果;循环体内控制每个活动品打捞结果,通过异常捕获作为异常业务结果返回;3. 仅当独享打捞时才需要库存值的计算和变更操作,共享打捞和普通库存类活动品打捞不存在上述环节;
悲观锁:LOCK_SUBMIT活动品粒度---> 渠道+商家ID
根据凭证回滚
2
悲观锁Batch
悲观锁:LOCK_SUBMIT目的:公海活动品sku存在被撤销的操作,此时需要与其他公海活动品sku操作记性互斥控制;ToC,业务逻辑控制:仅当活动下架或结束时,不会有订单操作公海sku共享活动库存;ToB,技术实现控制:方式:悲观锁;粒度:活动品粒度细节:同时,与撤销产生互斥的操作都需要同一把悲观锁进行同步控制;
活动池活动品sku扣减
活动品sku扣减
6. 订单扣减活动池活动品独享库存
公海活动品sku批量扣减
问题场景:关于SPU/SKU强制性退出方舟的处理问题来源:sku失效、SPU移除商家商品池;解决方案:两个独立事务控制;1. 事务1:将对应的活动品/活动品sku删除并提交事务,保证数据落库,C端不再扣减;2. 事务2:执行“取消提报”逻辑,将对应的SPU/SKU撤销掉;如果产生异常,仅在事务2中回滚,并告警人工介入;
Pool
9
9. 订单返还活动品sku共享库存
3. 撤销已提报的sku;注:使用场景包括:- 提报渠道主动撤销(手动撤销);- sku失效MQ通知撤销;- 提报渠道异步MQ通知撤销;
悲观锁:Pool
8. 订单扣减公海活动品共享库存
活动品sku增加
4. 活动池独享打捞
1
逻辑注解:1. 撤销规则仅对挑拨渠道人工操作适用;MQ类直接执行逻辑;2. 第一个事务不允许失败;
是否已进海
逻辑注解:1. 不支持部分成功;仅保证全量成功or失败;2. 前置处理sku库存批量交互;不在事务中执行;3. 循环处理sku,循环内使用乐观锁;4. 发生异常本地回滚,并调用stock回滚RPC;
8
活动池活动品sku批量增加
活动池活动品不可售
3
初始化操作
是
7. 订单返还活动池活动品独享库存
0 条评论
下一页