Cloud PubSubとは?
主な役割
・パブリッシャー(Publisher)
・トピック(Topic)
・サブスクリプション(Subscription)
・サブスクライバー(Subscriber)
・ACK(Acknowledge)
・ACKデッドライン(Ack Deadline)
パブリッシャー(Publisher)とは?
- パブリッシャーは、作成したメッセージを指定したトピックに送信する。
例:「新しい注文が入りました!」とトピックに伝える。
トピック(Topic)とは?
- パブリッシャーはメッセージをトピックに公開する(Publishする)
- トピックはメッセージを メッセージキュー(Message Queue) には格納せず、すぐにサブスクリプションに転送する。
- トピック自体はメッセージを保管しない。
例:「注文トピック」に「新しい注文が入りました!」というメッセージが届く。
サブスクリプション(Subscriptionとは?
- サブスクリプションは、トピックからメッセージを受け取るための「窓口」。
- サブスクライバー(受信者)はサブスクリプションを通じてトピックのメッセージを受信する。
-
サブスクリプションには2種類のメッセージ受信モードがある:
- Pull モード
- サブスクライバーが明示的にPub/Subに対してメッセージを「ください!」とリクエストする。
- ポーリング方式で、自分のタイミングでデータを取得可能。
- Push モード
- Pub/SubがサブスクライバーにメッセージをHTTPリクエストで送信する。
- サブスクライバーは専用のエンドポイント(URL)を用意する必要がある。
- Pull モード
- ACK(確認応答) されないメッセージは、最大7日間保持される。
例:「注文トピック」とサブスクライバーを結ぶパイプ。
サブスクライバー(Subscriber)とは?
- サブスクライバーは、サブスクリプションを通じてトピックからメッセージを受け取り、処理する
- Pull方式の場合
- サブスクライバーがPub/Subに「メッセージをください」と要求する。
- 自分のペースで処理できる。
- Push方式の場合
- Pub/Subがメッセージをサブスクライバーに自動で送信する(HTTPリクエスト)。
- 即座にリアルタイム処理を行う。
- メッセージを受け取った後、サブスクライバーはPub/Subに「ちゃんと受け取ったよ!」とACKを返す必要がある。
- ACKが返されると、そのメッセージはPub/Subのストレージから削除される。
例:「新しい注文が入りました!」と受信して、次の処理を行う。
Pubsubのack(Acknowlede)とは?
- ACK(確認応答)は、サブスクライバーがPub/Subに対して「メッセージを受け取ったよ!」と通知する仕組み。
- ACKがないとメッセージは再送され続けるため、確実に処理されたことを示す必要がある
- サブスクライバーがサブスクリプションを通じてメッセージを受信
- メッセージを処理
- 処理が成功したらPub/SubにACKを送る
- ACKを受け取ったPub/Subはメッセージをストレージから削除する
- ACKデッドライン(デフォルト10秒)以内にACKがない場合、Pub/Subはメッセージを「未処理」と判断し、サブスクライバーに再配信する。
ACKデッドライン(Ack Deadlineとは?
- ACKデッドラインは、サブスクライバーがメッセージを受け取ってからACKを返すまでの猶予時間を制御する仕組み。
- この時間内にACKしないと、Pub/Subは「メッセージが処理されなかった」と判断して再配信する。
- デフォルト値:10秒
- 最大値:600秒(10分)
Cloud Pub/Subの運用における重要なポイント
ACKの重要性
- メッセージをサブスクライバーが確実に処理したことを確認するためには、ACK(確認応答)が不可欠です。
- ACKしない場合、Pub/Subはそのメッセージを「未処理」とみなして、サブスクライバーに再送信を繰り返します。このため、サブスクライバーがACKを返さない場合、メッセージは増え続け、システムに負荷をかけるリスクがあります
ACKデッドラインと再送制御
- サブスクライバーがACKを返すまでに必要な時間を管理するためのACKデッドラインが重要です。デフォルトで10秒の猶予があり、この時間内にACKされないと、Pub/Subは再送を行います。