MQTTに関するアレコレを聞ける会 MQTT Meetup Tokyo 2014.08 (時雨堂さん主催、@niftyさん会場提供 )に行ってきたのでメモ
MQTTの概要(若山さん@ツキノワ)
MQTT(Message Queue Telemetry Transport)の特徴
- TCPベース、オーバーヘッドが小さく、省電力なのでモバイルでも安心。M2MとかIoTとか。
- publish/subscribe
- メッセージごとにQoS(Quality of Service)を設定できる。QoS 0は保証なし、1は必達だが重複の可能性あり、2は正確に一回配信。
- Will(遺言):クライアント接続時に、切断されたときに送るメッセージを設定できる。サーバ(ブローカー)がよきにはからってくれる
- Retain:メッセージを配信するときにサーバでこれを保持して、後から接続されたサブスクライバにも配信してくれる
- CleanSession:CleanSession=falseで接続したサブスクライバは、接続が切断されて再接続したとき、切断されていた間に送られたメッセージも受け取ることができる
現在、MQTT 3.1.1の仕様がOASIS標準の最終プレビュー中。 3.1から3.1.1では、パケット内のプロトコル名の変更、トピック名およびクライアントのIDがUTF-8固定になるなど。
より詳しくは、こちらにまとまっています。
IBM MessageSight(鈴木さん@IBM)
MQTT専用筐体であるIBM MessageSightの紹介。100万台つなげて、16message/secくらい送れている。 パレーマンスレポートも公開されている。
IBM ZP00: IBM MessageSight Appliance - Performance report - United States
MQTTでクラウドに上げたビッグデータのアナライズを部品化して提供するBluemixの紹介。
CoAP(林達也さん@lepidum)
MQTTの競合、CoAP(Constrained Application Protocol)について。
- UDPベース、RFC7252
- HTTP/RESTとの親和性(メソッドやステータスコードのマッピング)
- QoSとかはない
- firefoxの拡張にcopperというものがある
- 実用化にむけて追加仕様を検討しつつある。CoAP-MQとか
- CBOR(しーぼる)
- 課題は今は安全性、認証、認可、セキュリティ、プライバシー
MQTTブローカーを作った話(voluntasさん@時雨堂)
時雨堂MQTTブローカーを実装するにあたっての苦労など。
- IBMさんのように専用筐体でなくクラウドで運用するもの
- MQTT 3.1.1準拠、テストはパスしている
- MQTT 3.1.1仕様では「メッセージが到達すること」などと書かれており、実装依存箇所が多い
- クライアントの実装負担が軽い仕様である反面、サーバ側の負担は大きい。また接続数を考えると、リトライなどの負担を軽減することに腐心した。
- MQTTの外、サービスとして必要な機能も実装。接続数、送信メッセージ数。またRetainの保持期限を設けるなど。
廣江さん@小松電機産業
センサー類→RaspberryPi+Arduino→MQTTをつなげてみた話。
- アナログセンサー(水位とか)は一定間隔で送るので、QoS 0
- デジタルセンサー(降雪とか)はON/OFFタイミングでしか送られないので、最低限QoS 1で、かつRetainにする
- 移動体通信で従量課金であることを考えると、(MQTTといえども)メッセージは集約したい。アナログなら配列、デジタルはビット化するなど。またJSONでなくMessagePackを使うなど。
- 実装言語は、軽量にするのであればC。その他、Golang、mruby
- 時雨堂さんのMQTTブローカー(米東部?)を使ったデモ動画。若干の遅延はあるが、厳密なリアルタイム性を求められないなら十分実用的。シンガポールに移って遅延は減っている。
Sangoについて
時雨堂さんのMQTT as a Service。当日の00:00にローンチされた。
現在はフリープランのみで、同時接続数3、QoS 0のみ。10月目標で有料プランを準備中。GitHubアカウントでサインアップして利用できる。
使いかたなどはこちら。