【ぱぶさぶ】

Pub/Sub とは?

💡 「掲示板に貼る人」と「読む人」の分離
📌 このページのポイント
Pub/Sub パターン Publisher 1 メッセージ発行 Publisher 2 メッセージ発行 publish publish Topic / Broker Topic A Topic B トピックベースのルーティング subscribe Subscriber 1 Topic A 購読 Subscriber 2 Topic A,B 購読 Subscriber 3 Topic B 購読 Publisher はどの Subscriber がいるか知らない(疎結合) Subscriber は興味のある Topic だけ購読(フィルタリング)
Pub/Sub パターンのイメージ
ひよこ ひよこ

メッセージキューとの違いは?

ペンギン先生 ペンギン先生

メッセージキュー(Point-to-Point)は1つのメッセージを1つの消費者が処理する。Pub/Subは1つのメッセージを複数の購読者が受け取れる。注文イベントを「在庫サービス」「決済サービス」「通知サービス」に同時に届けたいならPub/Sub。ジョブを1つのワーカーに振り分けたいならメッセージキューだよ

ひよこ ひよこ

Kafkaは Pub/Subなの?

ペンギン先生 ペンギン先生

Kafkaはメッセージキューの特性とPub/Subの特性を両方持っているよ。Consumer Groupを使えばキュー型(グループ内で分散処理)、グループを分ければPub/Sub型(全グループに配信)。さらにメッセージを永続化してリプレイできるのがKafkaの最大の特徴。イベントソーシングとも相性が良いんだ

ひよこ ひよこ

Pub/Subの注意点は?

ペンギン先生 ペンギン先生

①メッセージの順序保証(Kafkaはパーティション内で保証、SNSは保証しない)、②少なくとも1回配信(At-least-once)と正確に1回配信(Exactly-once)の違い。At-least-onceだと重複が起きるから、消費者側で冪等処理が必要。③メッセージの処理失敗時の扱い(デッドレターキューに退避)も考慮が必要だよ

ひよこ ひよこ

どんなシステムで使われる?

ペンギン先生 ペンギン先生

マイクロサービス間のイベント通知(注文作成→在庫引当→決済)、②リアルタイムログ収集(アプリログ→Kafka→Elasticsearch)、③IoTデータ収集(センサーMQTTクラウド)、④リアルタイム通知チャットプッシュ通知)。分散システムでコンポーネント間を疎結合にしたい場面全般で活躍するよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Pub/Sub」って出てきたら「発行と購読を分離した非同期メッセージングパターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「Publish/Subscribe」 = 発行/購読
💬 Publish(出版する)とSubscribe(購読する)。雑誌の出版と定期購読の関係に似ているよ
← 用語集にもどる