Google Cloud Pub/Subについて学習中(非同期メッセージングを図示してみました)

GCP

はじめに

Google Cloud Pub/Sub を使っていましたが、あまり理論や背景を理解せず使っていたため復習しています。

公式ページ より

「GCP(Google Cloud Platform)上で提供されている、 非同期メッセージングサービス です。」

と書かれていましたが、「非同期メッセージングサービス」とはそもそもなんだろう?ということでアウトプットしながら整理しました。

同期メッセージング とは

メッセージ(何かの要求) の送信側 publisher と 受信側 subscriber は両方とも同時に活動状態( Active )でなければ、やりとりできない仕組みです。

Webページ閲覧の例だと、ブラウザが publisher 、 Webサーバが subscriber となります。

publisher->subscriber: message
subscriber->publisher: result

電話のイメージですね。

非同期メッセージング とは

メッセージの送信側 publisher と 受信側 subscriber の間に仲介者 broker が挟まります。

publishersubscriber の存在や状態を意識することなく、メッセージの送信を終了することができます。

非同期メッセージングその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つである必要はありません。
publisherbroker 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

性能を求められるケースでは、メッセージを送ったあとに結果を待たないこともあります。

以下は送信者 publisherbroker の結果を待たないケースです。

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 (消費者)

ひとこと

牛歩の歩みですが、ほんの少しだけ理解は進みました。

そういえば、過去に同じような非同期メッセージング方式をシェルスクリプトで実現したことがあったっけ。

GCP