并发写同一商品报 product 正在被修改
现象#
库存同步与人工改价同时进行,mutation 的 userErrors 返回 This product is currently being modified. Please try again later,code 是 TOO_MANY_PARALLEL_REQUESTS_FOR_THIS_PRODUCT。
原因#
- 同一商品在极短窗口内被多个进程写入,服务端按商品加写锁,后来的请求被直接拒绝
- 一次请求里对同一商品发多个别名 mutation,并发数超过该商品的写上限
- 失败后立刻重试没有退避,锁还没释放就又撞上一次
- 任务队列按批次而不是按商品 ID 分发,同一 SKU 落到不同 worker
处理步骤#
- 按
product.id做哈希分片,保证同一商品只在一个 worker 上串行处理 - 捕获
TOO_MANY_PARALLEL_REQUESTS_FOR_THIS_PRODUCT后退避重试三次 - 把同一商品的多个字段合并成一次
productUpdate,不要循环单字段提交 - 写入前读
updatedAt,与本地快照不一致就放弃本次覆盖 - 把冲突次数打点,持续偏高说明分片键选错或有人工并发编辑
验收标准#
压测时同一商品不再出现该 code,冲突请求退避后成功,最终价格与库存与源系统一致。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。