狠狠撸

狠狠撸Share a Scribd company logo
Mobility Technologies Co., Ltd.
Data Engineering Study #4
IoTデバイスデータ収集の難しい点
株式会社 Mobility Technologies
渡部 徹太郎
2020/11/04
Mobility Technologies Co., Ltd.
自己紹介
2
ID :fetaro
名前:渡部 徹太郎
学生:東京工業大学でデータベースと情報検索の研究
(@日本データベース学会)
職歴:
* 野村総合研究所(NRI)
- オンライントレードシステム基盤
- オープンソース技術部隊
* リクルートテクノロジーズ
- ビッグデータ分析基盤
* MobilityTechnologies
- データエンジニア
エディタ:emacs派→ InteliJ派
趣味:麻雀、自宅サーバ
日本AWSユーザ会(JAWS)
ビッグデータ支部長
やってました
著書
Mobility Technologies Co., Ltd.
Mobility Technologiesの紹介
3
配車関連事業
広告決済事業 乗務員向けソリューション事業
DRIVE CHART?ドラレコ事業 次世代向けR&D事業
Mobility Technologies Co., Ltd.
ドライブレコーダ
? システム概要
ドライブレコーダのデータを収集している
4
アップロード
プログラム
インター
ネット
Wifi
LB
収集 処理
アクセス
ポイント
ルータドラ
レコ
ドラ
レコ
ドラ
レコ
速度
センサ
GPS
センサ
カメラ
分散キュー
Wifi
タクシー
JapanTaxiドライブレコーダv4の写真
Mobility Technologies Co., Ltd.
? IoTデバイスからのデータ収集はWebのデータ収集とは違う!
1. バイナリデータを扱う
2. CPUアーキテクチャはx86/x64とは限らない
3. プログラムのサイズに容量制限がある
4. ネットワークは切れることがある
5. ネットワーク帯域は無限ではない
6. 電源は落ちることがある
7. 電力は有限である
8. ログは見ることができない
9. アップデートは一大イベント
10. 時間は正しいとは限らない
「エンジニアの総合格闘技」と呼ばれるほど、多種多様な知識が必要となる
IoTデバイスからのデータ収集は一味違う
5
Mobility Technologies Co., Ltd.
? バイナリファイルとは
? 01の配列
? どのように読むか規定されていない
? パースが必要
? プログラミング言語のビット演算をつかう
? 論理積 (&) 論理和 (|) ビット反転 (~)
右シフト(>>) 左シフト (<<)
? ハマった箇所
? Floatが変な値になる
? →リトルエンディアンとビッグエンディアン
のとり違い!
? -z方向加速度が常に一定の値を示してしまう
? →重力加速度だった!
バイナリデータを扱う
6
1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0
0 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 1 0 1 1 0 0 0 0 1 1 1 0 0
1 0 1 0 0 0 1 1 0 1 0 0 1 0 1 1
Webの場合 IoTデバイスの場合
データ形式 JSON, CSV, DBのテーブル バイナリファイル
タイムスタンプ
GPS緯度
GPS経度
各種フラグ
X方向加速度 -X方向加速度 y方向加速度 -y方向加速度
空き
パース
Mobility Technologies Co., Ltd.
CPUのアーキテクチャはx86/x64とは限らない
7
Webの場合 IoTデバイスの場合
CPU
アーキテクチャ
x86/x64 ARM
(が多い)
? CPUアーキテクチャとは主に2種類ある
? x86/x64 : サーバ、パソコン
? ARM : IoTデバイス、スマートフォン
? 難しい箇所
? MacOSやクラウドの仮想マシンでコンパイルしたバイナリは動かない
? →クロスコンパイルが必要
? どうやってクロスコンパイルするか
? Go言語やRustが開発しやすい
? →JapanTaxiドライブレコーダではメモリ管理に厳格なRust言語を採用
Mobility Technologies Co., Ltd.
プログラムのサイズに制限がある
8
Webの場合 IoTデバイスの場合
プログラムの
サイズ
気にしたこと無い。
磁気ディスクやSSDの容量は
100 Gbyte以上ある。
フラッシュディスクは16Gbyte?
64Gbyte程度
? 難しい箇所
? プログラムのコンパイル後のサイズを気にする必要がある
? ライブラリは潤沢には使えない
? →他のモジュールと同じライブラリを使う
? 開発言語は複数使えない
? →Rust言語のみ
Mobility Technologies Co., Ltd.
? 難しい箇所
? ネットワークは常に切れる想定で開発する必要がある
? リトライを仕込む
? サーバ側でどこまで処理したかを管理し、再接続時にレジュームできるようにする
? ハマった箇所
? 無線通信が干渉する
? Wifiの2.4GHz帯の電波は、他のwifi機器やbluetooth機器と干渉する
? →デバイス間のチャンネル調整が必要
? 無線電波が弱い
? →天井がないと電波が反射が少ない
ネットワークは切れることがある
9
Webの場合 IoTデバイスの場合
通信品質 安定
たまにパケットが落ちるぐらい
不安定
場所によって切れる
Mobility Technologies Co., Ltd.
? 難しい箇所
? 通信帯域的&コスト的に、
全てのドライブレコーダの動画をアップロードすることはできない
? →業務要件を加味して必要最小限な動画だけアップロードするようにする
? →全てのデータが取れない前提でアプリケーションを組む
? 同時に全台のデバイスのデータを全力でアップロードできない
? →アップロードタイミングを制御することは難しいため、タイムアウト指数的に増やしていきで
きるだけ救うようにする
ネットワーク帯域は有限である
10
Webの場合 IoTデバイスの場合
通信帯域 1Gbps?10Gbps Wifi: 50Mbps?500Mbps
(SIM: 10Mbps?100Mpbs)
料金 固定料金
(従量課金だとしても安い)
従量課金でしかも高い
Mobility Technologies Co., Ltd.
電源は落ちることがある
11
? 難しい箇所
? 電源が落ちたときを想定して開発する
? 電源が供給されなくなると、完全停止する前にデバイス側からシグナルを受信するので、
それをTRAPして適切な終了処理を書く(ファイルを閉じる等)
Webの場合 IoTデバイスの場合
電源の有無 ほとんど気にしない。
インフラ側で吸収してくれる
常に電源が落ちることを想定す
る
Mobility Technologies Co., Ltd.
電力は有限である
12
? 難しい箇所
? 消費電力を抑える
? エンジンがオンの場合はよいが、オフの場合はバッテリーの電力を用いた動作になる
? 長時間の起動はバッテリーあがりを引き起こす可能性がある
? 車との調整が必要
? 最大起動時間を決めて、それ以内に処理を終わらせるようにする
Webの場合 IoTデバイスの場合
消費電力 え?なんですかそれ? 省電力を心がける。
起動時間を気にする。
Mobility Technologies Co., Ltd.
? 難しい箇所
? エラー内容をサーバに返す前に死なれると何が起きていたかわからない
? ログにしかエラー内容は出力されない
? デバイスに接続してログを確認するしかない
? SSHサーバは入っていないため、SSH接続はできない
? タクシー車両に行きコンソールケーブルを接続して参照する必要あり
ログは見ることができない
13
Webの場合 IoTデバイスの場合
ログの参照 Cloud watch ポチー
ssh ポチー
現地にいってデバイスに物理接
続
Mobility Technologies Co., Ltd.
? 難しい箇所
? OTA(Over The Air)による自己アップデートシステムの整備が必須
? デバイス側がオンラインになったときに、アップロードプログラムを確認し、あれば自
身を更新する仕組み
? すべてのモジュール更新がOTAでできるわけではない
? インストールメディアをいれたSDカードを持ってタクシー車両に行き、SDカードをド
ライブレコーダに指してインストール作業が必要
? 数百台の作業になることもあり、人海戦術となる
アップデートは一大イベント
14
Webの場合 IoTデバイスの場合
デプロイの方法 git pull ポチー OTA (Over The Air)
or
人海戦術
Mobility Technologies Co., Ltd.
? ハマった箇所
? 2000年のログが送られてくる
? IoTデバイスのマザーボードには時計が内蔵されていないため、起動直後は2000年1月1
日になる
? GPS等を介して時刻を取得すると、正しい時刻になる
時間が正しいとは限らない
15
Webの場合 IoTデバイスの場合
時刻同期 マザーボードに時計がある。
NTPで常に同期。
デバイスに時計があるとは限ら
ない
Mobility Technologies Co., Ltd.
? Webのデータ収集とIoTデバイスのデータ収集は必要なスキルセットが違う!
? バイナリデータの扱い
? クロスコンパイル?組み込みプログラミング
? ハードウェアの知識
? ネットワークの知識
? 電源への配慮
? ログ参照やアップデートへの考慮
? 時計への配慮
まとめ
16
文章·画像等の内容の無断転載及び複製等の行為はご遠慮ください。
Mobility Technologies Co., Ltd.
17
仲間募集中!

More Related Content

滨辞罢テ?ハ?イステ?ータ収集の难しい点

  • 1. Mobility Technologies Co., Ltd. Data Engineering Study #4 IoTデバイスデータ収集の難しい点 株式会社 Mobility Technologies 渡部 徹太郎 2020/11/04
  • 2. Mobility Technologies Co., Ltd. 自己紹介 2 ID :fetaro 名前:渡部 徹太郎 学生:東京工業大学でデータベースと情報検索の研究 (@日本データベース学会) 職歴: * 野村総合研究所(NRI) - オンライントレードシステム基盤 - オープンソース技術部隊 * リクルートテクノロジーズ - ビッグデータ分析基盤 * MobilityTechnologies - データエンジニア エディタ:emacs派→ InteliJ派 趣味:麻雀、自宅サーバ 日本AWSユーザ会(JAWS) ビッグデータ支部長 やってました 著書
  • 3. Mobility Technologies Co., Ltd. Mobility Technologiesの紹介 3 配車関連事業 広告決済事業 乗務員向けソリューション事業 DRIVE CHART?ドラレコ事業 次世代向けR&D事業
  • 4. Mobility Technologies Co., Ltd. ドライブレコーダ ? システム概要 ドライブレコーダのデータを収集している 4 アップロード プログラム インター ネット Wifi LB 収集 処理 アクセス ポイント ルータドラ レコ ドラ レコ ドラ レコ 速度 センサ GPS センサ カメラ 分散キュー Wifi タクシー JapanTaxiドライブレコーダv4の写真
  • 5. Mobility Technologies Co., Ltd. ? IoTデバイスからのデータ収集はWebのデータ収集とは違う! 1. バイナリデータを扱う 2. CPUアーキテクチャはx86/x64とは限らない 3. プログラムのサイズに容量制限がある 4. ネットワークは切れることがある 5. ネットワーク帯域は無限ではない 6. 電源は落ちることがある 7. 電力は有限である 8. ログは見ることができない 9. アップデートは一大イベント 10. 時間は正しいとは限らない 「エンジニアの総合格闘技」と呼ばれるほど、多種多様な知識が必要となる IoTデバイスからのデータ収集は一味違う 5
  • 6. Mobility Technologies Co., Ltd. ? バイナリファイルとは ? 01の配列 ? どのように読むか規定されていない ? パースが必要 ? プログラミング言語のビット演算をつかう ? 論理積 (&) 論理和 (|) ビット反転 (~) 右シフト(>>) 左シフト (<<) ? ハマった箇所 ? Floatが変な値になる ? →リトルエンディアンとビッグエンディアン のとり違い! ? -z方向加速度が常に一定の値を示してしまう ? →重力加速度だった! バイナリデータを扱う 6 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 0 1 1 0 1 0 0 1 0 1 1 Webの場合 IoTデバイスの場合 データ形式 JSON, CSV, DBのテーブル バイナリファイル タイムスタンプ GPS緯度 GPS経度 各種フラグ X方向加速度 -X方向加速度 y方向加速度 -y方向加速度 空き パース
  • 7. Mobility Technologies Co., Ltd. CPUのアーキテクチャはx86/x64とは限らない 7 Webの場合 IoTデバイスの場合 CPU アーキテクチャ x86/x64 ARM (が多い) ? CPUアーキテクチャとは主に2種類ある ? x86/x64 : サーバ、パソコン ? ARM : IoTデバイス、スマートフォン ? 難しい箇所 ? MacOSやクラウドの仮想マシンでコンパイルしたバイナリは動かない ? →クロスコンパイルが必要 ? どうやってクロスコンパイルするか ? Go言語やRustが開発しやすい ? →JapanTaxiドライブレコーダではメモリ管理に厳格なRust言語を採用
  • 8. Mobility Technologies Co., Ltd. プログラムのサイズに制限がある 8 Webの場合 IoTデバイスの場合 プログラムの サイズ 気にしたこと無い。 磁気ディスクやSSDの容量は 100 Gbyte以上ある。 フラッシュディスクは16Gbyte? 64Gbyte程度 ? 難しい箇所 ? プログラムのコンパイル後のサイズを気にする必要がある ? ライブラリは潤沢には使えない ? →他のモジュールと同じライブラリを使う ? 開発言語は複数使えない ? →Rust言語のみ
  • 9. Mobility Technologies Co., Ltd. ? 難しい箇所 ? ネットワークは常に切れる想定で開発する必要がある ? リトライを仕込む ? サーバ側でどこまで処理したかを管理し、再接続時にレジュームできるようにする ? ハマった箇所 ? 無線通信が干渉する ? Wifiの2.4GHz帯の電波は、他のwifi機器やbluetooth機器と干渉する ? →デバイス間のチャンネル調整が必要 ? 無線電波が弱い ? →天井がないと電波が反射が少ない ネットワークは切れることがある 9 Webの場合 IoTデバイスの場合 通信品質 安定 たまにパケットが落ちるぐらい 不安定 場所によって切れる
  • 10. Mobility Technologies Co., Ltd. ? 難しい箇所 ? 通信帯域的&コスト的に、 全てのドライブレコーダの動画をアップロードすることはできない ? →業務要件を加味して必要最小限な動画だけアップロードするようにする ? →全てのデータが取れない前提でアプリケーションを組む ? 同時に全台のデバイスのデータを全力でアップロードできない ? →アップロードタイミングを制御することは難しいため、タイムアウト指数的に増やしていきで きるだけ救うようにする ネットワーク帯域は有限である 10 Webの場合 IoTデバイスの場合 通信帯域 1Gbps?10Gbps Wifi: 50Mbps?500Mbps (SIM: 10Mbps?100Mpbs) 料金 固定料金 (従量課金だとしても安い) 従量課金でしかも高い
  • 11. Mobility Technologies Co., Ltd. 電源は落ちることがある 11 ? 難しい箇所 ? 電源が落ちたときを想定して開発する ? 電源が供給されなくなると、完全停止する前にデバイス側からシグナルを受信するので、 それをTRAPして適切な終了処理を書く(ファイルを閉じる等) Webの場合 IoTデバイスの場合 電源の有無 ほとんど気にしない。 インフラ側で吸収してくれる 常に電源が落ちることを想定す る
  • 12. Mobility Technologies Co., Ltd. 電力は有限である 12 ? 難しい箇所 ? 消費電力を抑える ? エンジンがオンの場合はよいが、オフの場合はバッテリーの電力を用いた動作になる ? 長時間の起動はバッテリーあがりを引き起こす可能性がある ? 車との調整が必要 ? 最大起動時間を決めて、それ以内に処理を終わらせるようにする Webの場合 IoTデバイスの場合 消費電力 え?なんですかそれ? 省電力を心がける。 起動時間を気にする。
  • 13. Mobility Technologies Co., Ltd. ? 難しい箇所 ? エラー内容をサーバに返す前に死なれると何が起きていたかわからない ? ログにしかエラー内容は出力されない ? デバイスに接続してログを確認するしかない ? SSHサーバは入っていないため、SSH接続はできない ? タクシー車両に行きコンソールケーブルを接続して参照する必要あり ログは見ることができない 13 Webの場合 IoTデバイスの場合 ログの参照 Cloud watch ポチー ssh ポチー 現地にいってデバイスに物理接 続
  • 14. Mobility Technologies Co., Ltd. ? 難しい箇所 ? OTA(Over The Air)による自己アップデートシステムの整備が必須 ? デバイス側がオンラインになったときに、アップロードプログラムを確認し、あれば自 身を更新する仕組み ? すべてのモジュール更新がOTAでできるわけではない ? インストールメディアをいれたSDカードを持ってタクシー車両に行き、SDカードをド ライブレコーダに指してインストール作業が必要 ? 数百台の作業になることもあり、人海戦術となる アップデートは一大イベント 14 Webの場合 IoTデバイスの場合 デプロイの方法 git pull ポチー OTA (Over The Air) or 人海戦術
  • 15. Mobility Technologies Co., Ltd. ? ハマった箇所 ? 2000年のログが送られてくる ? IoTデバイスのマザーボードには時計が内蔵されていないため、起動直後は2000年1月1 日になる ? GPS等を介して時刻を取得すると、正しい時刻になる 時間が正しいとは限らない 15 Webの場合 IoTデバイスの場合 時刻同期 マザーボードに時計がある。 NTPで常に同期。 デバイスに時計があるとは限ら ない
  • 16. Mobility Technologies Co., Ltd. ? Webのデータ収集とIoTデバイスのデータ収集は必要なスキルセットが違う! ? バイナリデータの扱い ? クロスコンパイル?組み込みプログラミング ? ハードウェアの知識 ? ネットワークの知識 ? 電源への配慮 ? ログ参照やアップデートへの考慮 ? 時計への配慮 まとめ 16

Editor's Notes

  1. 1:00
  2. ~3:00 60sec