Черги й стрімінг

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
Повідомлення з однаковим ключем доставляються у порядку публікації.

Приклад

Топік із підпискою, публікація та отримання повідомлення в gcloud.

Питання на співбесіді

  1. 1. У чому різниця між топіком і підпискою?

    Топік це точка публікації. Підписка це окрема черга копій для конкретного споживача чи групи. Кілька підписок на один топік дають fan-out: кожна отримує всі повідомлення.

  2. 2. Яка гарантія доставки в Pub/Sub?

    За замовчуванням at-least-once, тому можливі дублі й споживач має бути ідемпотентним. Є також режим exactly-once для pull підписок у межах регіону.

  3. 3. Коли обрати push, а коли pull?

    Push підходить для serverless (Cloud Run, Functions), бо сервіс сам викликає endpoint. Pull краще для довгоживучих воркерів, які контролюють темп споживання.

Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).

Розділи платформи