EnsekiTT Blog

EnsekiTTが書くブログです。

Publish–Subscribe Pattern 出版-購読型モデルの話

つまりなにしたの?

出版者と購読者のモデルをなんとなく使っていたので、改めて勉強して、まとめてみた。
センサデータをみんなで購読したり、
逆にセンサが設定ファイルを購読したりすることにも使えるので、
ロボット関連でも結構活用されている。
f:id:ensekitt:20180921144757j:plain

Pub/Subとは?

登場人物と各々やりたいこと

登場人物はPublisher(出版を行う者: 出版者)とSubscriber(購読を行う者: 購読者)とBroker(出版物仲介を行う者: 仲介者)がいる。
それぞれでやりたいことがある。

  • 出版者は購読者を意識せずに出版したい。
  • 購読者は興味のある出版物を受け取りたい。

f:id:ensekitt:20180921144824j:plain:w640
仲介者については後述。
じゃあ出版者は購読者に渡せばいいじゃないかと思うが、
出版者はまだ購読者を意識しなきゃいけないし、購読者は興味のある情報だけがほしい。
増えてくると管理が大変。
f:id:ensekitt:20180921144906j:plain:w640

購読者の興味

ここで、購読者が興味のある出版物には二種類ある。

  • 興味のあるトピックを購読する

 (たとえばバーチャルユーチューバー雑誌の購読)

  • 興味のあるコンテンツを購読する

 (たとえばキズナアイに関する記事の購読、雑誌はまたがっても良い)
こういうのが読みたいって誰かに伝えたら、その情報だけ購読したくなってくる。

仲介者の役割

これを実現するのは仲介者。

仲介者は出版者が誰かという情報と、購読者は何に興味があるのかという情報ももっていて、
それを使ってフィルタリングを行う。
仲介者は出版者の情報を一旦蓄積し、フィルタリングの結果を購読者にわたす。
一旦蓄積して渡す方式はストアアンドフォワード方式というらしい。
f:id:ensekitt:20180921144957j:plain:w640

間に仲介者がいると、出版者や購読者が増えても、出版者や購読者はそれを意識しないでも良くなる。
f:id:ensekitt:20180921145017j:plain:w640
f:id:ensekitt:20180921145059j:plain:w640

Redis等で実現できる

このモデルを実現する方法はいくつかあるけど、
今回はRedisを使ってやってみた。
なお、Redisが担ってくれるのは仲介者。
f:id:ensekitt:20180921145115j:plain:w640

次回は実際にRedisを使ってPub/Subしてみる。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。