Pub/Sub とは

Pub/Sub は、メッセージを生成するサービスを、それらのメッセージを処理するサービスと切り離す、非同期のスケーラブルなメッセージング サービスです。

Pub/Sub を使用すると、サービスは 100 ミリ秒程度のレイテンシで非同期に通信できます。

Pub/Sub は、ストリーミング分析と、データを読み込んで配布するためのデータ統合パイプラインに使用されます。これは、サービスの統合を目的としたメッセージング指向のミドルウェア、または、タスクを同時に読み込むキューとしても使用されます。

Pub/Sub を使用すると、イベント プロデューサー(パブリッシャー)とコンシューマー(サブスクライバー)のシステムを作成できます。パブリッシャーは、同期リモート プロシージャ コール(RPC)ではなく、イベントをブロードキャストすることによってサブスクライバーと非同期に通信します。

パブリッシャーは、イベントが処理される方法やタイミングとは無関係に、Pub/Sub サービスにイベントを送信します。その後、Pub/Sub によって、イベントに反応するすべてのサービスにイベントが配信されます。RPC を介して通信するシステムでは、パブリッシャーはサブスクライバーがデータを受信するのを待つ必要があります。ただし、Pub/Sub で非同期統合を行うと、システム全体の柔軟性と堅牢性が向上します。

Pub/Sub を使用する前に、Google Cloud コンソールを使用したクイックスタートをご覧ください。より包括的な情報については、Pub/Sub メッセージング システムの構築をご覧ください。

一般的なユースケース

  • ユーザー インタラクションとサーバー イベントの取り込み。エンドユーザー アプリからのユーザー インタラクション イベントや、システムからのサーバー イベントを利用するには、それらを Pub/Sub に転送できます。その後、Dataflow などのストリーム処理ツールを使用してイベントをデータベースに送信できます。 このようなデータベースの例として、BigQuery、Bigtable、Cloud Storage などがあります。Pub/Sub では、同時に多数のクライアントからイベントを収集できます。
  • リアルタイムのイベント配信。イベントは、未加工か処理された状態かを問わず、チームや組織の複数のアプリケーションでリアルタイム処理のために使用できます。Pub/Sub では、「エンタープライズ イベントバス」とイベント ドリブンなアプリケーション設計パターンがサポートされます。Pub/Sub を使用すると、イベントを Pub/Sub にエクスポートする多くのシステムと連携できます。
  • データベース間でデータを複製する。Pub/Sub は一般的に、データベースから変更イベントを分散するために使用されます。これらのイベントを使用して、BigQuery やその他のデータ ストレージ システムでデータベースの状態と状態の履歴に関するビューを作成できます。
  • 並列処理とワークフロー。Pub/Sub メッセージを使用してワーカーと通信することで、多数のタスクを複数のワーカーに効率的に分散できます。このようなタスクの例としては、テキスト ファイルの圧縮、メール通知の送信、AI モデルの評価、画像の再フォーマットなどがあります。
  • エンタープライズ イベントバス。組織全体にビジネス イベント、データベース更新、分析イベントを配布する、エンタープライズ規模のリアルタイム データ共有バスを作成できます。
  • アプリケーション、サービス、IoT デバイスからのデータ ストリーミング。 たとえば、SaaS アプリケーションはイベントのリアルタイム フィードを公開できます。また、人感センサーがデータを Pub/Sub にストリーミングし、データ処理 パイプラインを介して他の Google Cloud プロダクトで使用することもできます。
  • 分散キャッシュの更新。たとえば、アプリケーションで無効なイベントをパブリッシュし、変更されたオブジェクトの ID を更新できます。
  • 負荷分散により信頼性を確保。たとえば、サービスのインスタンスを複数のゾーンの Compute Engine にデプロイし、共通のトピックにサブスクライブできます。いずれかのゾーンでサービスが失敗した場合、他のサービスがその負荷を自動的に処理できます。

Pub/Sub と他のメッセージング技術の比較

Pub/Sub は、Apache KafkaPulsar の水平スケーラビリティと、Apache ActiveMQ や RabbitMQ などのメッセージング ミドルウェアに見られる機能と両立できます。このような機能の例として、デッドレター キューやフィルタリングがあります。

Pub/Sub がメッセージ ミドルウェアから採用しているもう 1 つの機能は、メッセージごとの並列処理(パーティション ベースのメッセージングではない)です。Pub/Sub は、個々のメッセージをサブスクライバー クライアントに「リース」し、特定のメッセージが正常に処理されたかどうかを追跡します。

一方、水平スケーリングが可能な他のメッセージング システムは、水平スケーリングにパーティションを使用します。これにより、サブスクライバーは各パーティションでメッセージを順番に処理し、同時実行クライアントの数をパーティションの数に制限します。メッセージごとの処理では、サブスクライバー アプリケーションの並列度が最大限に高まり、パブリッシャーやサブスクライバーの独立性が確保されます。

サービス間通信とサービスとクライアント間通信の比較

Pub/Sub は、エンドユーザーや IoT クライアントとの通信ではなく、サービス間通信を目的としています。その他のパターンは、他のプロダクトでより適切にサポートされています。

  • クライアント/サーバー。モバイルアプリとウェブアプリおよびサービスの間でメッセージを送信するには、Firebase Realtime DatabaseFirebase Cloud Messaging を含むプロダクトを使用してください。
  • 非同期サービス呼び出しCloud Tasks を使用してください。

これらのサービスを組み合わせて、クライアント -> サービス -> データベースのパターンを構築できます。たとえば、WebSocket での Pub/Sub メッセージのストリーミングにあるチュートリアルをご覧ください。

統合

Pub/Sub には、フル機能のメッセージング システムを作成するためのその他の Google Cloud プロダクトとの統合が多数あります。

  • ストリーム処理とデータ統合。Dataflow でサポートされている Dataflow テンプレートSQL により、Cloud Storage 上の BigQuery やデータレイクへの処理とデータ統合が可能です。Pub/Sub から Cloud Storage、BigQuery およびその他のプロダクトにデータを移行するための Dataflow テンプレートは、Google Cloud コンソールの Pub/Sub と Dataflow UI で利用できます。特に Dataproc で管理されている場合、Apache Spark との統合も可能です。Spark と Dataproc で実行される統合パイプラインと処理パイプラインの視覚的な構成は、Data Fusion を使用して実現できます。
  • モニタリング、アラート、ロギング。Monitoring と Logging の各プロダクトでサポートされています。
  • 認証と IAM。Pub/Sub は、他の Google Cloud プロダクトで使用される標準の OAuth 認証に依存し、個々の IAM をサポートし、個々のリソースのアクセス制御を有効にします。
  • APIs。Pub/Sub は、標準の gRPC と REST サービスの API テクノロジーとともに、複数の言語のクライアント ライブラリを使用します。
  • トリガー、通知、Webhook。Pub/Sub は、Webhook への HTTP POST リクエストとしてメッセージの push ベースの配信を行います。Cloud Functions などのサーバーレス プロダクトを使用して、ワークフローの自動化を簡単に実装できます。
  • オーケストレーション。Pub/Sub は、複数ステップのサーバーレス ワークフローに宣言型の方法で統合できます。ビッグデータと分析オーケストレーションは多くの場合、Pub/Sub トリガーをサポートする Cloud Composer で行われます。Pub/Sub を Application Integrationプレビュー)と統合することもできます。これは Integration-Platform-as-a-Service(iPaaS)ソリューションです。Application Integration では、統合をトリガーまたは開始するための Pub/Sub トリガーが提供されます。
  • Integration Connectorsプレビュー)。これらのコネクタを使用すると、さまざまなデータソースに接続できます。コネクタにより、Google Cloud サービスとサードパーティのビジネス アプリケーションの両方が透過的で標準的なインターフェースを介して統合に公開されます。Pub/Sub の場合は、統合で使用する Pub/Sub 接続を作成できます。

次のステップ