Pub/Sub(パブサブ)

Pub/Sub(パブサブ)

Pub/Sub(パブサブ)

英語表記: Pub/Sub (Publish/Subscribe)

概要

Pub/Sub(パブサブ)は、「発行者(Publisher)」と「購読者(Subscriber)」を完全に分離する非同期メッセージングパターンです。発行者がメッセージを送信する際、特定の受信者を指定する必要がなく、代わりに「トピック」と呼ばれる中間チャネルにメッセージを公開(Publish)します。そして、そのトピックに興味のある購読者のみがメッセージを受信(Subscribe)する仕組みです。

このパターンは、プログラミングパラダイムにおける並列/リアクティブパラダイムの中でも、特にイベント駆動アーキテクチャを実現するための根幹を成します。イベント(メッセージ)の発生に応じてシステムの各要素が連携するため、高い応答性と柔軟性を実現できるのが最大の魅力ですね。

詳細解説

Pub/Subモデルの目的は、システムコンポーネント間の依存関係を極限まで減らし(疎結合)、高いスケーラビリティと耐障害性を実現することにあります。従来の同期的なシステムでは、AコンポーネントがBコンポーネントを直接呼び出す必要がありましたが、Pub/Subではこの直接的な結合を排除します。

Pub/Subの主要コンポーネント

Pub/Subシステムは主に以下の3つの要素で構成されています。

  1. 発行者 (Publisher):
    • イベントやデータを生成し、メッセージとして送信する側です。
    • 重要な点として、発行者はメッセージを誰が受け取るのか、また何人の購読者がいるのかを一切知る必要がありません。メッセージを特定のトピックに公開する役割に専念します。
  2. 購読者 (Subscriber):
    • 特定のトピックに関心を持ち、そのトピックに公開されたメッセージを受信する側です。
    • メッセージを受信した後、その内容に基づいた処理(例:データベースへの書き込み、通知の送信)を実行します。
    • 発行者がメッセージを送信した時点でオフラインだったとしても、ブローカーがメッセージを保持しておけば、オンライン復帰後に処理を継続できるのが非同期処理の強みです。
  3. メッセージブローカー (Broker) / トピック (Topic):
    • 発行者と購読者の中間に位置し、メッセージのルーティングと永続化を担当する中核要素です。
    • トピックはメッセージを分類するためのチャネル名のようなもので、発行者はメッセージを特定のトピックに紐づけて公開します。
    • ブローカーは、購読者が登録しているトピックに基づき、適切な購読者にメッセージを配信します。この仲介役がいるおかげで、発行者と購読者は互いの存在を気にしなくても連携できるのです。これは本当に画期的な仕組みだと思います。

イベント駆動パラダイムにおける役割

私たちが今注目しているのは、プログラミングパラダイムにおけるイベント駆動の文脈です。イベント駆動システムでは、「何かが起こった(イベント)」という事実をトリガーとして、次の処理が連鎖的に実行されます。

Pub/Subは、この「何かが起こった」という事実(メッセージ)を、システム全体に効率的かつ非同期的に伝播させるための理想的なメカニズムです。

例えば、ユーザーがECサイトで「注文確定」というイベントを発生させたとしましょう。

  1. 発行: 注文サービス(発行者)が「注文確定」メッセージを「orders.completed」トピックに発行します。
  2. 並列処理: このメッセージをブローカーが受け取ると、同時に複数の購読者(サービス)に配信されます。
    • 在庫管理サービス(購読者1)は在庫を減らす処理を開始します。
    • 決済サービス(購読者2)は決済処理を開始します。
    • メール通知サービス(購読者3)は発送通知メールの準備を開始します。

このように、一つのイベント発生に対して複数の処理が並列に、かつ非同期に実行されるため、システム全体の処理速度が向上し、ユーザー体験が改善されます。もし一つのサービスがダウンしても、他のサービスはメッセージを受け取り続けることができるため、耐障害性も高まるという、一石二鳥以上のメリットがあるのです。

具体例・活用シーン

Pub/Subモデルは、現代の分散システムやマイクロサービスアーキテクチャにおいて不可欠な存在となっています。特に、処理の遅延が許容される非同期的な連携が必要な場面で威力を発揮します。

1. 新聞の定期購読(比喩)

Pub/Subの仕組みを理解するための最も有名な比喩は、「新聞の定期購読」です。

  • 発行者(Publisher):新聞社です。新聞社は読者一人ひとりが誰であるかを知りませんし、興味のあるジャンルも把握していません。ただ、「経済」「スポーツ」「地域ニュース」といったトピックごとに記事(メッセージ)を作成し、印刷・公開するだけです。
  • 購読者(Subscriber):読者です。読者は新聞社を直接呼び出して「今日の記事をくれ」とは言いません。購読者は販売店(ブローカー)に対して、「私はスポーツ欄(トピック)だけを読みたい」と登録します。
  • メッセージブローカー(Broker):新聞販売店やポストです。販売店は、新聞社から届いた新聞を、購読登録している読者のポストに適切に投函します。

この仕組みのおかげで、新聞社と読者は直接対話する必要がなく、互いに独立して活動できます。読者が増えても新聞社側の負担は変わらず、記事の内容とトピックさえ間違えなければ、システム全体がスムーズに機能します。イベント駆動の観点で見ると、新聞社が記事を公開する(イベント発生)たびに、読者の購読処理が実行されるわけですね。

2. 大規模なログ・データ収集

現代のウェブサービスでは、膨大な量のログデータがリアルタイムで発生します。

  • ウェブサーバー(発行者)がアクセスログを「system.logs」トピックに公開します。
  • このログを複数のサービスが利用します。例えば、ログを保管するデータベースサービス、セキュリティ監視を行う分析サービス、利用状況を可視化するダッシュボードサービスなど、それぞれが独立した購読者として機能します。
  • ログの発生(イベント)をトリガーに、すべての処理が並列で実行され、システム負荷を分散できます。

3. マイクロサービスの連携

マイクロサービスアーキテクチャでは、多数の小さなサービスが連携して一つの機能を提供します。Pub/Subは、これらのサービス間のメッセージ交換の標準的な方法です。あるサービスで顧客データが更新されたら、そのイベントをトピックに流すことで、関連するすべてのサービスが自動的に最新の情報を取得・更新できます。これにより、複雑な依存関係の管理から解放されるのです。

資格試験向けチェックポイント

ITパスポート試験や基本情報技術者試験、応用情報技術者試験において、Pub/Subは直接的な用語として問われることもありますが、より重要なのは「イベント駆動」「疎結合」「非同期処理」といった関連概念を理解しているかです。

| 試験レベル | 重点的に問われる概念 | Pub/Subとの関連 |
| :— | :— | :— |
| ITパスポート | イベント駆動、非同期通信の基本 | 「イベントが発生したら処理を行う仕組み」の具体例として認識しておきましょう。並列処理による効率化のメリットが問われます。 |
| 基本情報技術者 | 疎結合、メッセージキュー、リアクティブシステム | Pub/Subが実現する「疎結合」のメリット(変更容易性、保守性向上)は頻出です。発行者と購読者が互いの存在を知らないという仕組みを理解することが重要です。 |
| 応用情報技術者 | 分散システム、マイクロサービスアーキテクチャ、高可用性 | システム設計の文脈で、メッセージブローカー(例:Kafka, RabbitMQ)の役割や、トランザクション管理、メッセージの保証(At Least Once/Exactly Once)といった高度な内容が出題される可能性があります。Pub/Subがシステムの耐障害性を高める方法を説明できるようにしておきましょう。 |

試験対策のヒント:

  • キーワードの理解: 「疎結合」はPub/Subの最大のメリットです。これは、特定のコンポーネントの変更が他のコンポーネントに影響を与えにくいことを意味します。
  • 対義語との比較: Pub/Sub(非同期)は、RPC(Remote Procedure Call:同期的な直接呼び出し)と比較されることが多いです。それぞれのメリット・デメリットを整理しておくと良いでしょう。
  • ブローカーの役割: ブローカーがメッセージを一時的に保持することで、発行者と購読者のタイミングがずれても処理が成立する、という非同期性の核心を抑えてください。

関連用語

このセクションでは、Pub/Subに関連する重要な用語をいくつか挙げる予定でしたが、現在の入力材料では具体的な関連用語の情報が不足しています。

情報不足: Pub/Subの文脈で通常言及されるべき「メッセージキュー」「メッセージブローカー(具体的な製品名:Kafka, RabbitMQ, AWS SNS/SQS, Google Cloud Pub/Subなど)」「疎結合」「イベントソーシング」「リアクティブマニフェスト」などの具体的な関連用語に関する情報が不足しています。

これらの用語を補完することで、読者はPub/Subが実際のシステム構築においてどのように位置づけられているかをより深く理解できるようになります。特に、基本情報や応用情報では、具体的なメッセージングミドルウェアの名前を知っておくと有利になることが多いので、情報収集をおすすめします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

両親の影響を受け、幼少期からロボットやエンジニアリングに親しみ、国公立大学で電気系の修士号を取得。現在はITエンジニアとして、開発から設計まで幅広く活躍している。

目次