LoginSignup
3
3

More than 1 year has passed since last update.

GCP: Cloud Pub/Sub

Last updated at Posted at 2020-10-24

Overview

  • 非同期メッセージングサービス
  • メッセージングミドルウェアやストリーミング分析パイプラインとして使える
  • Pub/Sub Lite: より安価なモード、低信頼性、ゾーナルかリージョナル、キャパシティを指定する
  • トピック: パブリッシャからメッセージが送られるリソース
  • サブスクリプション: 特定のトピックからアプリケーションにメッセージを送るリソース
  • メッセージ: データとアトリビュートの組み合わせ
  • メッセージアトリビュート: パブリッシャが定義するキーバリューペア
  • アクノリッジメント: サブスクライバから送られる受信成功の通知

fan-in / fan-out

fan

メッセージのフロー

flow

Architectural overview

  • GCPの全てのリージョンで動く
  • 複数のリージョンのパブリッシャが一つのトピックに書き込める
  • あるトピックのメッセージは複数のリージョンに保存される場合がある
  • サブスクライバは最も近いサーバーからデータを取得する
  • データプレーン: メッセージをパブリッシャとサブスクライバの間で動かす, フォワーダ
  • コントロールプレーン: パブリッシャとサブスクライバをサーバーに割り当てる, ルータ

forwarder_image

Pub/Sub Liteとの比較

  • コストが優先されるときはLite
  • 運用の負荷が増える
  • 可用性も下がる
  • レプリケーションが非同期になる

Cloud Tasksとの比較

  • Pub/Sub
    • パブリッシャとサブスクライバの分離
    • メッセージが配信されることを保証しない
    • メッセージの保持は7日まで
    • グローバル
    • 暗黙の呼び出し
  • Tasks
    • 明示的な呼び出し
    • パブリッシャが実行を制御する
    • パブリッシャがどこに配信するかを管理する
    • プロデューサー側が管理するときに有用
    • メッセージの保持は30日まで
    • リージョナル

Create a topic

  • デフォルトサブスクリプションを設定する
    • ID
    • プルタイプ
    • メッセージ保持時間
    • inactivityによる揮発
    • 10秒のacknowledgement期限
    • リトライポリシー
  • スキーマ: データフィールドのフォーマット
  • CMEKを使うかどうか

Creating schemas

AvroかProtocol Bufferに基づく

Publish messages

  • メッセージ: 以下を指定する
    • メッセージデータ
    • オーダリングキー: メッセージのソートを可能にする
    • アトリビュート
  • Pub/Subが以下を追加する
    • トピックでユニークなID
    • Pub/Subがメッセージを受信したタイムスタンプ
  • 複数のメッセージを送信するバッチ化が可能
    • スループットが上がる
    • レイテンシが下がる
  • gRPC + Gzipで圧縮できる
  • デフォルトでリトライするが、一部エラーではリトライしない
    • リトライを設定できる
    • 待ち時間の指数的バックオフなど
    • オーダリングキーがあるとき、設定を無視してリトライする
  • DEADLINE_EXCEEDED エラーはおおむね送信キャパシティを超えているとき

Subscription type

  • サブスクライバはトピックにacknowledgeを送る
    • 送る時間が ackDeadline を超えると送信に失敗したとみなされ、再配信される

Pull

  • サブスクライバがプルリクエストを送る
  • メッセージが多いとき
  • 効率性やスループットが必要な時
  • パブリックのHTTPSが使えないとき
  • サブスクリプションを増やすことでロードバランス
  • デリバリタイムを下げたいときは効率的ではない

pull_image

詳細

Push

  • Pub/Subサービスがサブスクライバにプッシュする
  • 複数のトピックを同じウェブフックで使いたいとき
  • App EngineやCloud Functions
  • Google Cloud環境が適していないとき
  • パブリックHTTPSエンドポイント
  • プッシュ先エンドポイントがロードバランス
  • SSL認証が必須

push_image

詳細

BigQuery

  • BigQueryテーブルに書き込む
  • メッセージボリュームが大きいとき
  • 直接BigQueryに書き込みたいとき
  • Pub/Subがロードバランス

bigquery_image

詳細

Audit, Security

  • Audit log
  • in-transit / at-rest で暗号化
  • メッセージストレージポリシーでリージョンを限定できる
  • Cloud Monitoring
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3