The Many Faces of Publish/Subscribe

October 30, 2021

分散システムの通信をpublish/subscribeモデルにするとシステム間の結合を疎にできる。 タイトルと同名の2003年に発表された論文は、publish/subscribeのサーベイであり、publish/subscribeモデルを空間、時間、同期の3種の結合度を下げる技術ととらえ、ほかの通信技術と比較する。 次に、先行研究のpublish/subscribeモデルを、購読するイベントの宣言手段によって、topic-based, content-based, type-basedに分類する。 最後に、メッセージブローカを使うかどうかなどpublish/subscribeモデルの設計や実装の利点や欠点を整理する。

Publish/subsribeモデルにおける空間の粗結合とは、publisherとsubscriberが互いを直接参照することがなく、対向のpublisherやsubscriberの数を知らなくてよいことを意味する。 時間については、publisherとsubscriberが同時刻に通信可能でなくてもよいことであり、publisherはsubscriberが通信できなくてもイベントを発信でき、他方、subscriberはpublisherが不在になってもイベントを受信できる。 また、publisherは同期なしにイベントを並行して送信でき、subscriberは受信処理のコールバックを並行してよびだせる。

Subscirberがpublisherから発信される特定のイベントのみを受信したいとき、受信すべきイベントを定義する仕組みが必要になる。 古典的な手法であるtopic-basedは、イベントをtopicというグループに分け、文字列であるキーワードでtopicを指定することで、subscriberが望むイベントだけを購読できるようにする。 手法によっては、topicで階層構造を表現し、topicの包含関係を定義できるものもある。 topic-basedではイベントが内容だけでなく構造にもとづいてイベントをグループ化される傾向あり、イベントの型で購読する対象を定義する設計が発展した。 これがtype-basedに分類される。 Content-basedは、論理演算子や比較演算子でイベントの内容に対する述語で購読するイベントを選ぶ。

論文をこちらからダウンロードできます。