MQTTクラスターの負荷分散におけるSubscriberのマルチセッション

こんにちは、芳澤です。

IoTの発展に伴いPublisherとSubscriberの間にBrokerという仲介媒体をおいて複数のIoT端末の得た情報を伝送するプロトコルとしてMQTTが注目されています。

MQTTでは、SubscriberはあらかじめBrokerのトピックに自分が欲しい情報だけ送るように指定します。そして、Publisherから送られてくるデータをトピックの情報を元にBrokerは Subscriberが欲しいデータだけをSubscriberに送ります。また、複数の端末と接続が可能なため、IoT関連で使われています。しかし、近年、IoT機器の台数は上昇傾向にあり、Broker1台だけでは処理することができない場合があります。そこで、NAPTなどのロードバランサと 複数台 のBrokerを連携してMQTT Clusterを形成し、Publisherからのデータを分散させます。このような手法を用いるケースが多いですが、これには課題が存在します。

Publisherからロードバランサを介して複数Brokerにデータ分散させますが、受け取った情報が他のBrokerのトピック情報である可能性がでてきます。この場合、Broker-Broker間でデータを送る必要が出てきます。それにより、BrokerーBroker間の内部トラフィックが発生してしまいます。そして、オーバヘッドが生じ、データの転送効率が悪くなってしまいます。

そこで、こちらの論文ではBrokerーBroker間のトラフィックを発生させない方法を提案しています。

  • タイトル:Sub-linear Scalability of MQTT Clusters in Topic-based Publish-subscribe Applications
    (トピックベースのパブリッシュ/サブスクライブアプリケーションにおけるMQTTクラスターの線形スケーラビリティ)
  • 著者:Andrea Detti, Ludovico Funari and Nicola Blefari-Melazzi
  • 発表:IEEE Transactions on Network and Service Management
  • URL:https://ieeexplore.ieee.org/document/9120278

通常クライアント1台あたりのBrokerへのセッション数は1つはるのが一般的ですが、この論文ではクライアントが欲しいトピックに複数のセッションをはります。
これにより、クライアントへ送るためにBroker-Broker間の通信を削減できます。

この紹介した論文は内部トラフィックを抑えることができるもののクライアントがマルチセッションを行う必要があり、クライアントに負担がかかってしまうのが難点だと感じました。しかし、クライアント側に焦点を向けた提案手法は珍しいので斬新な提案手法だと感じました。