Upload
rrudi
View
1.437
Download
4
Embed Size (px)
DESCRIPTION
MQTT description in Japanese
Citation preview
MQTTの機能概要 ~ 新仕様の紹介も少し ~
ツキノワ 株式会社
若山 史郎 (@r_rudi)
おまえだれよ?• 若山史郎
• Twitter ID: r_rudi • 著書
• Sphinx :「 Sphinxをはじめよう」
• Ansible: 「入門Ansible」
• MQTT 歴: 1年ぐらい
MQTTの機能概要
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)
MQTTの特徴的な仕様• 軽量
• 双方向
• QoS
• Pub/Sub型
• 階層型Topic
• Will
• Retain
• CleanSession
軽量• プロトコルオーバーヘッドが小さい
• 固定ヘッダーは2バイトのみ
!
!
• 注1: 軽量と言っても1メッセージで256MBまでのデータを扱えます
• 注2: 小さいのはヘッダのみです。中身は変わりません
双方向• 一本のコネクションで双方向通信を行う
• Push通信
• NAT配下でも動作する
• TCPコネクションを維持する
• 3way handshakeのオーバーヘッドがない
• コネクションが切れた場合の対応も(will)
QoS• 到達可能性を選択できる
• QoS 0: 最高1回。届くかは保証しない
• QoS 1: 少なくとも一回。重複する可能性がある
• QoS 2: 正確に一回
• QoSはメッセージごとに変更できる
• 「普段は0だが、重要なデータは2で送信」
Publish/Subscribe型
Server
Publisher
Publisher
Topic
Subscriber
Subscriber
Topic
SubscriberPublisher
余談: MicroService?
Server
ProcessA
ProcessA
Topic
ProcessB
ProcessB
Topic
FilterConverter
階層型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
階層型Topic• “#”で以下のすべてのトピックを対象
r_rudi
house_1 house_2
room_1 room_10
light light
r_rudi/house_2/#
door
階層型Topic• “+” で一つの階層全部を選択
r_rudi
house_1 house_2
room_1 room_10
light light
r_rudi/house_2/+/light
door
MQTTはM2M/IoT向けプロトコル1. ネットワークが切れやすい
2. 電池が小さいため処理間隔が長い
• Will • Retain • CleanSession
MQTTの解法
Will (遺言)• 接続が切れた場合に指定のメッセージを送る
_人人人人人人_ > 突然の死 < ‾Y^Y^Y^Y^Y^Y^‾
keep alive
CONNECT おれが死んだら a/dead にメッセージを
送ってくれ
a/deadPUBLISH
PUBLISH
ServerA B
SUBSCRIBE
Retain• 最後に送ったメッセージを保存
今30だよSUBSCRIBE
今31だよ
31だったのか!
この間は わからない…
3時間経過
今30だよSUBSCRIBE
今31だよ
わかる!
今30だよ
Server ServerBA BA
CleanSession(durable session)• 接続が切れている間のメッセージも保存してくれる
SUBSCRIBEA
B
C
D
A
SUBSCRIBE
B C D
Server BA
デモ
http://github.com/shirou/mqttcli
MQTTの仕様
MQTTの歴史
1999
IBMと Eurotechが開発
2010 2013 2014
ロイヤリティ フリー
OASISに 寄贈(3.1)
OASIS 標準に (3.1.1)
OASIS: 国際的な標準化団体。 AMQP、OpenDocumentなどの仕様を策定
MQTT 3.1.1
• OASIS標準に向けて策定中
• 現在最終プレビュー中
• 問題なければ2014/9/27にOASIS標準に
• 3.1との差はあまりない
• 仕様の曖昧な部分の明文化がほとんど
• Serverを書く人が気にする必要がある程度
3.1.1の主な変更点• パケット内のプロトコル名が変更
• “MQIsdp”から“MQTT”に
• Topic名やClientIDがUTF-8に固定
• CONACKを受け取る前にパケットを送って良くなった
• 待たなくてすむため、高速化
まとめ• MQTTはM2M/IoTに適したプロトコル
• 最小2バイトの小さいヘッダ
• 階層型Topic、 Pub/Sub型、QoS
• Will、Retain、CleanSession
• OASIS標準として新仕様策定中