【ぱぶさぶ】

Pub/Sub とは?

最終更新:
💡 「掲示板に貼る人」と「読む人」の分離

メッセージの発行と購読を分離するパターン。発行者がトピックなどへ送ったメッセージを、関心を登録した購読側へ届ける。非同期のサービス間連携でよく使われる。

📌 このページのポイント
同じ注文イベントを別々の購読へ 注文サービス 発行者 配信サービス トピック orders 注文 #42 購読:在庫 注文 #42 在庫処理へ 購読:通知 注文 #42 通知処理へ 同じ購読内の分担とは区別する
Google Cloud Pub/Subの配信例。矢印は注文イベントの流れ。別々の購読へ同じイベントが届き、各処理が進む。
ひよこ ひよこ
発行と購読を分けると何がうれしいの?
ペンギン先生 ペンギン先生
注文サービスが注文イベントを発行し、在庫と通知の処理がそれぞれ購読する、という連携ができるよ。発行側が各処理を直接呼び出さずに済むので、受け取る処理を追加しやすくなるんだ。
ひよこ ひよこ
トピックとブローカーは同じ?
ペンギン先生 ペンギン先生
トピックはメッセージを分類する宛先や名前。ブローカーやメッセージングサービスは、メッセージを受け取り配信する仕組みだよ。Google Cloud Pub/Subでは、トピックにsubscription(購読)を作り、その購読を通してsubscriberが受け取るんだ。
ひよこ ひよこ
キューとPub/Subは別物なの?
ペンギン先生 ペンギン先生
配り方に注目しよう。Google Cloud Pub/Subでは別々の購読へ同じメッセージを配れる一方、同じ購読の複数ワーカーで処理を分担することもできる。製品名だけで1対1か1対多か決まるわけではないよ。
ひよこ ひよこ
配信の順序や回数は保証される?
ペンギン先生 ペンギン先生
製品と設定を確認する必要があるよ。たとえばKafkaはパーティション内の順序を保ち、SNSにもFIFOトピックがある。再配信で重複する構成では、同じ注文を二重に処理しない工夫が必要。失敗時の再試行や退避先も設計しよう。
ひよこ ひよこ
イベントを配れば処理は全部そろう?
ペンギン先生 ペンギン先生
各購読の処理は別々に進むので、同じ瞬間に完了するとは限らないよ。在庫処理だけが遅れたり失敗したりする場合もある。Pub/Subで通知することと、複数サービスの更新をまとめて確定することは別に考えよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Pub/Sub」って出てきたら「メッセージの発行と購読を分けて連携する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Publish/Subscribe」 = 発行/購読
💬 Publish(出版する)とSubscribe(購読する)。雑誌の出版と定期購読の関係に似ているよ

参考資料

← 用語集にもどる