System Design: Scalable, Highly Available Inventory Management
Context
Design an inventory management system for a high-traffic e-commerce platform that tracks stock across multiple warehouses and supports real-time purchasing flows. The system must remain correct under high concurrency and flash-sale spikes.
Functional Requirements
-
Track inventory by product across multiple warehouses.
-
Operations (all idempotent):
-
Reserve: hold stock for an order with expiry (TTL).
-
Release: free a reservation (manual or TTL expiry).
-
Purchase: convert a reservation to a committed order and decrement available stock.
-
Prevent overselling under concurrent requests.
-
Emit order/inventory events with at-least-once delivery.
-
Read endpoints:
-
Get product availability (global total and per-warehouse breakdown).
Non-Functional Requirements
-
Flash-sale workload: ~50k RPS reads, ~5k RPS writes.
-
High availability and horizontal scalability.
-
Idempotent APIs; at-least-once events; exactly-once semantics at service boundaries where feasible.
Specify
-
Overall architecture (services, databases, caches, message buses).
-
Data model (items, warehouses, reservations, versioning).
-
Consistency model (strong vs eventual) with justification.
-
Concurrency control and race-condition avoidance strategies (optimistic concurrency, conditional updates, idempotency keys, selective locks/quorum if needed).
-
Scaling strategies (read replicas, sharding, write queues, CQRS).
-
Cache design and invalidation.
-
Handling of partial failures and retries.
-
Exactly-once semantics at boundaries.
-
Backpressure and rate limiting.
-
Observability (metrics, tracing).
-
Disaster recovery and multi-region considerations.