職質アンチパターン

無責任な事を書きたい

MQTT subscriberをスケールアウトする方法について

状況としては

  • MQTTを使っている
  • 複数のsubscriberがいて,それぞれに負荷分散したい
  • MQTTの仕様的に,あるtopicをsubscribeしているsubscriberのどれか1つにだけ送る,というような仕様は存在しない
    • IBM MessageSightやHiveMQなどは"shared subscription"という名前でそのような仕組みを提供している
    • これはMQTTの仕様の「拡張」として取り扱われている
  • 本筋でいくと,subscriberが複数いる場合に各subscriberに負荷分散したい場合は,各subscriberがsubscribeするtopicを分割すれば良い
  • しかし色々な事情でtopicは実質1つしかない
  • MQTTのsubscribe topicの指定に利用できるワイルドカードは素朴なものしかなく,正規表現のようなリッチなマッチャは存在しない

という時にどうやってsubscriberをスケールアウトさせるのかという話.brokerを増やすしか無いんだろうか……