Черги й стрімінг
Google Pub/Sub
Google Pub/Sub це глобальний керований сервіс обміну повідомленнями з моделлю publish/subscribe, який масштабується автоматично.
Що це
Pub/Sub це керована служба Google Cloud, яка стала загальнодоступною у 2015 році. Ви створюєте topic, а потім одну чи кілька subscriptions, і кожна підписка отримує окрему копію кожного повідомлення.
Підписки бувають pull (споживач сам забирає), push (Pub/Sub викликає ваш HTTPS endpoint) та експорт напряму в BigQuery чи Cloud Storage. Повідомлення зберігаються доти, доки їх не підтвердять, максимум 7 днів за замовчуванням, а за потреби ще довше.
Сервіс не потребує керування кластером і самостійно масштабується. Для суворого порядку можна ввімкнути ordering keys, для відкидання помилкових повідомлень є dead-letter topics.
Коли брати
- Працюєте в Google Cloud і потрібна керована шина подій.
- Потрібно розсилати одну подію кільком незалежним споживачам.
- Хочете стрімити дані в BigQuery без власної інфраструктури.
- Потрібен глобальний сервіс із мінімальним адмініструванням.
Коли не варто
- Хочете уникнути прив'язки до Google Cloud.
- Потрібні потужні можливості перечитування й compaction, як у Kafka.
Ключові поняття
- Topic / subscription
- Топік приймає повідомлення, кожна підписка зберігає власну чергу копій для свого споживача.
- Pull / push
- Pull: споживач забирає повідомлення. Push: сервіс сам викликає HTTPS endpoint.
- Acknowledgement deadline
- Час на підтвердження: без ack повідомлення буде доставлено повторно.
- Ordering key
- Повідомлення з однаковим ключем доставляються у порядку публікації.
Приклад
Питання на співбесіді
1. У чому різниця між топіком і підпискою?
Топік це точка публікації. Підписка це окрема черга копій для конкретного споживача чи групи. Кілька підписок на один топік дають fan-out: кожна отримує всі повідомлення.
2. Яка гарантія доставки в Pub/Sub?
За замовчуванням at-least-once, тому можливі дублі й споживач має бути ідемпотентним. Є також режим exactly-once для pull підписок у межах регіону.
3. Коли обрати push, а коли pull?
Push підходить для serverless (Cloud Run, Functions), бо сервіс сам викликає endpoint. Pull краще для довгоживучих воркерів, які контролюють темп споживання.
Схожі технології
- Amazon SQSAmazon SQS це повністю керована черга повідомлень від AWS, яка масштабується автоматично й не потребує серверів.
- Apache KafkaKafka це розподілений журнал подій для потокової передачі даних із високою пропускною здатністю та тривалим зберіганням.
- Google CloudХмара Google з сильними даними, аналітикою, Kubernetes (GKE) і ML-сервісами.
- Google Cloud RunКерований запуск контейнерів з автомасштабуванням до нуля й оплатою за використання.
Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).