把 Admin 的限流算法套到 Storefront 上会误判
现象#
监控里 extensions.cost.throttleStatus.currentlyAvailable 看着很充足,线上却开始出现 430;无令牌查询还会直接报 MAX_COMPLEXITY_EXCEEDED,cost 1250、maxCost 1000。
原因#
- Storefront 对真实买家流量没有固定 RPM,照搬 Admin 的 1000 点容量与 50 点每秒恢复率会算出错误的等待时间
- 无令牌访问有 1000 点复杂度上限,嵌套连接一多就会撞上
- 自动化抓取与爬虫被单独限流,缺 Shopify-Storefront-Buyer-IP 时所有请求被算作同一来源
- 结账创建另有每分钟节流,超出时返回 HTTP 200,body 里才是 Throttled
处理步骤#
- 先读
errors[0].extensions.code,区分 THROTTLED、ACCESS_DENIED 与 MAX_COMPLEXITY_EXCEEDED - 把
first与嵌套层级降下来,让单查询 requestedQueryCost 低于 1000 - 服务端请求统一补
Shopify-Storefront-Buyer-IP,不要把全部买家合成一个 IP - 对 429/430 与 200 Throttled 分别做指数退避,退避基数按响应而非 Admin 的 restoreRate
- 用压测脚本跑 5 分钟真实查询,统计 430 比例与平均 cost
验收标准#
压测期间 430 比例为 0,响应 errors 为空,单查询 requestedQueryCost 稳定低于 1000。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。