23
MQTTの機能概要 新仕様の紹介も少し ツキノワ 株式会社 若山 史郎 (@r_rudi)

MQTT meetup in Tokyo 機能概要

  • Upload
    rrudi

  • View
    1.437

  • Download
    4

Embed Size (px)

DESCRIPTION

MQTT description in Japanese

Citation preview

Page 1: MQTT meetup in Tokyo 機能概要

MQTTの機能概要 ~ 新仕様の紹介も少し ~

ツキノワ 株式会社

若山 史郎 (@r_rudi)

Page 2: MQTT meetup in Tokyo 機能概要

おまえだれよ?• 若山史郎

• Twitter ID: r_rudi • 著書

• Sphinx :「 Sphinxをはじめよう」

• Ansible: 「入門Ansible」

• MQTT 歴: 1年ぐらい

Page 3: MQTT meetup in Tokyo 機能概要

MQTTの機能概要

Page 4: MQTT meetup in Tokyo 機能概要

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 機能概要

MQTTの特徴的な仕様• 軽量

• 双方向

• QoS

• Pub/Sub型

• 階層型Topic

• Will

• Retain

• CleanSession

Page 6: MQTT meetup in Tokyo 機能概要

軽量• プロトコルオーバーヘッドが小さい

• 固定ヘッダーは2バイトのみ

!

!

• 注1: 軽量と言っても1メッセージで256MBまでのデータを扱えます

• 注2: 小さいのはヘッダのみです。中身は変わりません

Page 7: MQTT meetup in Tokyo 機能概要

双方向• 一本のコネクションで双方向通信を行う

• Push通信

• NAT配下でも動作する

• TCPコネクションを維持する

• 3way handshakeのオーバーヘッドがない

• コネクションが切れた場合の対応も(will)

Page 8: MQTT meetup in Tokyo 機能概要

QoS• 到達可能性を選択できる

• QoS 0: 最高1回。届くかは保証しない

• QoS 1: 少なくとも一回。重複する可能性がある

• QoS 2: 正確に一回

• QoSはメッセージごとに変更できる

• 「普段は0だが、重要なデータは2で送信」

Page 9: MQTT meetup in Tokyo 機能概要

Publish/Subscribe型

Server

Publisher

Publisher

Topic

Subscriber

Subscriber

Topic

SubscriberPublisher

Page 10: MQTT meetup in Tokyo 機能概要

余談: MicroService?

Server

ProcessA

ProcessA

Topic

ProcessB

ProcessB

Topic

FilterConverter

Page 11: MQTT meetup in Tokyo 機能概要

階層型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 機能概要

階層型Topic• “#”で以下のすべてのトピックを対象

r_rudi

house_1 house_2

room_1 room_10

light light

r_rudi/house_2/#

door

Page 13: MQTT meetup in Tokyo 機能概要

階層型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 機能概要

MQTTはM2M/IoT向けプロトコル1. ネットワークが切れやすい

2. 電池が小さいため処理間隔が長い

• Will • Retain • CleanSession

MQTTの解法

Page 15: MQTT meetup in Tokyo 機能概要

Will (遺言)• 接続が切れた場合に指定のメッセージを送る

_人人人人人人_ > 突然の死 < ‾Y^Y^Y^Y^Y^Y^‾

keep alive

CONNECT おれが死んだら a/dead にメッセージを

送ってくれ

a/deadPUBLISH

PUBLISH

ServerA B

SUBSCRIBE

Page 16: MQTT meetup in Tokyo 機能概要

Retain• 最後に送ったメッセージを保存

今30だよSUBSCRIBE

今31だよ

31だったのか!

この間は わからない…

3時間経過

今30だよSUBSCRIBE

今31だよ

わかる!

今30だよ

Server ServerBA BA

Page 17: MQTT meetup in Tokyo 機能概要

CleanSession(durable session)• 接続が切れている間のメッセージも保存してくれる

SUBSCRIBEA

B

C

D

A

SUBSCRIBE

B C D

Server BA

Page 18: MQTT meetup in Tokyo 機能概要

デモ

http://github.com/shirou/mqttcli

Page 19: MQTT meetup in Tokyo 機能概要

MQTTの仕様

Page 20: MQTT meetup in Tokyo 機能概要

MQTTの歴史

1999

IBMと Eurotechが開発

2010 2013 2014

ロイヤリティ フリー

OASISに 寄贈(3.1)

OASIS 標準に (3.1.1)

OASIS: 国際的な標準化団体。  AMQP、OpenDocumentなどの仕様を策定

Page 21: MQTT meetup in Tokyo 機能概要

MQTT 3.1.1

• OASIS標準に向けて策定中

• 現在最終プレビュー中

• 問題なければ2014/9/27にOASIS標準に

• 3.1との差はあまりない

• 仕様の曖昧な部分の明文化がほとんど

• Serverを書く人が気にする必要がある程度

Page 22: MQTT meetup in Tokyo 機能概要

3.1.1の主な変更点• パケット内のプロトコル名が変更

• “MQIsdp”から“MQTT”に

• Topic名やClientIDがUTF-8に固定

• CONACKを受け取る前にパケットを送って良くなった

• 待たなくてすむため、高速化

Page 23: MQTT meetup in Tokyo 機能概要

まとめ• MQTTはM2M/IoTに適したプロトコル

• 最小2バイトの小さいヘッダ

• 階層型Topic、 Pub/Sub型、QoS

• Will、Retain、CleanSession

• OASIS標準として新仕様策定中