こんにちはKIYONOエンジニアです。
本日はGoogle CloudのPub/Subについて解説していきます。
Pub/Subといえばリアルタイム分析として使われることはわかるが、なぜリアルタイム分析と相性が良いのか、そもそもPub/Subそのものがよくわからない方も多いのではないでしょうか。筆者もその一人でした。本日はそんな方々の一助になるような内容を取り上げていますので是非最後まで読んでいただけると嬉しいです。
想定読者
- Pub/Subの仕組みがわからない方
- リアルタイム分析でのPub/Subの使い方がわからない方
1. Pub/Subとは
Pub/Subとは、信頼性とスケーラビリティに優れた非同期メッセージサービスです。
この説明を聞いてもピンとこないかもしれません。Pub/Subを理解するためにもまずはメッセージングサービスの概要について説明します。
1-1. メッセージングサービスとは
メッセージングサービスとは上図のようなイメージです。データを送る側と受ける側が真ん中のハブ(メッセージングサービス)を介して分離されています。
ではそれによってどのような利点があるのか考えてみましょう。
上図はメッセージングサービスがない場合の図です。みてわかる通り各データをそれぞれの媒体に対し送る必要があり、メッセージングサービスありのケースと比較してかなり複雑なシステムになってしまっています。この場合だと仮に接続先が増えた場合など、設定や管理まで色々煩雑になってしまい拡張性がない状態です。またこの場合だとデータの受け手の状態次第ではデータをロストしてしまうリスクがあるので、セキュア なデータの送受信が難しいかと思います。
一方、最初に示したメッセージングサービスを使ったケースの場合、データの送り手と受けてを中央のメッセージングサービスにより分離することで構造がシンプルになり拡張性が増します。またデータのロストに対しても、メッセージングサービスがなくならないよう保管してくれるのでよりセキュア なデータの送受信が可能になります。
以上を踏まえて、Pub/SubとはGoogle Cloudが提供するメッセージングサービスで、これによりデータの出し手と受け手を分離することで拡張性向上、セキュアなデータの受け渡しが可能になります。
2. Pub/Subの特徴
- GCPリソースと連携しやすい
- 高可用性
- フルマネージドのサービスのため余計な管理不要
Pub/Subには上記のような特徴があります。Pub/Subは、GCPリソースなのDataflowのようなGCPの他のリソースと連携し、Bigqueryにデータ送ったり等、GCPリソース間で非常に連携しやすいです。また自動スケーリング等により、可用性はもちろん問題なく、フルマネージドのサービスのためサーバーのメンテナンス等も気にする必要がありません。
3. Pub/Subの構成
Pub/Subの基本構成は上図になります。パブリシャーからメッセージをトピックに送り、そのトピックはMessage Storageに格納されます。トピックに送信されたメッセージはサブスクリプションの設定条件に応じて、push(http POST)またはpull (httpリクエスト)でサブスクライバーにメッセージを送り、サブスクライバーはメッセージを受け取ったら確認応答をサブスクリプションに返します。以上がPub/Sub処理の概要になります。
Pub/Subでよく出てくる用語については以下を参考ください。
- パブリッシャー(Publisher):メッセージ(データ)を作成してトピックに送信するアプリケーション(データの送り手)
- トピック(Topic):パブリッシャーによるメッセージの送信先となるリソース
- サブスクリプション(Subscription):サブスクライバーに送信するメッセージの設定
- サブスクライバー(Subscriber):メッセージを受信するアプリケーション(データの受け手)
- 確認応答(Ack):サブスクライバーがメッセージを受信したら、確認情報をサブスクリプションに返す
サブスクリプションと確認応答の部分がややわかりにくいかと思うので補足します。
サブスクリプションではメッセージの送信タイプ(pushまたはpull)を選択したり、サブスクライバーが未確認のメッセージをどのくらいの期間保管するか、送信するメッセージ内容をコントロールできます。確認応答については、メッセージを受信したことを保証する仕組みであり、確認応答がサブスクリプションに返されると、ストレージ内の送信したメッセージを削除します。またこの確認応答期限までにメッセージを確認できない場合は、メッセージが再送されてしまう可能性があるので注意が必要です。
また下図の通り、多対一や、一対多のように使用することもできます。(図にはないですがもちろん多対多も可能です。)
4. Pub/Subのよくある使い方
Pub/Subでよくあるユースケースはリアルタイム分析であり、Pub/Subは様々なアプリケーションからデータを収集するポジションでよく使われています。GCPのリソースの組み合わせとしては、Pub/SubはDataflow、Bigqueryと組み合わせて使用されるケースが多く上記の構成がメジャーかと思います。
5. まとめ
- Pub/SubとはGoogle Cloudが提供するメッセージングサービス
- データの出し手と受け手を分離することで拡張性向上、セキュアなデータの受け渡しが可能
- GCPの他リソースと連携しやくリアルタイム分析でよく使用される
- 特にDataflowやBigqueryと組み合わせて使用されることが多い
本日のまとめは上記の通りです。
次回の記事では実際にGCPコンソールよりPub/SubからのメッセージをDataflowを介してBigqueryに格納する方法を解説しますので楽しみにしていてください。
コメント