DX(デジタルトランスフォーメーション)の進展で存在感を増すGoogle Cloud。これを採用した、クラウドネイティブなアーキテクチャーのシステム構築とはどのようなものか。前回に続き、架空のドライブレコーダー専業メーカーC社が運転動画・運転特性の分析システムを構築するシナリオに沿って、Google Cloudを使ったIoT(インターネット・オブ・シングズ)・機械学習システムの構築方法を示す。
C社の運転動画・運転特性の分析システムは(1)機械学習を用いた分析、(2)ドライブレコーダーからのデータアップロード、(3)サムネイル生成などのイベントトリガー処理、(4)ウェブアプリケーションという大きく4つの機能で構成されている。前回はこのうち(1)機械学習を用いた分析について解説した。
今回は(2)ドライブレコーダーからのデータアップロードの機能を設計する。
アップロード対象のデータは運転特性データと動画データの2種類が存在する。動画は5分単位に分割されたMP4形式のファイルであり、ドライブレコーダー側で圧縮しても1ファイル当たり数百MBになり、運転特性データに比べてサイズが大きい。そのためドライブレコーダーのローカルストレージに一時保存し、運転終了後や交通事故発生時、ドライバーのアクションをトリガーにまとめてアップロードする。
運転特性データはドライブレコーダーから1分間隔で送信されるJSON形式のデータであり、1回にアップロードするデータ量は数十KB程度である。
サービス選定のポイント
動画データはGoogle Cloudの機械学習サービスの統合プラットフォームであるVertex AIのインプットおよびウェブアプリケーション上での動画再生に利用するため、Google CloudのオブジェクトストレージであるCloud Storageに保存し、運転特性データはVertex AIのインプットおよびアドホック分析に利用するためGoogle CloudのデータウエアハウスサービスであるBigQueryに保存することが決まっている。
この前提のもと、まずはGoogle Cloudでデータを受け取る部分のサービスを検討した。本番リリース後には数千~数万台のドライブレコーダーから同時にデータをアップロードする。そのため、データを受信するサービスには高いスケーラビリティーが求められる。
そこで、IoTデバイスの管理やデータの送受信に特化したGoogle CloudのマネージドサービスであるCloud IoT Coreの利用を検討した。Cloud IoT Coreは高いスケーラビリティーとパフォーマンスを備えており、本番リリース後のデバイス数にも耐えうるデータアップロード機能を実装できると判断した。そのため、ドライブレコーダーとの連携にはCloud IoT Coreを採用することとした。
次にCloud IoT Core で受け取ったデータをCloud StorageとBigQueryに保存する方法を検討した。Cloud IoT Coreは受け取ったデータをGoogle CloudのメッセージングサービスであるCloud Pub/Subを介して他のGoogle Cloudサービスに受け渡す仕様となっており、この仕様を活用した最適なデータ保存方法を検討する必要があった。
□運転特性データのアップロード
運転特性データはJSON形式であり、Cloud IoT CoreおよびCloud Pub/Subが直接受け取れるデータであるため、Cloud Pub/Subの連携先にETL(Extract/Transform/Load)処理を行うサービスを配置し、表形式に変換した上でBigQueryに保存する方法を検討した。
ETL処理はCloud StorageからBigQueryへのデータ書き込みと同様にCloud RunやCloud Functionsで実装できる。ただしCloud DataflowにはCloud Pub/Subが受け取ったJSON形式のメッセージを読み取り、BigQueryに書き込むための「Pub/Sub Topic to BigQuery」テンプレートが用意されており、今回はこのテンプレートをそのまま利用できる。そのため、ETL処理の開発を最小限に抑えることができるCloud Dataflowを採用した。これらの検討の結果、処理のイメージは図1の通りとなった。