Exactly‑Once Wallet Credit Processing in an Unreliable Distributed Environment
Show Notes
How do you make sure a player’s wallet is credited exactly once when partners can retry requests, messages can be delayed or duplicated, and you cannot rely on distributed transactions? We break down the industry-standard approach, explain why “exactly-once messaging” is a myth, and show how companies like Stripe, PayPal, and AWS do it right.
Key Takeaways:
Idempotency is king: Every credit request gets a unique key. Retry it all you want — the wallet won’t double-credit.
Ledger-first design: Every transaction is recorded in an append-only ledger; balance is derived. Auditability and recovery are built-in.
Atomic updates: Balance + ledger entry + outbox event all happen in a single DB transaction — no distributed transactions required.
Outbox pattern & event logs: Events are published asynchronously to Kafka/EventBridge for notifications, audit, and replay. The source of truth always lives in the database.
Exactly-once is not a messaging feature: SQS, SNS, and EventBridge are all at-least-once. Correctness comes from atomic DB + idempotent design, not the message broker.
Recovery & audit made easy: Replay the ledger or Kafka topic to reconstruct balances at any point — perfect for compliance or disaster recovery.
Why it matters:
Whether it’s in gaming, fintech, or cloud credits, exactly-once wallet operations are a classic distributed systems challenge. Get this right, and you prevent double-spends, ensure auditability, and sleep easy at night.
Pro tip for interviews:
“The industry standard is an idempotent credit API, backed by an append-only ledger. Balance updates and event emission are atomic, and messaging is used only for propagation, not correctness.”