言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

The Many Faces of Publish/Subscribe

http://www.irisa.fr/asap/intranet/the-many-faces-of-publish-subscribe.pdf

publish / subscribe とは、通信方法の一つで、生産者と消費者間が以下の三つの点で依存しない方法。

  • Space (空間:お互いのポインタ)
  • Time (時刻)
  • Synchronization (同期: 処理中待機するか)

典型的には、

  • 消費者は生産者に subscribe() で登録し、unsubscribe() で離脱する。
  • 生産者は消費者に publish() で通信する。

他の手法との比較。

  • 空間依存(両者のポインタ必要)で、時間依存するもの。
    • Message Passing : 消費者同期。消費者がずーっと待ち受ける。生産者がトリガ。
    • RPC : 消費者同期。消費者がちょっと待ち受ける。消費者がトリガ。
    • 非同期 RPC : 非同期。消費者なげっぱなしで答えを受け取らない。
    • Future RPC : 非同期。往路復路で別メッセージ。消費者なげっぱなしであとで受け取る。
    • Notifications : 非同期。Future の言い方変えただけ?
  • 空間非依存で、時間非依存。
    • Tuple spaces : 消費者同期。共有空間経由。消費者は共有空間にメッセージが入るのを待つ。
    • Message Queuing : 消費者同期。FIFO 経由。消費者はFIFOにメッセージが入るのを待つ。
    • Publish/subscribe : 非同期。メッセージは発行され次第登録されている消費者に届く。

あとは、Publish/subscribe 手法の細かい実装や信頼性の話だが、興味深い議論は無いので省略。