20150726 IoTってなに?ニフティクラウドmqttでやったこと
-
Upload
daichi-morifuji -
Category
Internet
-
view
1.822 -
download
1
Transcript of 20150726 IoTってなに?ニフティクラウドmqttでやったこと
IoTってなに? MQTTができること
JulyTechFesta 2015 産業技術大学院大学 品川
2015/07/26 ニフティ株式会社
お詫び
2
「MQTTができること」でしたが、 「ニフティクラウド MQTTの仕組み」の ほうが受けるかと思って内容を変えました。
自己紹介
3
森藤 大地@muddydixon ニフティ9年目 モバイル・IoTビジネス部
JavaScript / Perl データ前処理 / データ解析 時系列予測 / データ可視化 IoT new
自己紹介
4
森藤 大地@muddydixon ニフティ9年目 モバイル・IoTビジネス部
JavaScript / Perl データ前処理 / データ解析 時系列予測 / データ可視化 IoT new
自己紹介
5
森藤 大地@muddydixon ニフティ9年目 モバイル・IoTビジネス部
JavaScript / Perl データ前処理 / データ解析 時系列予測 / データ可視化 IoT new
危ない!
バズワードだ!
6
はい
コンテンツ
7
IoTって? MQTTって 向いてる状況/向いていない状況 ニフティクラウド MQTTの作り方
8
IoTの現状おさらい
世の中のIoT化の流れ
9
IoT Internet of Thingsモノのインターネット
家庭・産業の色々なものがネットにつながる!
10
Sensoria歩数・距離・スピードなどの他にも、足の体重バランスなども記録され「かかとに負担が大きな走り方」や「左足にバランスが偏っている」などを把握できる。
血糖値の管理をより手軽でスマートに。コンピュータやスマートフォンと接続することで、リアルタイムのデータを活用しながら治療を行う。
Lumo Back
活動量計のほかにヨガやボクシング、スイミング、ランニングなどのモーションについてのコーチングも行ってくれる。
背中につけたセンサーが姿勢の悪いときに振動して教えてくれる。また消費カロリーや睡眠トラックも可能。
Moov
Phyode脈拍や呼吸をトラッキングすることにより心理状態をモニタリング。精神を整えるエクササイズもすることができる。
MisfitWearablesウェアラブルデバイスを、目立たずおしゃれに身につけることを目指しているデバイスメーカー。
Pancreum
ウェアラブルデバイス・サービスは多種多様海外ベンチャーはIoTを強烈に意識
11
IoTの適用が急速に拡大中Droneで配送 Amazon Prime Air
自動運転 Google self-driving car project
IoTのDIYセンサー・制御ガジェット Smart Things
ホーム・オートメーション SUITE SMARTHOME
IoTは期待のピークに
12
出典:ガートナー先進テクノロジのハイプ・サイクル: 2014年http://www.gartner.co.jp/press/html/pr20140903-01.html
さまざま企業が今後IoTを意識してビジネスを展開
国内IoT市場も拡大
13
出典:IDC Japan株式会社 国内IoT(Internet of Things)市場予測を発表http://www.idcjapan.co.jp/Press/Current/20150205Apr.html
2019年には16.4兆円に達する見通し
2014年売上規模は9.4兆円
ニフティも参入しました
14
ニフティも参入しました
15
ニフティも参入しました
16
17
はい
この辺りを考えています
18
ニフティクラウド MQTT
19
ニフティクラウド MQTT とは
20
MQTT ブローカーをコンパネ上で作成できるサービス 2015年5月11日 リリース
いいところを説明する前に
21
こんなストーリー
IoTデバイスがあるじゃろ
22
例えば
23
情報(BLE)
位置情報クーポンとか
情報(BLE)情報(BLE)
例えば
24
センサ情報(BLE) たくさん
コンテンツ アップロード
IoTデバイスがあるじゃろ
25
3G/4G でクラウドにアップするじゃろ
IoTデバイスがあるじゃろ
26
位置情報 緯度経度なら8byte 温湿度 2byteあれば足りる (精度によります) 加速度 2byte * 3軸あれば足りる (精度によります)
28
29
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 は machine-to-machine (M2M) / “Internet of Things” 接続性の高いプロトコルです。非常に軽量な publish/subscribe 型のメッセージ転送として設計されました。コードのフットプリントが小さいこと、かつ/またはネットワーク転送が非常に高い場合のリモートコネクションの時に有効です。
とは
30
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 は machine-to-machine (M2M) / “Internet of Things” 接続性の高いプロトコルです。非常に軽量な publish/subscribe 型のメッセージ転送として設計されました。コードのフットプリントが小さいこと、かつ/またはネットワーク転送が非常に高い場合のリモートコネクションの時に有効です。
とは
31
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 は machine-to-machine (M2M) / “Internet of Things” 接続性の高いプロトコルです。非常に軽量な publish/subscribe 型のメッセージ転送として設計されました。コードのフットプリントが小さいこと、かつ/またはネットワーク転送費が非常に高い場合のリモートコネクションの時に有効です。
とは
32
IoTに適した PubSub 型メッセージ転送 下記の条件に適している 貧弱なハードリソース(フットプリントが小さいため) ネットワーク費用が高い
とは
33
の特徴
1通信ごとの ヘッダが最小2バイト
※ただし接続時コストは別
PubSub型 メッセージ転送 ※ただしサーバ(broker)は必要
34
の特徴
1通信ごとの ヘッダが最小2バイト
※ただし接続時コストは別
接続コストは別 ssl 張るとコスト回収しないといけない
通信ごとに2バイトのヘッダですむ http は都度 headers が必要なので高い!
ペイロードがでかいと考えるだけ無駄 2MB送るときに数バイトの事考える?
35
の特徴
中心にサーバを置いたスター型 Brokerが必要・誰かが運用
M:N のデバイスに対して通信路がN*MではなくN+Mで済む クライアントへのブッコミが可能!
PubSub型 メッセージ転送 ※ただしサーバ(broker)は必要
36
すごい!
例えば
37
位置情報クーポンとか
情報(BLE)情報(BLE)情報(BLE)
例えば
38
コンテンツ アップロード
センサ情報(BLE) たくさん
39
すごい!
40
事例紹介
MQTT の事例
41
https://github.com/mqtt/mqtt.github.io/wiki/Example%20Uses
42
https://github.com/mqtt/mqtt.github.io/wiki/Example%20Uses
MQTT の事例Facebook Messenger
たかだか数バイトのヘッダですが件数が半端無いのでコスト削減ができる!
IECC Scalable
43
https://github.com/mqtt/mqtt.github.io/wiki/Example%20Uses
各種のセンサ情報・時間解像度高く送るのでコスト削減!
家の電気を管理する
44
ON/OFF の 1bit 情報を送るのにHTTPヘッダは高コスト = MQTT の最小2バイト!
http://chris.yeoh.info/2010/11/05/controlling-the-house-lighting-via-mqtt/
災害検知・ブロードキャストシステム
45
氾濫原や川の水位を監視し、それを通知するシステム (それぞれの情報はある数バイトの数値・位置データ
http://mobile4d.capacitylab.org/
怪しい事例も・・・
46
実家の電力量が増えると青く、家の電力量が増えると赤く光るだけのおもちゃ
47
の特徴
1通信ごとの ヘッダが最小2バイト
※ただし接続時コストは別
PubSub型 メッセージ転送 ※ただしサーバ(broker)は必要
非力なデバイス 電池交換が手間 電波状況が悪い 通信が頻繁
48
の特徴PubSub型メッセージ転送
※ただしサーバ (broker)は必要
非力なデバイス 電池交換が手間 電波状況が悪い 通信が頻繁
1通信ごとの ヘッダが最小2バイト
※ただし接続時コストは別
49
の特徴PubSub型メッセージ転送
※ただしサーバ (broker)は必要
非力なデバイス電池交換が手間電波状況が悪い通信が頻繁
1通信ごとの ヘッダが最小2バイト
※ただし接続時コストは別
50
の特徴PubSub型メッセージ転送
※ただしサーバ (broker)は必要
非力なデバイス電池交換が手間電波状況が悪い通信が頻繁
1通信ごとの ヘッダが最小2バイト
※ただし接続時コストは別
51
の特徴PubSub型メッセージ転送
※ただしサーバ (broker)は必要
非力なデバイス電池交換が手間電波状況が悪い通信が頻繁
1通信ごとの ヘッダが最小2バイト
※ただし接続時コストは別
管理するの誰!?
ニフティクラウド MQTT
52
53
DEMO
ニフティクラウド MQTT の特徴
54
同時接続数 メッセージ数 スループット メッセージサイズ他社A (無料) 6 50,000/月 - 6KB他社A (500円/月) 50 120,000/月 - 50KB他社B (無料) 10 - 10Kbit/Sec -他社B ($299/月) 10,000 - 10Mbit/Sec -NIFTY Cloud MQTT 100 無制限 50KB/Sec
Will Retain QoS TLS WebSocket WebSocket Secure サポート他社A (無料) ✔ ✔ 0 - ✔ - -他社A (500円/月) ✔ ✔ 0,1,2 ✔ ✔ ✔ ✔
他社B (無料) ✔ ✔ 0 ✔ - ✔ ✔
他社B ($299円) ✔ ✔ 0 ✔ - ✔ ✔
NIFTY Cloud MQTT ✔ ✔ 0,1,2 ✔ ✔ ✔ -
ニフティクラウド MQTT の特徴
55
同時接続数 メッセージ数 スループット メッセージサイズ他社A (無料) 6 50,000/月 - 6KB他社A (500円/月) 50 120,000/月 - 50KB他社B (無料) 10 - 10Kbit/Sec -他社B ($299/月) 10,000 - 10Mbit/Sec -NIFTY Cloud MQTT 100 無制限 50KB/Sec
Will Retain QoS TLS WebSocket WebSocket Secure サポート他社A (無料) ✔ ✔ 0 - ✔ - -他社A (500円/月) ✔ ✔ 0,1,2 ✔ ✔ ✔ ✔
他社B (無料) ✔ ✔ 0 ✔ - ✔ ✔
他社B ($299円) ✔ ✔ 0 ✔ - ✔ ✔
NIFTY Cloud MQTT ✔ ✔ 0,1,2 ✔ ✔ ✔ -
同時接続数
100
メッセージ数
/サイズ 無
制限(※)
※ Pub/Su
b 合計スルー
プットでの制
限
56
宣伝 終わり
57
の特徴 (再掲)
1通信ごとの ヘッダが最小2バイト
※ただし接続時コストは別
PubSub型 メッセージ転送 ※ただしサーバ(broker)は必要
非力なデバイス 電池交換が手間 電波状況が悪い 通信が頻繁
MQTTに向いているケース / 向いていないケース
58
Not非力デバイス 電池交換が不要 有線LAN 日に数回の通信 でかいペイロード 画像とか・・・
非力なデバイス 電池交換が手間 電波状況が悪い 通信が頻繁 小さなデータ
向いている 向いてない ※使ってもいいけど、別の方法もある
一旦まとめ
59
アイデア次第でいろいろできるIoTを駆使したサービスを考えて、コストはニフティクラウドMQTTで抑えると素晴らしいのではないでしょうか!
企業のIoTビジネスを推進する専門チームェ
60
61
ここからが本番です ニフティクラウド MQTT
ニフティクラウド MQTT の中身
62
ニフティクラウド MQTT の中身
63
LB
API API
DOCKERMQTT
MQTT
MQTT
MQTTAuth/ACL
ニフティクラウド MQTT の中身
64
このひとなんなの・・・・
MQTT Broker 検証
65
Mosquitto: スタンダード RabbitMQ: 自社運用実績あり Mosca: (個人的に)改良しやすい SurgeMQ: 爆速
ベンチマーク
66
環境ニフティクラウド Ubuntu 14.04 / Docker 1.5
ブローカ mosquitto (c)
209fe5e5af65ceeaafc2abb104499195a3f437ed
rabbitmq (erlang) rabbitmq_v3_4_4 plugin: rabbitmq_mqtt
mosca (javascript) 0.28.0 / 25f7308943f327809f48e06450ff28dab3ec39b6
surgemq (golang) dc3b2383a9358d3ec5c957dbd56939715c72eb68
ベンチツール (違うツールも見たいけど時間がが) surgemq/benchmark
ベンチ結果
67
実装 publish subscriber
mosquitto 41906 41906
mosca 7134 7134
rabbitmq 8762 8762
surgemq 368816 368816
実装 publish subscriber
mosquitto 99182 99182
mosca 7944 7944
rabbitmq 13389 13389
surgemq 6562087 6562087
sub=1/pub=1 sub=1/pub=20
実装 publish subscriber
mosquitto 5944 118890
mosca ※1050 ※ 21010
rabbitmq 817 16348
surgemq 29410 588200
実装 publish subscriber
mosquitto 19174 191740
mosca ※1757 ※17578
rabbitmq ※3239 ※12897
surgemq 71282 712820
sub=20/pub=1 sub=10/pub=10
msg size=1kb, msg num=5000 https://github.com/surgemq/surgemq/
surgemqすげぇ・・・
68
message/seconds
0
1750000
3500000
5250000
7000000
pub=1/sub=1 pub=1/sub=20 pub=20/sub=1 pub=10/sub=10
mosquitto mosca rabbitmq surgemq
ただし
69
surgemqはもろもろ機能が足りていない 開発も手が止まっている状態
ベンチ結果と機能要件から
70
Mosquittoを選定 surgemqは開発途上 Mosquittoが機能的にも揃っている retain, qos, will, tls, ws plugin
性能も高い
Mosquitto on Docker にあたって
71
追加の機能要件 userの動的変更 topic aclの動的変更 containerの識別 Auth pluginのhttps対応 resourceの管理
同時接続数やメッセージ数ではなくThroughput
LB
API API
DOCKER
MQTT
MQTT
MQTT
MQTTAuth/ACL
Mosquitto on Docker にあたって
72
追加の機能要件 userの動的変更 topic aclの動的変更 containerの識別 Auth pluginのhttps対応 resourceの管理
同時接続数やメッセージ数ではなくThroughput
LB
API API
DOCKER
MQTT
MQTT
MQTT
MQTTAuth/ACL
Mosquitto-auth-plug
73
Mosquitto-auth-plug https://github.com/jpmens/mosquitto-auth-plug
多彩な認証ドライバ MySQL, PostgreSQL, CDB, SQLite3 Redis, LDAP, HTTP, MongoDB
認証/su認証/aclチェックも可能
Mosquitto on Docker にあたって
74
追加の機能要件 userの動的変更 topic aclの動的変更 containerの識別 Auth pluginのhttps対応 resourceの管理
同時接続数やメッセージ数ではなくThroughput
LB
API API
DOCKER
MQTT
MQTT
MQTT
MQTTAuth/ACL
Mosquitto-auth-plugの課題(1)
75
情報足りない問題
Auth-plugから送信される情報 username:password
containerの識別ができない!!
Mosquitto-auth-plugの課題(1)
76
対応しました https://github.com/jpmens/mosquitto-auth-plug/pull/64
設定書いたら環境変数が渡るようにした
こう書くと
こんなかんじでHTTPの 認証サーバに問い合わせが行く
auth_opt_http_getuser_params domain=DOMAIN,port=PORT auth_opt_http_superuser_params domain= DOMAIN,port=PORT auth_opt_http_aclcheck_params domain= DOMAIN,port=PORT
data=domain=example.com&port=8080&username=xxx&password=ax&topic=&acc=-1
LB
API API
DOCKER
MQTT
MQTT
MQTT
MQTTAuth/ACL
Mosquitto on Docker にあたって
77
追加の機能要件 userの動的変更 topic aclの動的変更 containerの識別 Auth pluginのhttps対応 resourceの管理
同時接続数やメッセージ数ではなくThroughput
LB
API API
DOCKER
MQTT
MQTT
MQTT
MQTTAuth/ACL
Mosquitto-auth-plugの課題(2)
78
HTTP認証でHTTPS対応してない
Mosquitto-auth-plugの課題(2)
79
対応しました https://github.com/jpmens/mosquitto-auth-plug/pull/73
こう書くと
こういうふうに
HTTPSで飛ぶ
auth_opt_http_with_ssl true
https://example.com:443/auth/
LB
API API
DOCKER
MQTT
MQTT
MQTT
MQTTAuth/ACL
これらの対応で
80
mosquitto-auth-plug + patch 2で動的に認証ユーザの変更・動的にACLの変更に対応 ちなみに(おそらく)同一の構成を持つCloudMQTTは、Userを変更したり、ACLを変更すると再起動がかかる
Mosquitto on Docker の課題
81
追加の機能要件 userの動的変更 topic aclの動的変更 containerの識別 Auth pluginのhttps対応 resourceの管理
同時接続数やメッセージ数ではなくThroughput
LB
API API
DOCKER
MQTT
MQTT
MQTT
MQTTAuth/ACL
Mosquitto本体の問題
82
無限に使われた困る問題 デフォルトで存在するリソース制約 max_queued_messages max_inflight_messages message_size_limit max_connection
Dockerでかけられるリソース制約 CPU memory
http://mosquitto.org/man/mosquitto-conf-5.html
戦略として
83
sang◯とかCl◯udMQTTを使ってるトライアルユーザに乗り換えてほしい 十分に遊べる接続数/遊べるメッセージ数
同時接続数は100と他社と差をつけた! メッセージ数・・・メッセージサイズ・・・
戦略として
84
sang◯とかCl◯udMQTTを使ってるトライアルユーザに乗り換えてほしい 十分に遊べる接続数/遊べるメッセージ数
同時接続数は100と他社と差をつけた! メッセージ数・・・メッセージサイズ・・・
めんどくさい!スループットでいいよ!
Mosquitto本体の問題
85
Throughputの計測とそれによる制約パッチ 取り込まれ待ち
たくさん送ったら一定時間メッセージが送れなくなる仕様
http://git.eclipse.org/c/mosquitto/org.eclipse.mosquitto.git/commit/?id=944b9e0d
mosquittoの本家repoが eclipseでうざい
LB
API API
DOCKER
MQTT
MQTT
MQTT
MQTTAuth/ACL
ニフティクラウド MQTT
86
これらの対応により無事リリースできました
MQTTリリースにあたって辛かったところ
87
リリース期間の短さ MQTTの用途の見えなさ
MQTTリリースにあたって辛かったところ
88
リリース期間の短さ MQTTの用途の見えなさ
MQTTリリースにあたって辛かったところ
89
リリース期間の短さ MQTTの用途の見えなさ Vのヒトのマサカリ
90
enjoy MQTT enjoy IoT
enjoy ニフティクラウド (トライアルカードあります)
We are hiring!!
91
ニフティでは IoTの「T(デバイス)」側やりたいヒト IoTの「I(インターネット)」側やりたいヒト
募集しています
R&Dもできます! 海外渡航制度など! CROSSみたいなイベント もできます!