Pub/Sub とは

Pub/Sub は、イベントを処理するサービスとイベントを生成するサービスを切り離す非同期メッセージング サービスです。

メッセージング指向のミドルウェア(ストリーミング分析パイプラインにイベントの取り込みと配信を行う)として、Pub/Sub を使用できます。

Pub/Sub では、永続的なメッセージ ストレージとリアルタイム メッセージ配信を提供し、高可用性と規模を拡大しても一貫性のあるパフォーマンスを実現します。Pub/Sub サーバーは、世界中のすべての Google Cloud リージョンで稼働しています。

すぐに利用を開始するには、Cloud Console を使用したクイックスタートをお試しください。より包括的な情報については、Pub/Sub システム機能の構築をご覧ください。

基本コンセプト

  • トピック: パブリッシャーがメッセージを送信する名前付きのリソース。
  • サブスクリプション: 特定の単一のトピックからサブスクライブするアプリケーションに配信されるメッセージのストリームを表す、名前付きのリソース。サブスクリプションとメッセージ配信体系の詳細については、サブスクライバー ガイドをご覧ください。
  • メッセージ: パブリッシャーがトピックに送信し、最終的にはサブスクライバーに配信されるデータ。データと属性を組み合わせることもできます。
  • メッセージ属性: パブリッシャーがメッセージに対して定義できる Key-Value ペア。たとえば、キー iana.org/language_tag、値 en をメッセージに付加すれば、英語圏のサブスクライバー向けメッセージとして識別できるようになります。

パブリッシャーとサブスクライバーの関係

パブリッシャー アプリケーションによって、メッセージが作成され、トピックに送信されます。サブスクライバー アプリケーションによってトピックに対するサブスクリプションが作成されて、メッセージが受信されます。 通信は 1 対多(ファンアウト)、多対 1(ファンイン)、多対多にできます。

Pub/Sub メッセージ フロー

Pub/Sub システムのコンポーネントの概要とコンポーネント間のメッセージの流れを次に示します。

  1. Pub/Sub サービスでは、パブリッシャー アプリケーションによってトピックが作成され、そのトピックにメッセージが送信されます。メッセージには、ペイロードと、そのペイロードのコンテンツを説明するオプションの属性が含まれています。
  2. このサービスでは、サブスクリプションの代わりに、パブリッシュされたメッセージが保持されるようにします。パブリッシュされたメッセージは、そのサブスクリプションからのメッセージを消費するサブスクライバーによって確認されるまで、そのサブスクリプションのために保持されます。
  3. Pub/Sub が、トピックからそのすべてのサブスクリプションに個別にメッセージを転送します。
  4. サブスクライバーは、Pub/Sub がメッセージをサブスクライバーが選択したエンドポイントに push するか、サブスクライバーがメッセージをサービスから pull することで、メッセージを受け取ります。
  5. サブスクライバーは、受信したメッセージごとに Pub/Sub サービスに確認応答を送信します。
  6. このサービスは、確認済みのメッセージをサブスクリプションのメッセージ キューから削除します。

パブリッシャーとサブスクライバーのエンドポイント

pubsub.googleapis.com に HTTPS リクエストを行えるアプリケーションであれば、パブリッシャーにすることができます。たとえば、App Engine アプリ、Google Compute Engine または他のサードパーティ ネットワークにホスティングされているウェブサービス、デスクトップやモバイル デバイスにインストールされているアプリ、さらにはブラウザもパブリッシャーにすることができます。

また、pubsub.googleapis.com に HTTPS リクエストを行えるアプリケーションであれば、pull サブスクライバーにすることもできます。

push サブスクライバーは、HTTPS を介した POST リクエストを受け入れられる Webhook エンドポイントにする必要があります。

一般的なユースケース

  • ネットワーク クラスタでのワークロードのバランス調整。たとえば、Google Compute Engine インスタンスなど、複数のワーカー間で、タスクの大規模なキューを効率的に分配できます。
  • 非同期ワークフローの実装。たとえば、順序処理アプリケーションによってトピックに順序を設定し、そこから 1 つ以上のワーカーによって処理できるように設定できます。
  • イベント通知の配信。たとえば、ユーザーからの登録を受け付けるサービスで、新規ユーザーが登録するたびに通知を送信することや、ダウンストリーム サービスがイベントの通知を受け取るようにサブスクライブすることができます。
  • 分散キャッシュの更新。たとえば、アプリケーションで無効なイベントをパブリッシュし、変更されたオブジェクトの ID を更新できます。
  • 複数のシステムへのロギング。たとえば、Google Compute Engine インスタンスでモニタリング システムにログを書き込み、データベースとして後で照会したりできます。
  • さまざまなプロセスまたはデバイスからのデータ ストリーミング。たとえば、クラウドにホストされているバックエンド サーバーに人感センサーからデータをストリーミングできます。
  • 信頼性の向上。たとえば、シングルゾーンの Compute Engine サービスが、別のゾーンやリージョンで発生した障害から回復するために共通のトピックにサブスクライブして追加的なゾーンでの処理を遂行できます。

Pub/Sub の統合