冪等設計 (Idempotency)

★★★★Draft

FromDDIABuilding Microservices

📚 From the Books

冪等設計 (Idempotency)ConceptReliability

只要系統會重試,就一定會有重複。冪等=「同一操作做一次和做多次,結果一樣」——它是重試、at-least-once 訊息、網路逾時能安全運作的前提。

🧠 Core Ideas

TIP

冪等的核心情境:網路逾時時你根本不知道對方到底做了沒——只能重試。若操作不冪等,重試就會重複扣款、重複建單。把操作設計成冪等(或加去重機制),重試才安全。

⚖️ Tradeoffs

哪些天生冪等、哪些不是
  • 天生冪等:讀取、把值設成 X(PUT 覆寫)、刪除某 ID(DELETE)——重複做結果相同。
  • 非冪等POST 建立餘額 +100計數器遞增——重複做會多算。
  • 設計時盡量把操作改成「設定到目標狀態」而非「相對變更」。
不冪等的操作怎麼補救
  • 去重鍵(idempotency key):客戶端為每次操作帶一個唯一 ID;伺服器記下已處理過的 ID,重送就直接回上次結果、不重做。
  • 訊息場景:用訊息 ID 去重,或把「處理 + 標記已處理」放進同一交易。
  • 把狀態存資料庫,收到重複請求時先查「這個 ID 做過了嗎」。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading