01全体像 — 「やってほしい」と「起きた」を分ける
Cloud Tasks は「この Worker にこの時刻で HTTP 処理してほしい」という明示的な依頼。Pub/Sub は「注文が成立した」という事実を複数チームに独立配信する。
Cloud Tasks は指定した HTTP 処理へ、Pub/Sub はトピックから複数の購読者へ配信する。Tasksは仕事の依頼、Pub/Subは事実の通知
- 送信側:処理先を知る — Cloud Tasks
- 送信側:受け手を増やしたい — Pub/Sub
- 受け手:冪等に処理する — 両方で必要
02Cloud Tasks が向く条件
キュー単位でレートと同時ディスパッチ数を制御できる。外部 API を守りながら再試行し、必要なら将来時刻に実行する用途に向く。
指定時刻、流量制御、1対1配信、リトライを表現する。- 指定時刻:必要 — Cloud Tasks
- 外部APIの流量制限:必要 — Cloud Tasks
- 失敗時:再試行設定を確認 — タスクの重複も想定
03Pub/Sub が向く条件
publisher はイベントを出すだけで、在庫・通知・分析などの subscriber を後から足せる。少なくとも一度の配信を前提に、各 subscriber は冪等にする。
購入イベントが決済・在庫・分析へ独立配信される。- ファンアウト:複数サービスへ — Pub/Sub
- 購読者追加:送信側を変えない — Pub/Sub
- 処理失敗:DLQと冪等性を設計 — subscriberごとに確認
結論
- Cloud Tasks は制御された仕事の依頼、Pub/Sub は拡張可能な事実の配信。
- 比較表ではなく、送信側が受け手を知るべきかで最初に分ける。
- 失敗・重複に備え、受け手の処理は冪等に設計する。