Closed9

GCPのCloud TasksとPub/Subの使い分け

terurouterurou

GCPにはCloud TasksとPub/Subという似たサービスがある。

ドキュメントをざっと読んだ感じ、

  • Cloud Tasks : Webシステムとかで非同期タスクを作りたい場合に使う。
    • コストはめちゃ安い
    • ただしdead letterがない
  • Pub/Sub : IoTとかで大量メッセージを配信したい場合が想定されている。Job Queueでつかってもいい。
    • 小規模ならほぼ無料だが、従量課金の単位がデカいのでやはり大規模向きが想定されてる
    • dead letterがある

という使い分けでよさそう。

terurouterurou

プロダクトの分類を見たら良かったかも。

Cloud Taskは「デベロッパーツール」配下で「非同期でタスクを実行するためのタスク管理サービス。」

Cloud Tasks

Pub/Subは「データ分析」配下で「イベントの取り込みと配信のためのメッセージング サービス。」

Pub/Sub

terurouterurou

料金プランはCloud Tasksの方がめちゃくちゃシンプルだし、安い。中規模利用ぐらいまでなら無料枠で済むレベル。

Cloud Tasks の料金

一方のPub/Subはストレージやスループットで計算。かなり複雑。

Pub/Sub の料金

このあたりからも、単にタスクを非同期化したいだけならCloud Tasksを使っとけという話になる。

terurouterurou

Cloud Tasksにはdead letterがない。ちょっとこれは面倒だなあ

terurouterurou

Cloud Tasksは監視できるメトリクスがかなり少ない。下記の4つだけ。

  • api/request_count
  • queue/depth
  • queue/task_attempt_count
  • queue/task_attempt_delays

Google Cloud metrics

terurouterurou

Pub/Subの料金をちゃんと読んだ。

  • Topicへのメッセージ流入量
  • Subscriptionへのメッセージ流入量(紐づけているSubscriptionの分だけ増える)
  • TopicおよびSubscriptionでメッセージを保持するために必要なストレージ
  • Pub/Subから外部へのネットワーク転送料金

Job Queueとして考えると、

  • リクエストメッセージ受付用のTopic/Subscription 1本ずつ
  • Dead Letter用のTopic/Subscription 1本ずつ

があればよくて、正常に動作していればDead Letterの方にはメッセージはほぼ流れないはず。

そうなると、Job Queueの料金としては、メインのTopic/Subscriptionを通るデータ量がほとんど料金になってくると考えればよい。10GB以下は無料、以降は4TBごとに$40。

メッセージサイズが10KBぐらいだと仮定すると、500Kメッセージぐらいまでは無料で扱える。Job Queue用途で4TBを超えることはないだろうから、大規模になると$40かかるぐらいの気持ちで十分そう。

なお、蛇足だが、昔はGB単位で従量課金してたっぽい。

terurouterurou

Cloud Tasksにはdead letterがないので、「あくまでもトリガー」として考えて設計することになりそう。

  • 要求メッセージ自体の本体は別途DBに書き込んでおいて、Cloud Tasksにも要求が来たことを投げる
  • 処理が完了したメッセージには処理完了フラグを立てる
  • 処理に失敗したようなケースは、後からタイマートリガーからの起動で拾う

みたいな構成ならあり。

このスクラップは2024/06/21にクローズされました