Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

6 179 vues

Publié le

IoTの中でのMQTTの役割やニフティクラウドMQTT開発に際して行ったもろもろを紹介します。

Publié dans : Internet
  • Login to see the comments

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

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

×