Skip to content

1️⃣3️⃣ Messaging & Event Driven Systems - Overview

Learn event-driven architecture on Google Cloud Platform.


πŸ“‹ Table of Contents

  1. Introduction
  2. Messaging Patterns
  3. Services Comparison
  4. Decision Framework
  5. Architecture Patterns
  6. Cost Considerations
  7. Quick Reference

Introduction

GCP provides multiple services for building event-driven and message-based architectures.

Messaging Stack

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Event-Driven Architecture                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚
β”‚  β”‚  Pub/Sub β”‚  β”‚ Eventarc β”‚  β”‚  Cloud   β”‚        β”‚
β”‚  β”‚          β”‚  β”‚          β”‚  β”‚  Tasks   β”‚        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚  β”‚ Cloud    β”‚  β”‚ Workflowsβ”‚                       β”‚
β”‚  β”‚ Schedulerβ”‚  β”‚          β”‚                       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Messaging Patterns

1. Pub/Sub (Publish-Subscribe)

Asynchronous messaging service

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          Pub/Sub                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Publishers                         β”‚
β”‚      ↓                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                        β”‚
β”‚  β”‚  Topic  β”‚                        β”‚
β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                        β”‚
β”‚       ↓                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚  β”‚  Subscriptions      β”‚            β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€            β”‚
β”‚  β”‚ β€’ Push              β”‚            β”‚
β”‚  β”‚ β€’ Pull              β”‚            β”‚
β”‚  β”‚ β€’ BigQuery          β”‚            β”‚
β”‚  β”‚ β€’ Cloud Storage     β”‚            β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Features:                          β”‚
β”‚  β€’ At-least-once delivery           β”‚
β”‚  β€’ Message ordering                 β”‚
β”‚  β€’ Dead letter topics               β”‚
β”‚  β€’ Message filtering                β”‚
β”‚  β€’ Exactly-once delivery            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Characteristics: - Asynchronous messaging - Decoupled services - Scalable (millions of messages/sec) - Global availability - Message retention (7 days)

Use Cases: - Microservices communication - Event streaming - Data ingestion - Async processing - Fan-out patterns

2. Eventarc

Event routing and delivery

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          Eventarc                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Event Sources:                     β”‚
β”‚  β€’ Cloud Storage                    β”‚
β”‚  β€’ Pub/Sub                          β”‚
β”‚  β€’ Cloud Audit Logs                 β”‚
β”‚  β€’ Custom events                    β”‚
β”‚      ↓                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                        β”‚
β”‚  β”‚Eventarc β”‚                        β”‚
β”‚  β”‚ Routing β”‚                        β”‚
β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                        β”‚
β”‚       ↓                             β”‚
β”‚  Event Targets:                     β”‚
β”‚  β€’ Cloud Run                        β”‚
β”‚  β€’ Cloud Functions                  β”‚
β”‚  β€’ GKE                              β”‚
β”‚  β€’ Workflows                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Features:                          β”‚
β”‚  β€’ CloudEvents format               β”‚
β”‚  β€’ Event filtering                  β”‚
β”‚  β€’ Multiple sources                 β”‚
β”‚  β€’ Declarative routing              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Characteristics: - Event routing - CloudEvents standard - Multiple sources - Declarative configuration - Serverless integration

Use Cases: - Event-driven workflows - Cloud event handling - Serverless triggers - Multi-source events - Event orchestration

3. Cloud Tasks

Asynchronous task execution

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Cloud Tasks                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Task Queue                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ Task 1 β†’ HTTP Target        β”‚   β”‚
β”‚  β”‚ Task 2 β†’ HTTP Target        β”‚   β”‚
β”‚  β”‚ Task 3 β†’ HTTP Target        β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Features:                          β”‚
β”‚  β€’ Scheduled execution              β”‚
β”‚  β€’ Rate limiting                    β”‚
β”‚  β€’ Retry logic                      β”‚
β”‚  β€’ Task deduplication               β”‚
β”‚  β€’ HTTP/App Engine targets          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Queue Types:                       β”‚
β”‚  β€’ Push queues                      β”‚
β”‚  β€’ Pull queues (deprecated)         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Characteristics: - Task scheduling - Guaranteed execution - Rate control - Retry mechanism - HTTP-based

Use Cases: - Background jobs - Scheduled tasks - Rate-limited operations - Reliable task execution - Async API calls

4. Cloud Scheduler

Cron job service

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       Cloud Scheduler               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Cron Jobs:                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ */5 * * * * β†’ HTTP Target   β”‚   β”‚
β”‚  β”‚ 0 9 * * 1 β†’ Pub/Sub Topic   β”‚   β”‚
β”‚  β”‚ 0 0 * * * β†’ App Engine      β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Features:                          β”‚
β”‚  β€’ Cron syntax                      β”‚
β”‚  β€’ Multiple targets                 β”‚
β”‚  β€’ Retry configuration              β”‚
β”‚  β€’ Time zones                       β”‚
β”‚  β€’ Monitoring                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Targets:                           β”‚
β”‚  β€’ HTTP endpoints                   β”‚
β”‚  β€’ Pub/Sub topics                   β”‚
β”‚  β€’ App Engine                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Characteristics: - Scheduled jobs - Cron syntax - Multiple targets - Reliable execution - Fully managed

Use Cases: - Periodic tasks - Batch processing - Report generation - Data cleanup - Health checks

5. Workflows

Service orchestration

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Workflows                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Workflow Definition (YAML):        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ Step 1: Call API A          β”‚   β”‚
β”‚  β”‚    ↓                        β”‚   β”‚
β”‚  β”‚ Step 2: Process data        β”‚   β”‚
β”‚  β”‚    ↓                        β”‚   β”‚
β”‚  β”‚ Step 3: Call API B          β”‚   β”‚
β”‚  β”‚    ↓                        β”‚   β”‚
β”‚  β”‚ Step 4: Store result        β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Features:                          β”‚
β”‚  β€’ Service orchestration            β”‚
β”‚  β€’ Error handling                   β”‚
β”‚  β€’ Conditional logic                β”‚
β”‚  β€’ Parallel execution               β”‚
β”‚  β€’ Built-in connectors              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Characteristics: - Service orchestration - YAML-based workflows - Error handling - Conditional logic - Serverless

Use Cases: - Multi-step processes - Service orchestration - Business workflows - Data pipelines - API composition


Services Comparison

Feature Matrix

Feature Pub/Sub Eventarc Cloud Tasks Cloud Scheduler Workflows
Type Messaging Event routing Task queue Cron jobs Orchestration
Pattern Pub/Sub Event-driven Queue Scheduled Sequential
Delivery At-least-once At-least-once At-least-once At-least-once Exactly-once
Ordering Yes (optional) No Yes N/A Yes
Retry Yes Yes Yes Yes Yes
Targets Multiple Multiple HTTP HTTP/Pub/Sub APIs
Scheduling No No Yes Yes No
Max Retention 7 days N/A 30 days N/A 1 year

Decision Framework

Service Selection

What do you need?
    |
    β”œβ”€> Async messaging between services?
    |   └─> Pub/Sub
    |
    β”œβ”€> React to cloud events?
    |   └─> Eventarc
    |
    β”œβ”€> Execute tasks asynchronously?
    |   └─> Cloud Tasks
    |
    β”œβ”€> Schedule periodic jobs?
    |   └─> Cloud Scheduler
    |
    └─> Orchestrate multiple services?
        └─> Workflows

Use Case Matrix

Requirement Recommended Alternative
Microservices messaging Pub/Sub Eventarc
Event-driven architecture Eventarc Pub/Sub
Background jobs Cloud Tasks Pub/Sub
Scheduled tasks Cloud Scheduler Cloud Tasks
Service orchestration Workflows Cloud Tasks
Data streaming Pub/Sub Dataflow
File upload triggers Eventarc Cloud Functions
Rate-limited operations Cloud Tasks Pub/Sub

Architecture Patterns

Pattern 1: Event-Driven Microservices

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      Event-Driven Architecture      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Service A                Service B
    |                        |
    v                        v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Publish β”‚              β”‚Publish β”‚
β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜
    |                       |
    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            v
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚   Pub/Sub     β”‚
    β”‚    Topic      β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
            |
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”
    v       v       v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Service β”‚β”‚Service β”‚β”‚Service β”‚
β”‚   C    β”‚β”‚   D    β”‚β”‚   E    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pattern 2: Event Processing Pipeline

Cloud Storage
    |
    | (File uploaded)
    v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Eventarc        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Cloud Function     β”‚
β”‚  (Process file)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Pub/Sub         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    Dataflow         β”‚
β”‚  (Transform data)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    BigQuery         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pattern 3: Task Queue Pattern

API Request
    |
    v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Cloud Run         β”‚
β”‚   (API Service)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           |
    (Create task)
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Cloud Tasks       β”‚
β”‚   (Task Queue)      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           |
    (Execute task)
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Cloud Run         β”‚
β”‚   (Worker Service)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pattern 4: Scheduled Workflow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Cloud Scheduler    β”‚
β”‚  (Daily at 9 AM)    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Pub/Sub         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    Workflows        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ 1. Fetch data β”‚  β”‚
β”‚  β”‚ 2. Process    β”‚  β”‚
β”‚  β”‚ 3. Store      β”‚  β”‚
β”‚  β”‚ 4. Notify     β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pattern 5: Fan-Out/Fan-In

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Single Event      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Pub/Sub         β”‚
β”‚      Topic          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           |
    β”Œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”  (Fan-Out)
    v      v      v
β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”
β”‚Sub 1 β”‚β”‚Sub 2 β”‚β”‚Sub 3 β”‚
β””β”€β”€β”€β”¬β”€β”€β”˜β””β”€β”€β”€β”¬β”€β”€β”˜β””β”€β”€β”€β”¬β”€β”€β”˜
    |      |      |
    β””β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”˜  (Fan-In)
           v
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Aggregator        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Cost Considerations

Pricing Overview

Pub/Sub: - First 10 GB/month: Free - Additional data: $0.04 per GB - Message delivery: $0.04 per GB

Eventarc: - First 100,000 events/month: Free - Additional: $0.40 per million events

Cloud Tasks: - First 1 million operations/month: Free - Additional: $0.40 per million operations

Cloud Scheduler: - First 3 jobs/month: Free - Additional: $0.10 per job/month

Workflows: - First 5,000 steps/month: Free - Additional: $0.01 per 1,000 steps

Cost Optimization

# Use message filtering to reduce processing
gcloud pubsub subscriptions create filtered-sub \
  --topic=my-topic \
  --message-filter='attributes.priority="high"'

# Set appropriate message retention
gcloud pubsub topics update my-topic \
  --message-retention-duration=1h

# Use dead letter topics
gcloud pubsub subscriptions update my-sub \
  --dead-letter-topic=dead-letter-topic \
  --max-delivery-attempts=5

Quick Reference

Pub/Sub

# Create topic
gcloud pubsub topics create my-topic

# Create subscription
gcloud pubsub subscriptions create my-sub \
  --topic=my-topic

# Publish message
gcloud pubsub topics publish my-topic \
  --message="Hello World"

# Pull messages
gcloud pubsub subscriptions pull my-sub --auto-ack

Eventarc

# Create trigger
gcloud eventarc triggers create my-trigger \
  --location=us-central1 \
  --destination-run-service=my-service \
  --destination-run-region=us-central1 \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=my-bucket"

Cloud Tasks

# Create queue
gcloud tasks queues create my-queue

# Create task
gcloud tasks create-http-task \
  --queue=my-queue \
  --url=https://example.com/process \
  --method=POST \
  --body-content='{"data":"value"}'

Cloud Scheduler

# Create job
gcloud scheduler jobs create http my-job \
  --schedule="0 9 * * *" \
  --uri="https://example.com/endpoint" \
  --http-method=POST

Workflows

# workflow.yaml
main:
  steps:
    - step1:
        call: http.get
        args:
          url: https://api.example.com/data
        result: apiResponse
    - step2:
        return: ${apiResponse.body}
# Deploy workflow
gcloud workflows deploy my-workflow \
  --source=workflow.yaml \
  --location=us-central1

Best Practices

Pub/Sub

βœ… Use message attributes for filtering
βœ… Implement idempotent message processing
βœ… Set appropriate acknowledgment deadlines
βœ… Use dead letter topics
βœ… Enable message ordering when needed
βœ… Monitor subscription backlog
βœ… Use push subscriptions for low latency
βœ… Implement retry logic

Eventarc

βœ… Use CloudEvents format
βœ… Implement event filtering
βœ… Handle duplicate events
βœ… Monitor event delivery
βœ… Use appropriate event sources
βœ… Implement error handling

Cloud Tasks

βœ… Set appropriate task deadlines
βœ… Implement idempotent handlers
βœ… Use rate limiting
βœ… Monitor queue depth
βœ… Configure retry policies
βœ… Use task deduplication

Cloud Scheduler

βœ… Use appropriate time zones
βœ… Implement idempotent jobs
βœ… Monitor job execution
βœ… Set retry configuration
βœ… Use Pub/Sub for fan-out

Workflows

βœ… Implement error handling
βœ… Use retries appropriately
βœ… Keep workflows simple
βœ… Monitor execution
βœ… Use variables effectively
βœ… Implement timeouts


Next Steps

  1. Pub/Sub - Messaging service
  2. Eventarc - Event routing
  3. Cloud Tasks - Task queue
  4. Cloud Scheduler - Cron jobs
  5. Workflows - Service orchestration
  6. Best Practices - Production guidelines

Additional Resources


Last Updated: March 2026
Status: βœ… Complete