mqtt meetup in tokyo 機能概要
DESCRIPTION
MQTT description in JapaneseTRANSCRIPT
![Page 1: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/1.jpg)
MQTTの機能概要 ~ 新仕様の紹介も少し ~
ツキノワ 株式会社
若山 史郎 (@r_rudi)
![Page 2: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/2.jpg)
おまえだれよ?• 若山史郎
• Twitter ID: r_rudi • 著書
• Sphinx :「 Sphinxをはじめよう」
• Ansible: 「入門Ansible」
• MQTT 歴: 1年ぐらい
![Page 3: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/3.jpg)
MQTTの機能概要
![Page 4: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/4.jpg)
MQTT
• MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium. (mqtt.org)
• MQTTは “machine-to-machine (M2M)/Internet of Things”の接続に使うプロトコルです。軽量なPublish/Subscribe型のメッセージトランスポートとして設計されています。小さいフットプリントが要求されたり、ネットワーク帯域が高価な遠隔地との接続に使われます。
Message Queuing Telemetry Transport (MQTT)
![Page 5: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/5.jpg)
MQTTの特徴的な仕様• 軽量
• 双方向
• QoS
• Pub/Sub型
• 階層型Topic
• Will
• Retain
• CleanSession
![Page 6: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/6.jpg)
軽量• プロトコルオーバーヘッドが小さい
• 固定ヘッダーは2バイトのみ
!
!
• 注1: 軽量と言っても1メッセージで256MBまでのデータを扱えます
• 注2: 小さいのはヘッダのみです。中身は変わりません
![Page 7: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/7.jpg)
双方向• 一本のコネクションで双方向通信を行う
• Push通信
• NAT配下でも動作する
• TCPコネクションを維持する
• 3way handshakeのオーバーヘッドがない
• コネクションが切れた場合の対応も(will)
![Page 8: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/8.jpg)
QoS• 到達可能性を選択できる
• QoS 0: 最高1回。届くかは保証しない
• QoS 1: 少なくとも一回。重複する可能性がある
• QoS 2: 正確に一回
• QoSはメッセージごとに変更できる
• 「普段は0だが、重要なデータは2で送信」
![Page 9: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/9.jpg)
Publish/Subscribe型
Server
Publisher
Publisher
Topic
Subscriber
Subscriber
Topic
SubscriberPublisher
![Page 10: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/10.jpg)
余談: MicroService?
Server
ProcessA
ProcessA
Topic
ProcessB
ProcessB
Topic
FilterConverter
![Page 11: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/11.jpg)
階層型Topic• 階層構造を“/“ 区切りで表現
r_rudi
house_1 house_2
room_1 room_10
light light
r_rudi/house_2/room_10/light
door
r_rudi/house_2
![Page 12: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/12.jpg)
階層型Topic• “#”で以下のすべてのトピックを対象
r_rudi
house_1 house_2
room_1 room_10
light light
r_rudi/house_2/#
door
![Page 13: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/13.jpg)
階層型Topic• “+” で一つの階層全部を選択
r_rudi
house_1 house_2
room_1 room_10
light light
r_rudi/house_2/+/light
door
![Page 14: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/14.jpg)
MQTTはM2M/IoT向けプロトコル1. ネットワークが切れやすい
2. 電池が小さいため処理間隔が長い
• Will • Retain • CleanSession
MQTTの解法
![Page 15: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/15.jpg)
Will (遺言)• 接続が切れた場合に指定のメッセージを送る
_人人人人人人_ > 突然の死 < ‾Y^Y^Y^Y^Y^Y^‾
keep alive
CONNECT おれが死んだら a/dead にメッセージを
送ってくれ
a/deadPUBLISH
PUBLISH
ServerA B
SUBSCRIBE
![Page 16: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/16.jpg)
Retain• 最後に送ったメッセージを保存
今30だよSUBSCRIBE
今31だよ
31だったのか!
この間は わからない…
3時間経過
今30だよSUBSCRIBE
今31だよ
わかる!
今30だよ
Server ServerBA BA
![Page 17: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/17.jpg)
CleanSession(durable session)• 接続が切れている間のメッセージも保存してくれる
SUBSCRIBEA
B
C
D
A
SUBSCRIBE
B C D
Server BA
![Page 18: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/18.jpg)
デモ
http://github.com/shirou/mqttcli
![Page 19: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/19.jpg)
MQTTの仕様
![Page 20: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/20.jpg)
MQTTの歴史
1999
IBMと Eurotechが開発
2010 2013 2014
ロイヤリティ フリー
OASISに 寄贈(3.1)
OASIS 標準に (3.1.1)
OASIS: 国際的な標準化団体。 AMQP、OpenDocumentなどの仕様を策定
![Page 21: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/21.jpg)
MQTT 3.1.1
• OASIS標準に向けて策定中
• 現在最終プレビュー中
• 問題なければ2014/9/27にOASIS標準に
• 3.1との差はあまりない
• 仕様の曖昧な部分の明文化がほとんど
• Serverを書く人が気にする必要がある程度
![Page 22: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/22.jpg)
3.1.1の主な変更点• パケット内のプロトコル名が変更
• “MQIsdp”から“MQTT”に
• Topic名やClientIDがUTF-8に固定
• CONACKを受け取る前にパケットを送って良くなった
• 待たなくてすむため、高速化
![Page 23: MQTT meetup in Tokyo 機能概要](https://reader034.vdocuments.net/reader034/viewer/2022042613/54b75a4b4a7959bd138b458c/html5/thumbnails/23.jpg)
まとめ• MQTTはM2M/IoTに適したプロトコル
• 最小2バイトの小さいヘッダ
• 階層型Topic、 Pub/Sub型、QoS
• Will、Retain、CleanSession
• OASIS標準として新仕様策定中