http://unoh.github.io/2009/08/19/what-is-pubsubhubbub.html
PubSubHubbub のいい感じの説明。masutodonでのHubってどこなんだろ。
@ms2sato PubさんとHubさん両方ともトゥートが書かれてるインスタンスに居るような気がしますねー。ちゃんと勉強したいなあ
@zundan あ、やっぱりそうですか!
https://github.com/tootsuite/mastodon/blob/master/app/workers/pubsubhubbub/delivery_worker.rb#L21
この辺見てると、 rel="hub"のアドレスは自インスタンスの/api/push だって教えている様子なので、そうなんかな?って思ってたとこでした。
今気になっているのは、subscription.callback_url は大量にインスタンスに登録されるのだけど、ある人がトゥートするとその全てに泥臭くリクエストされるという仕組みになっているか確かめたいなぁと思ってたんです。インスタンスそれぞれに一回だけ送ってあげて、中で分けてくれる仕組みなら良いなぁと。
@ms2sato 1個トゥートすると下記のようなログがどばどばどばあっと書かれるので地道にPubしてるような気がします。(Sidekiqもweb dynoで動かしてます)
2017-05-04T04:03:45.426905+00:00 app[web.1]: 17 TID-ov9e86xl4 DistributionWorker JID-d97ca05bd02a01bd8a61c391 INFO: done: 0.307 sec
2017-05-04T04:03:45.430972+00:00 app[web.1]: 17 TID-ov9e86x8w PushUpdateWorker JID-f492e92e5dec54a1f867c8a7 INFO: done: 0.287 sec
2017-05-04T04:03:45.525950+00:00 app[web.1]: 17 TID-ov9e86xf0 Pubsubhubbub::DeliveryWorker JID-60e746a798d9eb5ea1760d92 INFO: start
@zundan ですね! DistributionWorkerが起点になって、DeliveryWorker がバンバン装填されて全部がコールバック先へ一気に攻め込むイメージ。
具体的に集約する処理とかあるのかわからなくって、コード読んでるとこでしたが、全くその気はなさそうな実装ですね。
ただ、インスタンスごとにまとめて送るだけでなんか結構楽になるんちゃうかな?と思ったり。
もしくはHubサーバーがちゃんと立ち上がって、そこがキャッシュしてくれれば良いのかも(これはコストの問題がかなりありそうですが)。
Googleさんはこういうの立ててるっぽいですね。使って良いかわかりませんけども〜。
https://pubsubhubbub.appspot.com/