Prevent Double-Spending When Two Users Pay Simultaneously from the Same Account
Context
You are designing a payments service where multiple clients may initiate payments at the same time against a shared account. The system must maintain a correct balance and prevent double-spending even under failures, retries, and high concurrency.
Task
Design the API and backend to ensure correctness and durability. Cover:
-
Request/response design, including status codes and error semantics.
-
Idempotency keys and how they are stored/enforced.
-
Concurrency control strategy (optimistic vs. pessimistic), transactions, and isolation levels.
-
Consistency guarantees to clients and internally.
-
Retry strategy and failure handling.
-
Monitoring, alerting, and observability.
-
Scaling to very high concurrency and massive request volumes.
Assume a typical service + database architecture. You may make minimal, explicit assumptions as needed.