Google Cloud Pub/Subについて学習中(非同期メッセージングを図示してみました)
はじめに
Google Cloud Pub/Sub を使っていましたが、あまり理論や背景を理解せず使っていたため復習しています。
公式ページ より
「GCP(Google Cloud Platform)上で提供されている、 非同期メッセージングサービス です。」
と書かれていましたが、「非同期メッセージングサービス」とはそもそもなんだろう?ということでアウトプットしながら整理しました。
同期メッセージング とは
メッセージ(何かの要求) の送信側 publisher と 受信側 subscriber は両方とも同時に活動状態( Active )でなければ、やりとりできない仕組みです。
Webページ閲覧の例だと、ブラウザが publisher 、 Webサーバが subscriber となります。
publisher->subscriber: message
subscriber->publisher: result
電話のイメージですね。
非同期メッセージング とは
メッセージの送信側 publisher と 受信側 subscriber の間に仲介者 broker が挟まります。
publisher は subscriber の存在や状態を意識することなく、メッセージの送信を終了することができます。
非同期メッセージングその1
publisher->broker: message
broker->publisher: result
broker->subscriber: message
subscriber->broker: result
こちらはeメールのイメージですね。
当然、 broker には安定性が求めらますね。
また、以下のように仲介者を挟んだとしても subscriber のレスポンスに依存している場合は非同期メッセージング方式とはなりません。
publisher->broker: message
broker->subscriber: message
subscriber->broker: result
broker->publisher: result
非同期メッセージングその2
さらに、 subscriber は1つである必要はありません。
publisher は broker 1人に対してメッセージを送信することだけに注力します。
subscriber が複数存在することを意識するのは broker の役割です。
publisher->broker: message
broker->publisher: result
broker->subscriber_A: message
subscriber_A->broker: result
broker->subscriber_B: message
subscriber_B->broker: result
非同期メッセージングその3
性能を求められるケースでは、メッセージを送ったあとに結果を待たないこともあります。
以下は送信者 publisher が broker の結果を待たないケースです。
publisher->broker: message
broker->subscriber_A: message
subscriber_A->broker: result
broker->subscriber_B: message
subscriber_B->broker: result
逆に、仲介者 broker が結果を待たないケースもあります。
publisher->broker: message
broker->publisher: result
broker->subscriber_A: message
broker->subscriber_B: message
再び戻ってきて、「Cloud Pub/Sub」とは
はじめに戻り、改めて整理してみます。
「GCP(Google Cloud Platform)上で提供されている、 非同期メッセージングサービス です。」
Cloud Pub/Sub は、 非同期メッセージング方式における仲介者 Broker の役割を担うサービスということですね。
その他用語について
非同期メッセージング方式の登場人物たちは、いろんな用語で呼ばれることがあります。
以下のものは概ね同じ意味で使われると解釈しました。
送信者
- Publisher (出版社)
- Sendor (送信者)
- Producer (生産者)
仲介者
- Mediator (仲介者)
- Broker (仲介者)
受信者
- Subscriber (購読者)
- Reciever (受信者)
- Consumer (消費者)
ひとこと
牛歩の歩みですが、ほんの少しだけ理解は進みました。
そういえば、過去に同じような非同期メッセージング方式をシェルスクリプトで実現したことがあったっけ。
ディスカッション
コメント一覧
まだ、コメントがありません