标准答案

  1. 先描述流量、共享资源、竞态步骤和可观测证据,例如同一订单两次扣款或同一 SKU 库存变负。
  2. 止血可以限流、关闭非核心入口、暂停重试或切换只读,但不能用返回成功掩盖未知结果。
  3. 长期修复由条件更新、唯一约束、状态机、幂等记录、按 Key 串行和可靠补偿组成,具体取决于事实来源。
  4. 最后说明如何用重复率、库存对账、积压年龄、P99、恢复时间和演练验证方案。

题目解析

完整并发案例应先还原竞态窗口和用户影响:哪些请求同时到达、共享状态在哪里、哪条证据证明发生了重复或超卖。这样才能判断问题是代码竞态、资源过载还是业务规则缺失。

止血方案要保护正确性和容量,例如限流、暂停非核心入口、停止无效重试、切换只读或转处理中;不能为了降低错误率而返回无法证明的成功。

长期修复要落在最终事实处,并说明条件更新、唯一约束、状态机、幂等记录、按 Key 串行和补偿分别解决什么问题。最后用对账、P99、积压年龄、重复率和恢复演练验证结果。

常见误区

  • 误区:只说“加锁或扩容”。改正:指出竞态窗口、权威写入、容量边界、幂等和恢复证据,说明每个动作的取舍。
  • 误区:不解释超时和重复请求。改正:区分客户端超时、服务端执行结果未知和安全重试,明确状态查询或幂等键。
  • 误区:不讲数据对账和用户补偿。改正:说明如何发现重复、丢失和错误状态,并给出可审计的补偿或人工处理路径。

作者信息