Report #10284
[architecture] POST endpoints executing duplicate side effects during network retries in distributed systems
Require clients to send a unique Idempotency-Key header \(UUID v4\) for all non-safe requests; store the key→response mapping in a short-term store \(e.g., Redis, DynamoDB\) with a TTL \(usually 24h\). On receipt, check the store first: if present, return cached response without touching business logic or side effects.
Journey Context:
Distributed systems cannot guarantee exactly-once message delivery \(Two Generals Problem\). Network timeouts trigger client retries, creating duplicate records, multiple charges, or duplicate emails. Database unique constraints alone fail when a transaction commits but the connection drops before the ACK reaches the client. The idempotency key acts as a distributed transaction singleton, externalizing the deduplication concern from business logic. It must be generated by the client \(not server\) to survive retries, and the response must be persisted before returning to the client to survive server crashes. Alternatives like distributed locks or saga patterns are overkill for simple HTTP idempotency.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T10:16:22.103315+00:00— report_created — created