putcho01

Back

TABLE OF CONTENTS

Google Cloud 非同期処理サービスの比較Blur image

はじめに#

Google Cloud を利用して非同期処理を設計する際の主要なサービスの特徴・用途・ベストプラクティスなどを調べてまとめる。

対象サービス一覧#

サービスカテゴリ一言説明
Cloud Pub/Subメッセージング疎結合なメッセージブローカー(Fan-out型)
Cloud Tasksタスクキュー特定エンドポイントへの明示的なタスク配信
Cloud Schedulerジョブスケジューラcronジョブ(定期実行)
Eventarc StandardイベントルーティングGCPサービスのイベントを宛先にルーティング
Eventarc Advancedイベントバス複雑なイベント基盤(バス型)
Cloud Workflowsオーケストレーション複数サービスの順序実行・状態管理
Cloud Run Jobsコンテナジョブ実行して終了するrun-to-completionコンテナジョブ
Dataflowデータパイプラインバッチ・ストリーミングの大規模データ処理パイプライン

1. 各サービスの詳細#

Cloud Pub/Sub#

概要

グローバルスケールの非同期メッセージングサービス。パブリッシャーはサブスクライバーを知る必要がなく、複数のサブスクライバーが同じメッセージを受信できる 「暗黙的呼び出し」 モデル。

特徴

  • 配信保証: At-least-once(少なくとも1回)
  • メッセージ保持: 最大31日
  • スループット: 上限なし(グローバル)
  • メッセージサイズ: 最大10MB
  • 順序付き配信: Ordering Keyで対応可能
  • Push / Pull 両方対応
  • バッチインサート対応
  • 複数サブスクライバー(1トピックに複数サブスクリプション)に対応

主な用途

  • リアルタイムイベント処理・ストリーミング
  • マイクロサービス間の疎結合な通信
  • ログ集約・分析パイプライン
  • データ変換・ETL
  • IoTデータ収集

制限・注意点

  • サブスクライバーを指定できない(送信先を制御したい場合は不向き)
  • 個別タスクの管理・キャンセルは不可
  • デデュープ(重複排除)は非対応

公式ドキュメント: https://docs.cloud.google.com/pubsub/docs/overview

Pub/Sub バッチメッセージング・大規模スパイク対応#

Pub/Subには、高スループットと大規模スパイクに対応するための複数の機構が用意されている。Sansanが公開している事例(後述)でも、直列バッチ処理をPub/Subで並列化することで大幅な時間短縮を実現している。


① Publisher-side バッチング(送信側まとめ送り)

クライアントライブラリはデフォルトで複数メッセージを1バッチにまとめて送信する。スループット向上とコスト削減が目的。

設定パラメータ説明デフォルト
elementCountThresholdバッチに含めるメッセージ数の上限100件
requestByteThresholdバッチのバイト数上限1,000,000 bytes(1MB)
delayThresholdバッチ送信を待つ最大時間1ms

公式: https://docs.cloud.google.com/pubsub/docs/publish-best-practices


② Publisher-side フロー制御(送信側過負荷防止)

パブリッシャー自身がスパイク時にメモリ・CPU・ネットワークを圧迫しないよう、送信中リクエスト数を制限する。

設定パラメータ説明
MaxOutstandingMessages未応答のまま保持できるメッセージ数の上限(デフォルト: 1,000)
MaxOutstandingBytes未応答メッセージの合計バイト上限(デフォルト: 無制限)
LimitExceededBehavior上限超過時の挙動: Block(待機)/ Ignore(続行)/ SignalError(エラー)

公式: https://docs.cloud.google.com/pubsub/docs/flow-control-messages


③ Subscriber-side フロー制御(受信側過負荷防止・スパイク吸収)

サブスクライバーが処理しきれないスパイクが来た際に、受信レートを自動的に絞ってバックプレッシャーをかける機構。コストを増やさずにスパイクを平滑化できる。

設定パラメータ説明
MaxOutstandingElementCount未ack のメッセージ数上限。超えると新規受信を一時停止(デフォルト: 1,000)
MaxOutstandingBytes未ack メッセージの合計バイト上限(デフォルト: 100MiB)

公式: https://docs.cloud.google.com/pubsub/docs/flow-control
公式: https://docs.cloud.google.com/pubsub/docs/handle-spikes


④ 並列度制御(Concurrency Control)

Pull サブスクライバーのストリーム数・スレッド数を設定して処理並列度を上げる。

設定説明
parallelPullCount(Java)/ numGoroutines(Go)複数の StreamingPull ストリームを開いてスループットを向上。1ストリームの上限は10MBps。
MaxConcurrencyOption同時に処理するメッセージハンドラの最大数

公式: https://docs.cloud.google.com/pubsub/docs/concurrency-control


⑤ Pub/Subによるバッチ直列処理の並列化パターン(Sansanの事例)

直列で実行していた重いバッチ処理を、1件1メッセージとしてPub/Subにパブリッシュし、複数のサブスクライバーが並列処理するパターン。処理件数が多いほど効果が大きい。

sequenceDiagram
    participant B as バッチトリガー<br/>(Scheduler等)
    participant P as Publisher
    participant T as Pub/Sub Topic
    participant W1 as Worker 1<br/>(Subscriber)
    participant W2 as Worker 2<br/>(Subscriber)
    participant WN as Worker N<br/>(Subscriber)
    participant DB as DB / Storage

    B->>P: バッチ起動
    loop 処理対象レコード分
        P->>T: publish(record_id)
    end
    Note over T: メッセージがキューとして機能
    par 並列処理(スパイク時もフロー制御で吸収)
        T-->>W1: メッセージ配信
        T-->>W2: メッセージ配信
        T-->>WN: メッセージ配信
    end
    W1->>DB: 処理・書き込み
    W2->>DB: 処理・書き込み
    WN->>DB: 処理・書き込み
    W1-->>T: ack
    W2-->>T: ack
    WN-->>T: ack
mermaid

参考: 時間のかかっているバッチ処理をCloud Pub/Subで改善する話(Sansan Tech)


⑥ スパイク時の推奨対応フロー

flowchart TD
    A[大規模スパイク発生] --> B{一時的なスパイク?}
    B -->|Yes| C[Subscriber-side フロー制御で吸収\nMaxOutstandingMessages / Bytes を調整]
    B -->|No / 継続的増大| D[フロー制御 + Subscriber オートスケール未ack メッセージ数をメトリクスにスケール]
    C --> E[処理バックログを保持期間内(最大31日)で消化]
    D --> F[インスタンス数増加でスループット向上]
    A --> G{Publisher 側が詰まる?}
    G -->|Yes| H[Publisher-side フロー制御\nMaxOutstandingMessages / Block設定]
    H --> I[DEADLINE_EXCEEDEDエラー抑制]
mermaid

Cloud Tasks#

概要

タスクキューを管理し、特定エンドポイントに非同期でHTTPリクエストを配信する 「明示的呼び出し」 モデル。送信側がいつ・どこに・どのように配信するかを完全にコントロールできる。

特徴

  • 配信保証: At-least-once
  • タスク保持: 最大30日
  • 最大配信レート: 500 qps/キュー(キュー単位で設定可能)
  • タスクサイズ: 最大1MB
  • 配信時刻の指定(スケジュール配信)可能
  • レート制限(流量制御・スロットリング)
  • 個別タスクの管理・キャンセル・再試行設定
  • タスク作成時のデデュープ(重複排除)対応
  • Pull配信は非対応(HTTPエンドポイントまたはApp Engineへの Push のみ)
  • 複数ハンドラー配信は非対応( 1タスク1エンドポイント

主な用途

  • バックグラウンドジョブ(画像処理、メール送信など)
  • 特定時刻に実行したい処理(24時間後にリマインダー送信など)
  • 外部APIへのレート制限付きコール
  • 大量タスクの流量制御(バースト防止)
  • 冪等性を持つ再試行が必要な処理

制限・注意点

  • 1プロジェクトあたり最大1,000キューまで(クォータ増加申請可能)
  • Pull配信不可(HTTPエンドポイントまたはApp Engineへの Push のみ)
  • 順序付き配信はベストエフォート(保証されない)(Pub/SubのOrdering Keyのような機能はない)
  • 最大処理時間: HTTPターゲット30分(デフォルト10分)、App Engine 自動スケーリング10分・手動スケーリング最大24時間

公式ドキュメント: https://docs.cloud.google.com/tasks/docs/dual-overview


Cloud Scheduler#

概要

完全マネージドなcronジョブサービス。定期的・固定スケジュールでHTTPエンドポイント、Pub/Subトピック、またはCloud Functionsを呼び出す。

特徴

  • cron式でスケジュール定義 (最小粒度: 1分)
  • 対象: HTTP/S エンドポイント・Pub/Subトピック・App Engine
  • 失敗時のリトライ設定可能(ただし次回実行まで再実行しないのがデフォルト)
  • 各ジョブ実行は同一内容(パラメータの個別制御なし)

主な用途

  • 定期バッチ処理(日次・週次レポートなど)
  • キャッシュ更新・データ同期
  • 定期的なデータベースクリーンアップ
  • ヘルスチェック・監視

制限・注意点

  • 最小粒度が1分のため、秒単位のスケジューリングは不可
  • 個別タスクの管理は不可(Cloud Schedulerはジョブ単位)
  • 動的なスケジューリング(ユーザーアクションに応じた実行タイミング変更)は不向き

公式ドキュメント: https://docs.cloud.google.com/scheduler/docs


Eventarc Standard#

概要

GCPサービスのイベントをトリガーとして、Cloud Run・Cloud Functions・Workflowsなどの宛先にルーティングするサービス。CloudEvents仕様に準拠。Pub/Subをトランスポート層として利用

特徴

  • 130以上のGCPサービスからイベントソースとして利用可能
  • イベントフィルタリングとルーティング
  • CloudEvents仕様準拠
  • 配信・リトライ・セキュリティ・認可を自動管理
  • 宛先: Cloud Run、Cloud Functions、Workflows、GKE
  • Pub/Subをトランスポート層として使用(Eventarc料金 + Pub/Sub料金)

主な用途

  • GCSバケットへのファイルアップロードをトリガーとした処理
  • Cloud Audit Logsに基づくリアクティブ処理
  • Firebase/Firestoreのデータ変更に応じた処理
  • マイクロサービス間のイベント駆動通信(GCPサービス中心)

制限・注意点

  • 順序保証なし(高速な変更は予期しない順序でイベントが届く可能性)
  • ハンドラーは冪等性を持つこと(At-least-once配信のため)
  • リージョナルサービス(マルチリージョン対応は一部制限)
  • 料金はEventarc + トランスポート層(Pub/Sub)の合算

公式ドキュメント: https://docs.cloud.google.com/eventarc/standard/docs/overview


Eventarc Advanced#

概要

Eventarc Standardの上位版。複雑なイベント基盤向けの中央バス(Event Bus)型アーキテクチャ。複数ソース・複数宛先・イベント変換・フィルタリングを一元管理できる。Pub/SubトピックやKafkaキューなど多数を管理している組織向け。

特徴

  • 中央バス(Event Bus)によるイベントの集中管理
  • 複数プロジェクト・複数チームを跨いだイベント管理
  • Enrollment(サブスクリプション)によるフィルタリング
  • パイプラインによるイベント変換(Transform)
  • 複数ソースから複数宛先へのファンアウト
  • ハイブリッド・マルチクラウドにも対応
  • 完全リージョナル(全トラフィック・データが同一リージョン内)

主な用途

  • 複数チーム・複数プロジェクトを跨ぐイベント基盤構築
  • IoTデータや大規模AIワークロードのイベントストリーミング
  • Pub/SubトピックやKafkaキューの統合・一元管理
  • マルチクラウド・オンプレミス連携

公式ドキュメント: https://docs.cloud.google.com/eventarc/advanced/docs/overview


Cloud Workflows#

概要

完全マネージドなオーケストレーションプラットフォーム。Cloud Run、Cloud Functions、Google Cloud API、外部HTTP APIなど複数のサービスを定義した順序で実行・組み合わせる。状態・リトライ・エラーハンドリングを一元管理でき、最大1年間の実行継続が可能。

特徴

  • サーバーレス(使用時のみ課金・アイドル時は無料)
  • YAML/JSON形式で定義
  • 最大実行継続期間: 1年
  • ステート保持・ポーリング・コールバック対応
  • 並列ステップ実行対応
  • エラーハンドリング・リトライロジックをワークフロー内に記述
  • 最大同時実行数: 10,000
  • Eventarcトリガーで起動可能(イベント駆動対応)
  • 100以上のGCPサービスに対してコネクタ提供

主な用途

  • 複数GCPサービスを組み合わせたビジネスロジック実行(例: OCR→BigQuery→通知)
  • 人間の承認ステップを含むワークフロー(コールバック利用)
  • ETLパイプライン
  • 複数APIのオーケストレーション
  • 長時間実行が必要な処理(最大1年)
  • マイクロサービスの依存関係を明示的に管理

制限・注意点

  • 独自のYAML/JSON構文の習得が必要
  • 最大同時実行数10,000(それ以上はCloud Composerを検討)
  • コードや依存ライブラリを持たないためセキュリティパッチ不要だが、複雑なロジックは可読性に注意

公式ドキュメント: https://docs.cloud.google.com/workflows/docs/overview


Cloud Run Jobs#

概要

処理を実行して終了する「run-to-completion」型のコンテナジョブ。Cloud Run Serviceがリクエストを待ち続けるのに対し、Jobsは処理が完了したら終了する。任意のコンテナを最大24時間実行でき、最大10,000タスクの並列実行(Array Job)にも対応。スケジュール実行・ワークフロー起動・手動実行のいずれも可能。

特徴

  • 処理完了で終了(HTTPリクエスト待機なし)
  • 最大タスク数: 10,000タスク(並列実行 / Array Job)
  • 最大実行時間: 24時間/タスク
  • タスクごとにリトライ回数を設定可能
  • 各タスクは CLOUD_RUN_TASK_INDEX で自身のインデックスを把握可能
  • コンテナ単位のため言語・フレームワーク非依存
  • スケジュール実行: Cloud Schedulerと連携
  • ワークフロー起動: WorkflowsのCloud Run Admin APIコネクタで実行可能
  • Eventarcトリガーによるイベント駆動実行も可能

主な用途

  • データ変換・ETLのバッチ処理
  • 大量ファイルの並列処理(例: GCSの1,000画像を並列リサイズ)
  • DBマイグレーション・定期クリーンアップなどの運用タスク
  • バッチML推論・モデルファインチューニング
  • レポート生成・定期的なデータエクスポート
  • スクリプトや CLIツールのコンテナ化

Dataflowとの違い

観点Cloud Run JobsDataflow
向いている処理汎用コンテナジョブ・中規模バッチ大規模データパイプライン(PB級)
プログラミングモデル任意(コンテナ内で自由)Apache Beam SDK(Java/Python/Go)
並列化Array Job(最大10,000タスク)自動分散・動的リバランス
ストリーミング処理
学習コスト低(既存コンテナをそのまま使用可)高(Beam SDKの習得が必要)
コスト(小規模)低(CPU/メモリの使用分のみ)高め(ワーカーVM起動コストあり)

制限・注意点

  • Cloudのカナリアデプロイは非対応(Cloud Run Serviceには対応)
  • ジョブ名は作成後に変更不可
  • タスク間での共有状態管理は自前で実装(Cloud Storageなどを利用)
  • 7日より古い実行詳細はコンソールから削除(ログはCloud Loggingに残る)

公式ドキュメント: https://docs.cloud.google.com/run/docs/create-jobs


Cloud Dataflow#

概要

Apache Beam をベースとした、フルマネージドのバッチ・ストリーミングデータパイプラインサービス。単一のプログラミングモデルでバッチとストリーミングの両方を記述できる。最大4,000ワーカーVMへの自動スケール、動的ワーク再分配、Exactly-once処理保証が特徴。大規模ETL・リアルタイム分析・ML推論パイプラインに適する。

特徴

  • バッチとストリーミングを統一モデル(Apache Beam)で記述
  • 配信保証: Exactly-once(他サービスはAt-least-once)
  • 最大4,000ワーカーVMへの自動スケール
  • 動的ワーク再分配(Autoscaling・動的リバランス)
  • 対応言語SDK: Java / Python / Go
  • ノーコードオプション: Job Builder UI(GCPコンソール)、事前構築テンプレート
  • Dataflow ML: ストリーム・バッチパイプラインへのML推論組み込み
  • 豊富なI/Oコネクタ(Pub/Sub、BigQuery、GCS、Kafka、Bigtable、Spanner等)
  • Apache FlinkやApache Sparkへの移行も可能(Beamパイプラインはランナー非依存)
  • VPC Service Controls・CMEK対応

主な用途

  • 大規模ETL(ペタバイト級のデータ変換・集計)
  • Pub/Sub → BigQuery のリアルタイムストリーミングパイプライン
  • ストリーミングMLパイプライン(リアルタイム推論・特徴量抽出)
  • ログ・センサーデータのリアルタイム分析
  • データウェアハウス(BigQuery)へのデータ投入
  • CDC(Change Data Capture)イベントの処理

Cloud Run Jobsとの違い

→ 上記「Cloud Run Jobs」セクションの比較表を参照。

制限・注意点

  • Apache Beam SDKの習得が必要(学習コストが高め)
  • ワーカーVM起動に5〜7分かかる場合がある(テンプレート使用時)
  • 小規模・単純なバッチであればCloud Run Jobsの方がコスト効率が高い
  • ストリーミングジョブは継続課金(アイドルでも費用発生)

公式ドキュメント: https://docs.cloud.google.com/dataflow/docs/overview


2. 比較表#

基本特性#

項目Pub/SubCloud TasksCloud SchedulerEventarc StdEventarc AdvWorkflowsCloud Run JobsDataflow
呼び出しモデル暗黙的明示的スケジュールイベント駆動イベント駆動オーケストレーション手動/定期/イベントパイプライン
複数宛先への配信
送信先の指定△(トリガー)△(パイプライン)
実行タイミング制御✅(遅延配信可)✅(定期)△(Scheduler連携)△(Scheduler連携)
フロー制御・レート制限△(Pull側で実装)✅(自動)
ステート管理✅(Beam State API)
デデュープ✅(Exactly-once)
ストリーミング処理
並列実行△(複数キュー)✅(parallel step)✅(最大10,000タスク)✅(最大4,000 VM)
順序保証✅(Ordering Key)❌(ベストエフォート)N/A✅(ウィンドウ処理)

配信・スループット#

項目Pub/SubCloud TasksCloud SchedulerEventarcWorkflowsCloud Run JobsDataflow
スループット上限なし(グローバル)500 qps/キューN/A(定期実行)高スループット最大10,000同時実行最大10,000タスク/実行最大4,000ワーカーVM
メッセージ/タスクサイズ10MB1MBN/A16KiB(超過は複数換算)N/Aコンテナ依存コンテナ依存
保持期間最大31日最大30日N/AN/A最大1年(実行継続)N/A(実行完了で終了)N/A
配信保証At-least-onceAt-least-onceAt-least-onceAt-least-onceAt-least-onceAt-least-once(リトライ設定可)Exactly-once
最大処理時間Push: 10分(ack deadline固定)/ Pull: modifyAckDeadlineで延長可HTTP: 30分(デフォルト10分)/ App Engine: 自動スケーリング10分・手動スケーリング24時間設定可宛先依存1年24時間/タスク制限なし(継続ジョブ)

料金(参考)#

サービス課金モデル無料枠
Pub/Subメッセージデータ量(GB単位)月10GBまで無料
Cloud Tasksタスク数(100万件ごと)月100万タスク無料
Cloud Schedulerジョブ数月3ジョブ無料
Eventarc Standardイベント数月250万イベント無料(Standard)
Eventarc Advancedイベント数無料枠なし
Workflowsステップ数月5,000ステップ無料
Cloud Run JobsvCPU秒・メモリ秒・リクエスト数月2百万リクエスト・180,000 vCPU秒・360,000 GiB秒
DataflowワーカーvCPU秒・メモリ秒・Shuffle秒無料枠なし($300クレジット対象)

3. Cloud Tasks vs Pub/Sub 詳細比較(公式ドキュメントより)#

公式: https://docs.cloud.google.com/tasks/docs/comp-pub-sub

機能Cloud TasksCloud Pub/Sub
Pushによるwebhook配信
At-least-once配信保証
リトライ設定
タスク作成時のデデュープ
スケジュール配信(指定時刻)
順序付き配信❌(ベストエフォート)✅(Ordering Key使用時)
明示的なレート制御Pull側でフロー制御実装
Pull配信(APIポーリング)
バッチインサート
複数ハンドラーへの配信
メッセージ/タスク保持期間30日最大31日
最大サイズ1MB10MB
最大配信レート500 qps/キュー上限なし
地理的可用性リージョナルグローバル
Push処理の最大時間30分(HTTP、デフォルト10分)/ 自動スケーリング10分・手動スケーリング24時間(App Engine)10分(Push、ack deadline固定)
キュー/サブスクリプション数1,000/プロジェクト10,000/プロジェクト

4. Cloud Tasks vs Cloud Scheduler 詳細比較(公式ドキュメントより)#

公式: https://docs.cloud.google.com/tasks/docs/comp-tasks-sched

機能Cloud SchedulerCloud Tasks
トリガー方式固定間隔(cron式)タスクオブジェクトの設定に基づく
レート設定固定周期(最小1分)流入量に応じて動的(最大500 dispatch/秒)
タスクの識別ジョブ単位(個別識別不可)各タスクが一意名を持ち個別管理可能
失敗時の挙動ログに記録・次回実行まで待機(デフォルト)成功するまで自動リトライ

5. シーケンス図#

Pub/Sub(Fan-out型)#

パブリッシャーはコンシューマーを知らない。1メッセージを複数サービスが同時に受信する。

sequenceDiagram
    participant P as Publisher
    participant T as Topic
    participant A as Consumer A
    participant B as Consumer B
    participant C as Consumer C

    P->>T: publish(message)
    T-->>A: push (Subscription A)
    T-->>B: push (Subscription B)
    T-->>C: push (Subscription C)
    A-->>T: ack
    B-->>T: ack
    C-->>T: ack
mermaid

Cloud Tasks(Point-to-Point型)#

送信者が宛先・タイミング・レートを完全に制御する。1タスク1エンドポイント。

sequenceDiagram
    participant C as Caller
    participant Q as Task Queue
    participant E as Endpoint

    C->>Q: create task<br/>(url, payload, scheduleTime)
    Note over Q: レート制御・遅延・デデュープ
    Q->>E: HTTP request
    alt 成功
        E-->>Q: 200 OK (ack)
    else 失敗
        E-->>Q: 5xx / timeout
        Note over Q: 設定に従いリトライ<br/>(バックオフ・上限回数)
    end
mermaid

Cloud Scheduler(定期実行型)#

Cron式で定義したスケジュールで固定的に実行する。

sequenceDiagram
    participant S as Cloud Scheduler
    participant T as Target<br/>(HTTP / Pub/Sub)

    loop 定期実行(例: 毎日0時)
        S->>T: invoke
        alt 成功
            T-->>S: 200 OK
        else 失敗
            T-->>S: error
            Note over S: ログ記録<br/>(次回スケジュールまで待機)
        end
    end
mermaid

Eventarc Standard(イベント駆動型)#

GCPサービスのイベントをトリガーとして、フィルタリングして宛先にルーティングする。

sequenceDiagram
    participant G as GCS / Audit Logs / etc.
    participant P as Pub/Sub<br/>(トランスポート層)
    participant E as Eventarc<br/>(フィルタ・ルーティング)
    participant R as Cloud Run /<br/>Cloud Functions /<br/>Workflows

    G->>P: イベント発生
    P->>E: メッセージ配信
    Note over E: トリガー条件でフィルタリング
    E->>R: CloudEvents形式でルーティング
    R-->>E: ack
mermaid

Eventarc Advanced(イベントバス型)#

複数ソースからのイベントを中央バスで集約し、変換・フィルタリングして複数宛先に配信する。

sequenceDiagram
    participant PA as Publisher A
    participant PB as Publisher B
    participant PC as Publisher C
    participant BUS as Event Bus
    participant PIPE as Pipeline<br/>(変換・フィルタ)
    participant D1 as 宛先 A
    participant D2 as 宛先 B

    PA->>BUS: publish event
    PB->>BUS: publish event
    PC->>BUS: publish event
    Note over BUS: Enrollment(サブスクリプション)で照合
    BUS->>PIPE: マッチしたイベント
    Note over PIPE: フィルタ・スキーマ変換
    PIPE->>D1: ルーティング
    PIPE->>D2: ルーティング
mermaid

Cloud Workflows(オーケストレーション型)#

複数のサービスをステップとして定義し、状態・エラーハンドリング・リトライを一元管理する。

sequenceDiagram
    participant TR as Trigger<br/>(Scheduler / Eventarc / HTTP)
    participant WF as Workflows
    participant CR as Cloud Run
    participant BQ as BigQuery
    participant CB as Callback<br/>(人間承認)
    participant NT as 通知サービス

    TR->>WF: 実行開始
    WF->>CR: Step1: API呼び出し
    CR-->>WF: レスポンス
    WF->>BQ: Step2: INSERT
    BQ-->>WF: 完了
    WF->>CB: Step3: 承認待ち(コールバック)
    Note over WF,CB: 最大1年間待機可能
    CB-->>WF: 承認イベント受信
    par Step4: 並列実行
        WF->>CR: 並列タスク A
        WF->>BQ: 並列タスク B
    end
    WF->>NT: Step5: 完了通知
    alt エラー発生時
        WF->>NT: エラー通知・ロールバック処理
    end
mermaid

Cloud Run Jobs(run-to-completion型)#

処理を実行して終了するコンテナジョブ。Array Jobで複数タスクを並列実行できる。

sequenceDiagram
    participant TR as Trigger<br/>(Scheduler / Workflows / 手動)
    participant CR as Cloud Run Jobs
    participant T0 as Task 0
    participant T1 as Task 1
    participant TN as Task N
    participant GCS as Cloud Storage

    TR->>CR: 実行開始(タスク数・パラメータ指定)
    Note over CR: Array Job: N タスクを並列起動
    par 並列実行
        CR->>T0: CLOUD_RUN_TASK_INDEX=0
        CR->>T1: CLOUD_RUN_TASK_INDEX=1
        CR->>TN: CLOUD_RUN_TASK_INDEX=N
    end
    T0->>GCS: 処理結果を書き込み
    T1->>GCS: 処理結果を書き込み
    TN->>GCS: 処理結果を書き込み
    T0-->>CR: 完了(exit 0)
    T1-->>CR: 完了(exit 0)
    TN-->>CR: 完了(exit 0)
    Note over CR: 全タスク完了でジョブ成功
    alt タスク失敗時
        CR->>T0: リトライ(設定回数まで)
    end
mermaid

Cloud Dataflow(パイプライン型)#

Apache Beamパイプラインを分散実行。バッチとストリーミングを同一モデルで処理。

sequenceDiagram
    participant SRC as Source<br/>(Pub/Sub / GCS / BigQuery)
    participant DF as Dataflow<br/>(ワーカーVM群)
    participant W1 as Worker 1
    participant W2 as Worker 2
    participant WN as Worker N
    participant SNK as Sink<br/>(BigQuery / GCS / Bigtable)

    SRC->>DF: データ投入
    Note over DF: パイプライン定義に従い<br/>ワークを自動シャーディング
    par 並列処理(自動リバランス)
        DF->>W1: PTransform(変換・集計)
        DF->>W2: PTransform(変換・集計)
        DF->>WN: PTransform(変換・集計)
    end
    W1-->>DF: 処理済みデータ
    W2-->>DF: 処理済みデータ
    WN-->>DF: 処理済みデータ
    Note over DF: Shuffle / GroupByKey / Windowing
    DF->>SNK: 書き込み(Exactly-once)
    Note over DF: ストリーミングの場合は継続実行<br/>バッチの場合はジョブ完了で終了
mermaid

6. 運用のしやすさ#

観点Pub/SubCloud TasksCloud SchedulerEventarcWorkflowsCloud Run JobsDataflow
可観測性Cloud Monitoring / Logging統合Cloud Monitoring統合・個別タスク管理可Cloud LoggingCloud Monitoring / LoggingCloud Logging・実行ログ詳細ありCloud Logging・直近1,000実行をコンソールで確認専用UI(ジョブグラフ・コスト推定・Straggler検出)
デバッグサブスクリプションのメッセージ確認が必要キューのタスクを個別に確認・削除可能実行ログ確認Cloud Loggingで確認実行ステップ単位でデバッグ可タスクインデックス単位でログ確認可データサンプリング・Dataflow Insights
リトライ管理サブスクリプション設定で制御キュー単位で上限・バックオフ・回数設定可手動 or 設定宛先サービス依存ワークフロー定義内に記述タスク単位でリトライ回数設定可パイプライン定義内に記述
冪等性の必要性必要(At-least-once)必要(At-least-once)推奨必要(At-least-once)ステップ設計次第必要(リトライ時に再実行)不要(Exactly-once保証)
運用コスト感低(フルマネージド)低(フルマネージド)最低低(Std)/ 中(Adv)中(定義管理が必要)低〜中(コンテナ管理が必要)高(Beamパイプライン設計・管理が必要)
スケール管理不要(自動)不要(キューの設定のみ)不要不要(自動)不要(上限10,000同時実行)不要(タスク数を指定)不要(自動スケール・最大4,000 VM)
Terraform対応
CMEK対応
VPC Service Controls

7. 非機能要件#

可用性・信頼性#

サービスSLA配信保証地理的可用性
Pub/Sub99.95%At-least-once(Ordering Keyで順序保証)グローバル(マルチリージョン)
Cloud Tasks99.9%At-least-onceリージョナル
Cloud Scheduler99.9%At-least-once(リトライ設定可)リージョナル
Eventarc Standard99.9%At-least-onceリージョナル(一部マルチリージョン制限あり)
Eventarc Advanced99.9%At-least-onceリージョナル
Workflows99.99%At-least-once(ステップ実行)リージョナル
Cloud Run Jobs99.9%(Cloud Run SLA)At-least-once(リトライ設定可)リージョナル
Dataflow99.9%Exactly-onceリージョナル

スケーラビリティ#

サービススループット上限自動スケール
Pub/Sub事実上無制限(グローバル)
Cloud Tasks500 qps/キュー(複数キューで拡張可)
Cloud SchedulerN/A(定期実行)
Eventarc StandardPub/Sub依存(事実上無制限)
Eventarc Advanced高スループット
Workflows最大10,000同時実行
Cloud Run Jobs最大10,000タスク/実行✅(タスク数で指定)
Dataflow最大4,000ワーカーVM・PB級データ処理✅(動的リバランス)

8. ユースケース別の選択ガイド#

「どれを使うか」の判断フロー#

処理を非同期化したい

├── 定期的・固定スケジュールで実行したい
   └── Cloud Scheduler

├── GCPサービスのイベント(GCS更新・DBの変更など)に反応したい
   ├── シンプルなルーティング Eventarc Standard
   └── 複数ソース・複数宛先・イベント変換が必要 Eventarc Advanced

├── 複数のサービスを順番に組み合わせて実行したい(状態・リトライ管理も)
   └── Cloud Workflows

├── 1つのメッセージを複数のサービスに並行配信したい
   └── Cloud Pub/Sub(Fan-out)

├── 特定エンドポイントへの配信でレート制御・スケジュール・リトライを細かく管理したい
   └── Cloud Tasks

├── 大規模なデータパイプライン・ETL・ストリーミング処理
   ├── Pub/Sub BigQuery などシンプルなデータ移動 Dataflow テンプレート
   └── 複雑な変換・集計・ストリーム分析 Dataflow (Apache Beam)

└── コンテナで任意の処理を実行して終了させたい(バッチ・スクリプト)
    ├── 小〜中規模・汎用バッチ Cloud Run Jobs
    └── PB級・高スループット・Exactly-once必須 Dataflow
bash

よくある構成パターン#

パターン推奨構成
画像アップロード後の変換処理GCS → Eventarc Standard → Cloud Run
ユーザーアクション後の非同期処理(24時間後にリマインダー)アプリ → Cloud Tasks(scheduleTime指定) → Cloud Run
夜間バッチ処理(汎用スクリプト)Cloud Scheduler → Cloud Run Jobs
受注→処理→通知の多ステップフローPub/Sub → Workflows(Eventarcトリガー)
大量ログ・イベントのリアルタイム集約Pub/Sub → Dataflow → BigQuery
大量ファイルの並列バッチ変換Cloud Scheduler → Cloud Run Jobs(Array Job)
複数チームが共有するイベント基盤Eventarc Advanced(Event Bus)
人間の承認ステップが必要なワークフローCloud Workflows(コールバック)
MLバッチ推論Cloud Run Jobs(GPU対応) or Dataflow ML
CDC(変更データキャプチャ)のストリーミング処理Dataflow(ストリーミングパイプライン)

Cloud Run Jobs vs Dataflow の選択基準#

状況選択理由
既存Dockerコンテナをバッチ実行したいCloud Run Jobsそのままコンテナを実行できる
データ量が数GB以下・中規模バッチCloud Run Jobs低コスト・シンプル
Apache BeamパイプラインがすでにあるPB級Dataflow大規模分散処理に最適
ストリーミング処理(Pub/Sub → BQ等)Dataflowストリーミングサポート
Exactly-once処理が必須Dataflow唯一Exactly-once保証あり
言語・フレームワークを問わず自由に実装したいCloud Run Jobs任意コンテナが動く
独自の並列ロジックをタスクインデックスで制御したいCloud Run JobsCLOUD_RUN_TASK_INDEX で制御

9. 組み合わせ利用#

これらのサービスは排他的ではなく、組み合わせて使用できる。

  • Cloud Scheduler + Pub/Sub: 定期的にPub/Subにメッセージをパブリッシュし、複数のコンシューマーに配信
  • Cloud Scheduler + Cloud Run Jobs: cron起動で任意のコンテナバッチを定期実行
  • Cloud Scheduler + Workflows: 定期的にWorkflowsを起動してオーケストレーション実行
  • Cloud Tasks + Workflows: Cloud TasksでWorkflowsの実行をバッファリング・レート制御(公式チュートリアル
  • Eventarc + Workflows: イベント(例: GCS更新)をトリガーにWorkflowsを起動
  • Eventarc + Cloud Run Jobs: GCSファイル追加などのイベントでCloud Run Jobsを起動
  • Workflows + Cloud Run Jobs: Workflowsのステップとして Cloud Run Jobsを実行(公式チュートリアル
  • Pub/Sub + Dataflow: Pub/Subをソースとしてリアルタイムストリーミングパイプラインを構築
  • Pub/Sub + Eventarc: Pub/Subをイベントソースとして、Eventarcでルーティング

参考リンク#

公式ドキュメント#

参考記事#

profile

putcho01

サーバーサイドエンジニア。 GoとGCPをよく触っています。

Google Cloud 非同期処理サービスの比較
Author Nagattyo
Published at 2026年5月15日