库存优化专题
markdown # 库存优化专题 - 开放平台技术部 ## this is T2 ``` 空间 人员 创建 创建 快速搜索 帮助 各空间管理员信息 E编辑 F收藏 观看 S分享 页面/…/ 性能优化专题 跳到banner的尾部 回到标题开始 库存优化专题 转至元数据结尾 由 创建, 最后修改于十月 12, 2019 转至元数据起始 背景 名词解释 整体思路 表结构设计 冻结库存调整 开启热点商品 关闭热点商品 归还库存 参考 背景 目前交易下单流程中,主要有下订单、冻结优惠券、冻结库存操作,其中冻结库存由于受限于单行行锁的原因,只能支持极限 600 TPS。 在可预见的未来,冻结库存将会成为下单流程中的瓶颈,所以承需解决库存性能瓶颈,提高整体下单的 TPS,保障未来业务的稳定高速发展 名词解释 下单过程中库存主要以商品 sku 维度来进行冻结 普通商品:下单扣库存并发不高的商品 秒杀商品:库存比较少,下单扣库存并发高的商品 热点商品:库存比较多,下单扣库存并发高的商品(库存超过 1W 以上) 秒杀商品与热点商品区别在于秒杀商品很快就会将库存扣减为0,且之后就不会再有扣库存请求了,没有必要进行热点分片。所以,下文讨论主要讨论热点商品。 整体思路 冻结库存主要分为两步 :插入幂等日志和冻结 sku 库存。其中性能单点就是下面冻结 sku 库存 update 语句,由于同时更新一条记录,受限于 MySQL 行锁,只能支持 600 TPS 。 1. 开启事务 start transaction 2. 插入幂等操作日志 insert stock_log 3. 冻结 sku 库存 update sku_item set frozen_stock = frozen_stock + 1, available_stock = available_stock -1 where available_stock > 0 4. 关闭事务 end transaction 针对 update 瓶颈其实为 I/O瓶颈,解决方法主要两种: 增加 IO 设备 (分散读写记录) 减少 IO 次数(批量一次性提交) 在热点商品场景下,初步思路采用水平拆分分片的思路来分散热点数据。原先单条 sku 记录拆分成主 sku 记录(sku_item...
Comments
Post a Comment