An order-intake API calls a downstream fulfillment service synchronously for every order. During flash promotions the fulfillment service is overwhelmed, calls fail, and orders are permanently lost. The company requires that no accepted order is ever lost and that fulfillment capacity grows automatically with demand. Which combination of steps should a solutions architect take? (Select TWO.)
Choose TWO.
Guaranteeing no lost work between a producer and an overwhelmed consumer requires two things together: a durable buffer that owns each message until it is processed, and a consumer tier that scales on the buffer's depth.
The queue and the queue-driven Auto Scaling group are two halves of one design. SQS satisfies the no-loss requirement because a message survives consumer failure and reappears after the visibility timeout until a worker deletes it post-success. Scaling fulfillment on queue depth satisfies the elastic-capacity requirement without human action. SNS fails the no-loss requirement on its own: it is push-based, retains nothing for consumer-paced retrieval, and exhausts retries against a saturated endpoint. Client-side exponential backoff keeps the tight coupling; the order lives in volatile memory during retries, so the failure window is narrowed but not closed, and it adds latency to the intake path during exactly the traffic peak. Enlarging the database is vertical scaling aimed at an unstated bottleneck; the stem describes a coupling failure, not a database failure.
- Restate the two hard requirements: zero lost orders and automatic capacity growth.
- Map zero loss to durable buffering: only SQS holds an order independently of both the API and fulfillment being healthy.
- Map automatic growth to a scaling signal: queue depth is the direct measure of unprocessed fulfillment work.
- Eliminate SNS push and client retries because both leave a window where the only copy of an order can vanish.
- Eliminate database resizing because it neither buffers nor scales the failing tier.
Exam tip: No-lost-work plus elastic capacity is always the pair: SQS as the durable buffer, workers scaling on queue depth.
Scalable, Loosely Coupled Architectures: SQS, SNS, EventBridge, Step Functions — the lesson that teaches this.