Patterns
35 items
35 items
Making operations safe to retry multiple times
Idempotency ensures that performing an operation multiple times has the same effect as performing it once. In distributed systems, requests can be retried due to timeouts, network issues, or client bugs. Without idempotency, retries cause duplicate actions (double charges, duplicate orders). Implementing idempotency requires unique request IDs, storing operation results, and returning cached results on duplicates. This pattern is essential for any operation with side effects - payments, orders, resource creation. Stripe, AWS, and all payment systems use idempotency keys.
Networks fail, timeouts happen, clients retry. Without idempotency, every retry risks duplicate side effects. Plan for retries from the start.
Client generates unique key, includes in request. Server checks if key was seen before. If yes, return cached result. If no, process and cache.
Some operations are naturally idempotent (set value to X). Others need artificial idempotency (add Y requires tracking to prevent double-add).
Scenario without idempotency:
With idempotency: