库存冻结现状
目前购物车添加商品、删除商品、修改商品数量、购物车过期库存解冻、成单后清空购物车,都涉及库存变化。
以添加商品为例,目前实现逻辑为:
1、调用库存系统扣减库存
2、购物车写库
3、第2步失败时,调用库存系统回滚库存。
以上均为线上同步调用。网络抖动时,产生的数据不一致系统无法自动恢复。
购物车与库存数据一致性
因购物车和库存系统分属不同的数据库,此处涉及分布式事务问题。
互联网系统出于系统性能的考虑,一般不追求实时一致性,而目标转向最终一致性。
最终一致性,可基于消息和处理状态实现。参考文章
以添加商品为例,实现逻辑仍与现有基本一致。一个事务可分解为3个动作:冻结库存、购物车写库、库存还原
每个动作都在本地库进行操作记录,离线定时对前后两个动作的操作记录进行核对,后一动作有缺失则进行重新触发。
最终一致性实现设计
概念定义:
1、事务(Transaction):购物车每次添加商品、删除商品、修改商品数量,称之为一个事务。
2、动作(Action):具体的数据写入操作,称之为一个动作。
以数据库为单元切分,不同数据库的操作必须切分为不同的动作。同一数据库的连续操作,可合并为一个动作。
3、链接(Link):前后相邻两个动作,需离线进行核对,称之为链接。先执行的动作简称为前动作,后执行的动作简称为后动作。 <