intermediate
Очереди
Развязывайте producers и consumers: очереди, retry policy, dead-letter, идемпотентность, visibility timeout и backpressure.
Cloud queues (SQS, Pub/Sub subscriptions, Azure Service Bus) разделяют producers и consumers для email, обработки изображений, webhooks и outbox patterns. Сообщения at-least-once — consumers должны быть idempotent и учитывать visibility timeout, retries и dead-letter queues (DLQ).
async function handleJob(payload: JobPayload) {
const key = payload.idempotencyKey;
if (await store.alreadyProcessed(key)) return;
await sendEmail(payload);
await store.markProcessed(key);
}
| Параметр | Риск при ошибке | |----------|-----------------| | Visibility timeout | Duplicate processing или stuck messages | | Max receive count | Poison messages не попадают в DLQ | | Batch size | Partial batch failure | | FIFO ordering | Лимиты throughput per group |
Node workers poll или push (Lambda, Cloud Functions). Correlation IDs от enqueue до process. DLQ depth — продуктовый сигнал, не только infra noise.
На интервью: at-least-once vs миф exactly-once, idempotency keys, replay из DLQ, backpressure при отставании consumers и queue vs event bus.
Типовые ошибки: неидемпотентные side effects; visibility короче max job time; нет алертов на рост DLQ; огромные JSON вместо pointer на S3.
Компромисс — resilient async scaling против сложности distributed debugging и семантики duplicate delivery.
Чеклист:
- Idempotent handlers с dedupe store.
- Visibility под p99 длительности job.
- Poison messages в DLQ с алертами.
- Маленькие messages; blobs — в object storage.