SystemExpertsSystemExperts
Pricing

Patterns

35 items

Horizontal Scaling Pattern

15mbeginner

Retry with Backoff Pattern

15mbeginner

Replication Pattern

25mintermediate

Caching Strategies Pattern

25mintermediate

Persistent Connections Pattern

20mintermediate

Load Balancing Pattern

20mintermediate

Fan-out Pattern

20mintermediate

Fan-in Pattern

20mintermediate

Circuit Breaker Pattern

20mintermediate

Eventual Consistency Pattern

25mintermediate

Queue-based Load Leveling Pattern

20mintermediate

Bloom Filters Pattern

20mintermediate

Time-Series Storage Pattern

20mintermediate

Bulkhead Pattern

20mintermediate

Batch Processing Pattern

20mintermediate

Write-Ahead Log Pattern

20mintermediate

API Gateway Pattern

20mintermediate

Backend for Frontend Pattern

20mintermediate

Sidecar Pattern

20mintermediate

Idempotency Pattern

20mintermediate

Rate Limiting Pattern

20mintermediate

Backpressure Pattern

20mintermediate

Pub/Sub Pattern

25mintermediate

Strong Consistency Pattern

30madvanced

Conflict Resolution Pattern

25madvanced

Leader Election Pattern

25madvanced

Consensus Protocols Pattern

30madvanced

CQRS Pattern

28madvanced

LSM Trees Pattern

25madvanced

Sharding Pattern

25madvanced

Event Sourcing Pattern

30madvanced

Stream Processing Pattern

25madvanced

Change Data Capture Pattern

25madvanced

Distributed Locking Pattern

25madvanced

Two-Phase Commit Pattern

25madvanced
System Design Pattern
Reliabilityidempotencyidempotency-keysafe-retrydeduplicationexactly-onceintermediate

Idempotency Pattern

Making operations safe to retry multiple times

Used in: Payment Systems, APIs, Message Processing|20 min read

Summary

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.

Key Takeaways

Retries Are Inevitable

Networks fail, timeouts happen, clients retry. Without idempotency, every retry risks duplicate side effects. Plan for retries from the start.

Idempotency Key Pattern

Client generates unique key, includes in request. Server checks if key was seen before. If yes, return cached result. If no, process and cache.

Natural vs Artificial Idempotency

Some operations are naturally idempotent (set value to X). Others need artificial idempotency (add Y requires tracking to prevent double-add).

Scenario without idempotency:

  1. Client sends payment request: "Charge $100"
  2. Server processes, charges card
  3. Response lost due to network timeout
  4. Client retries: "Charge $100"
  5. Server charges card again
  6. Customer charged $200!

With idempotency:

  1. Client sends: "Charge $100, key=abc123"
  2. Server processes, stores result with key abc123
  3. Response lost
  4. Client retries: "Charge $100, key=abc123"
  5. Server finds key abc123, returns cached result
  6. Customer charged $100 correctly

Summary

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.

Key Takeaways

Retries Are Inevitable

Networks fail, timeouts happen, clients retry. Without idempotency, every retry risks duplicate side effects. Plan for retries from the start.

Idempotency Key Pattern

Client generates unique key, includes in request. Server checks if key was seen before. If yes, return cached result. If no, process and cache.

Natural vs Artificial Idempotency

Some operations are naturally idempotent (set value to X). Others need artificial idempotency (add Y requires tracking to prevent double-add).

Storage Requirements

Must store idempotency keys and results. TTL to prevent unbounded growth. Usually 24-48 hours sufficient.

Scope of Idempotency

Key should scope to specific operation AND user. Same key for different users should be independent.

Concurrent Requests

Two simultaneous requests with same key must not both execute. Use locking or compare-and-swap.

Pattern Details

Scenario without idempotency:

  1. Client sends payment request: "Charge $100"
  2. Server processes, charges card
  3. Response lost due to network timeout
  4. Client retries: "Charge $100"
  5. Server charges card again
  6. Customer charged $200!

With idempotency:

  1. Client sends: "Charge $100, key=abc123"
  2. Server processes, stores result with key abc123
  3. Response lost
  4. Client retries: "Charge $100, key=abc123"
  5. Server finds key abc123, returns cached result
  6. Customer charged $100 correctly

Trade-offs

AspectAdvantageDisadvantage

Premium Content

Sign in to access this content or upgrade for full access.