核心 GUIDE

PATTERNINTERMEDIATE6 分钟阅读

Idempotency Boundary

重复 Attempt 应该代表同一个 Business Intent,而不是每一次都悄悄创建新的 Side Effect。

核心心智模型

Stable Operation Identity 用来区分“同一个 Intent 的 Retry”和“一个真正全新的 Intent”。

为什么重要

网络会 Retry、Worker 会 Restart、Agent 会 Re-plan。缺少 Idempotency Boundary 时,同一个用户 Intent 可能制造重复 Order、Message、Charge 或 Refund。这个保护必须位于真正的 Side-effect Boundary,而不能依赖模型乐观地判断“应该没发生”。

01

给 Business Intent 一个稳定 Identity

当一个需要 Side Effect 的 Intent 被创建时,Caller 就分配 Idempotency Key 或 Operation ID。Receiver 为这个 Identity 记录 Result,并在重复 Attempt 时返回同一个 Outcome。这个 Identity 必须跨越 Network Retry、Process Restart 与 Agent Re-planning。

02

例子:一次点击,两次 HTTP Attempt

用户只点击了一次 Buy,但第一次 Request Timeout,于是 Client Retry。如果两次 Attempt 都携带同一个 Order-intent ID,Server 就可以返回原来的 Order,而不是创建第二个订单。

常见失败模式

  • 每次 Retry 都创建新的 Idempotency Key。
  • Key 只绑定一次 HTTP Attempt,而不是 Business Intent。
  • 把 Compensation 当作避免重复 Side Effect 的替代方案。

工程启发

  • 把 Stable Identity 放在真正的 Business Side-effect Boundary。
  • 任何可能发起 Retry 的地方都要持久化 Operation Identity。
  • 显式测试 Timeout、Restart 与 Partial Success 路径。

关键结论

  1. 01在考虑 Retry Timing 之前,Identity 就应该稳定。
  2. 02一个 Intent 应该只有一个 Operation Identity。
  3. 03面对 Ambiguous Outcome,Idempotency 与 Reconciliation 需要一起工作。

来自 Knowledge Graph 的相关知识点

这些关系直接来自 canonical graph,不维护第二套 Guide 分类体系。