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.