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 Kafka と Pulsar の水平スケーラビリティと、Apache ActiveMQ や RabbitMQ などのメッセージング ミドルウェアに見られる機能と両立できます。このような機能の例として、デッドレター キューやフィルタリングがあります。
Pub/Sub がメッセージ ミドルウェアから採用しているもう 1 つの機能は、メッセージごとの並列処理(パーティション ベースのメッセージングではない)です。Pub/Sub は、個々のメッセージをサブスクライバー クライアントに「リース」し、特定のメッセージが正常に処理されたかどうかを追跡します。
一方、水平スケーリングが可能な他のメッセージング システムは、水平スケーリングにパーティションを使用します。これにより、サブスクライバーは各パーティションでメッセージを順番に処理し、同時実行クライアントの数をパーティションの数に制限します。メッセージごとの処理では、サブスクライバー アプリケーションの並列度が最大限に高まり、パブリッシャーやサブスクライバーの独立性が確保されます。
サービス間通信とサービスとクライアント間通信の比較
Pub/Sub は、エンドユーザーや IoT クライアントとの通信ではなく、サービス間通信を目的としています。その他のパターンは、他のプロダクトでより適切にサポートされています。
- クライアント/サーバー。モバイルアプリとウェブアプリおよびサービスの間でメッセージを送信するには、Firebase Realtime Database と Firebase Cloud Messaging を含むプロダクトを使用してください。
- 非同期サービス呼び出し。