20150726 iotってなに?ニフティクラウドmqttでやったこと

Post on 17-Aug-2015

1.822 Views

Category:

Internet

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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軸あれば足りる (精度によります)

IoTデバイスがあるじゃろ

27

数バイトのデータを送るときに http://hoge.com (15byte)以上あるヘッダ情報ってコスト高くないですか?

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みたいなイベント もできます!

top related