Design it!を読んでいて、Pub/Subパターンの記載があった。
ふと、Pub/Subの概念は知っているけど、実装をしたことは一度もないし、どうやって実装すればいいか知らない。
このパターンに登場する人物紹介はこの記事が分かりやすかった。PublisherとSubscriber、そしてEvent Channnel(他に読んだやつでMessage Hubって表現していたものがあって、そっちの方が個人的には好み)。
Observer vs Pub-Sub pattern | Hacker Noon https://hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c
PublisherがEvent ChannelにTopicを放流して、SubscriberはそれをSubscribe。PublisherはEvent ChannelにTopicを増やしていけばいいし、Subscriberは好きなTopicをSubscribeすればいいから、スケールさせやすいアーキテクチャーなんだと。
あまり多くは見つからなかったけど、Pythonのライブラリだとこのpypubsubあたりがスターの数が多かった。
GitHub - schollii/pypubsub: A Python publish-subcribe library https://github.com/schollii/pypubsub
早速使ってみたのだけど、サンプルはとりあえず動いたとはいえ、結局使い方とライブラリの挙動を自分の中で結びつけられなかった。
Observerパターンと違ってSubscriberはPublisherのことを知らなくてもOKだという話だったし、その逆も然り。
そうなると、PublisherはTopicを登録したいだろうし、SubscriberはTopicの一覧を見て購読したいだろうなあと思う。(RSSをイメージしてる)
そこでこのライブラリを使っていて沸いた疑問としては、次のあたり。
- どうやってPublisherはTopicを登録するのか?(あるいはPublisherは登録自体はできなくて、Topic Managerに依頼する?)
- どうやってTopic ManagerはPublisherから見てSubscriberを、Subscriberから見てPublisherを隠蔽するのか
イベントドリブン系のFaaS(Function as a service)をGCPやAWSでは公開していて、それに対してはまさにPub-Subパターンが適用できるようだから、それらのライブラリを使ってみるのがまずは良いかもしれない。
そうしたら、PublisherおよびSubscriberの部分がわかるとともに、Message Hubの部分が何をしてくれるのかが見えるはずなので、自前で実装する(もちろんライブラリは使うと思う)にしても、何をどうすることが必要なのかが割とすぐわかるようになる、だろうと思っている。