advanced
Pub/Sub
Асинхронные event pipeline: topics, subscriptions, acknowledgment deadline, retry policy, ordering keys и dead-letter topics.
Pub/Sub разделяет producers и consumers через topics, subscriptions, доставку at-least-once и ack deadline. В event-driven Node.js он сглаживает пики, рассылает уведомления и связывает Cloud Functions или Cloud Run workers без жёсткой связности.
import { PubSub } from '@google-cloud/pubsub';
const pubsub = new PubSub();
const topic = pubsub.topic('orders-created');
await topic.publishMessage({
json: { orderId: 'ord_123', total: 42.5 },
attributes: { schemaVersion: '1' },
});
| Параметр | Назначение | |----------|------------| | Ack deadline | Время на обработку до повторной доставки | | Dead-letter topic | «Ядовитые» сообщения после лимита попыток | | Ordering key | Последовательность внутри ключа, когда нужно | | Push vs pull | HTTP push на Cloud Run или pull в worker |
Consumer'ы идемпотентны — дубликаты возможны. Для долгих задач продлевайте ack deadline или используйте lease.
На интервью: at-least-once; dead-letter; стоимость ordering keys; auth push subscription; backpressure при отставании consumer.
Типовые ошибки: «exactly-once» без dedupe; ack до завершения работы; слишком много subscriber'ов на одну subscription; нет мониторинга oldest unacked age.
Компромисс — эластичная async-развязка против сложности retry, ordering и observability.
Чеклист:
- Идемпотентные consumer'ы с dedupe store или ключами.
- Dead-letter topics и алерты на глубину очереди.
- Ack deadline под реальное время handler'а.
- Мониторинг backlog и latency обработки.