inventory_levels/update 推得太频繁怎么减压
现象#
大促开始后每秒涌进上百条库存事件,同一个 inventory_item_id 反复推送,队列延迟到十几分钟,后台库存数字跳来跳去。
原因#
- 每个地点每个库存项每次变动各发一条,一次 CSV 盘点会放大成几千条
- 同一商品多个地点同时扣减,事件之间不合并,消费端重复计算总量
- payload 只有 available 与 location_id,不含商品信息,每条都要回查一次
- 消费端串行处理且每条开一个事务,吞吐被数据库连接数卡死
处理步骤#
- 按
inventory_item_id做键,合并 1~2 秒内的变动只处理最后一条 - 用
available与updated_at做幂等,旧时间戳直接丢弃 - 批量回查
inventoryItem(id:)拿 SKU,别在循环里单条查询 - 消费端改成一次提交 200 条的批量写入,降低事务开销
- 大促期间给该订阅加
include_fields只留必要字段
验收标准#
大促期间队列延迟稳定在 30 秒内,同一条变动只落一次库,available 与后台库存一致。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。