intermediate
SQS
Буферизуйте асинхронную работу через managed-очереди: visibility timeout, dead-letter queue, идемпотентные consumers и семантика retry.
SQS буферизует асинхронную работу между Node.js-продюсерами и консьюмерами. Standard queue — best-effort порядок и at-least-once доставка; FIFO — порядок и exactly-once обработка внутри message group.
После получения сообщения visibility timeout скрывает его от других. Продлевайте timeout для долгих задач или удаляйте при успехе. После `maxReceiveCount` неудачные сообщения уходят в dead-letter queue для разбора и replay.
| Паттерн | Деталь | |---------|--------| | Идемпотентный handler | Повтор того же сообщения должен быть безопасен | | Long polling | `WaitTimeSeconds` снижает пустые receive | | DLQ | «Ядовитые» сообщения без блокировки очереди |
Типично для event-driven API: HTTP-handler кладёт job в очередь, worker на Lambda или ECS обрабатывает, статус — в DynamoDB или Postgres.
На интервью: настройка visibility timeout, лимиты throughput FIFO, partial batch failures с Lambda и ключи идемпотентности в Node.js workers.
Типовые ошибки: visibility короче длительности job — дубликаты; нет DLQ; exactly-once на standard queue; неограниченная глубина очереди без алarmов.
Компромисс — простое durable decoupling против отсутствия pub-sub fan-out (добавляйте SNS) и необходимости следить за poison messages.
Чеклист:
- Visibility timeout под p99 времени обработки.
- DLQ и мониторинг ApproximateAgeOfOldestMessage.
- Идемпотентные consumers с хранилищем дедупликации.
- Long polling для экономии и latency.