fltech - 富士通研究所の技術ブログ

富士通研究所の研究員がさまざまなテーマで語る技術ブログ

ワイパー動作による降雨の分析?Dracenaで実現する柔軟なリアルタイムデータ処理

f:id:fltech:20200415210812p:plain

初めまして。富士通研究所サイバーフィジカル融合基盤プロジェクトのymokです。

この投稿では、我々が研究を進めているリアルタイムデータ処理技術である Dracena(Dynamically-Reconfigurable Asynchronous Consistent EveNt-processing Architecture)のユースケースを題材として、Dracenaを利用する際のデータ処理の考え方を紹介します。

具体的にはコネクテッドカーからアップロードされるデータから、地区の降雨状況を推定するリアルタイムGIS解析ユースケースをお伝えします。

Dracenaの特徴

まず、Dracenaは、次の特徴を有する分散ストリーム処理技術です。

  • ヒトやモノ等のオブジェクト単位でのステートフルなストリーム処理
  • 処理プラグインの動的な追加と更新
  • 高いスケール性能と耐障害性性能

ここで、「オブジェクト」という言葉が登場しています。Dracenaにおけるオブジェクトとは、内部にステートを保持し、そのステートの変化によって処理を行うプラグインを持つ一つの処理単位であり、実世界における人やモノ、場所と一対一で対応するものです。

Dracenaでは、このオブジェクトを柔軟に組み合わせることで、入力データに対するストリーム処理の連なり(処理パイプライン)を定義します。

Dracenaによる降雨状況のリアルタイム推定

それでは、具体的にどのようにオブジェクトを組み合わせて処理パイプラインを設計するのか、ユースケースを例にとって示したいと思います。

想定するユースケース

突発的な雨の発生の迅速把握を目的として、大量のコネクテッドカーからアップロードされるワイパーの作動状況から、地理メッシュ毎に現在の降雨の有無を推定し、その結果を数秒毎に出力するサービスを想定します。

f:id:fltech:20200415210812p:plain
リアルタイム降雨推定ユースケースのイメージ

想定する入力データ

全てのコネクテッドカーから、GPSによって取得した車両の走行位置(緯度、経度)、およびワイパー作動の有無(true/false)が毎秒アップロードされ、Dracenaに入力されるものとします。車両がアップロードするデータの例を下に示します。

{
  "oid": "car001",
  "body": {
    "lat":35.6600155318143,
    "lon":139.7174639369001,
    "wiper": true
  }
}

オブジェクト設計

今回のユースケースでは、1台1台の車両に対応し、アップロードされてきた車両データを受信する「車両オブジェクト」と、地理メッシュの各メッシュに対応する「エリアオブジェクト」によってサービスを構成します。

f:id:fltech:20200415210946p:plain
オブジェクト構成

各オブジェクトが保持するステートは次の通りです。

  • 車両オブジェクト
    • lat, lon: 現在位置(緯度経度)
    • wiper: ワイパー作動状況(true/false)
  • エリアオブジェクト
    • rain: 降雨状況(true/false)

また、各オブジェクトのプラグインの処理は次の通りです。

プラグインAの処理

ワイパー作動状況が true であれば、現在位置から自車両の居るエリアを算出し、そのエリアオブジェクトに対してワイパー作動を通知。

プラグインBの処理

過去一定時間内に車両からワイパー作動通知が送信されてきた場合に、降雨状況を true に更新。送信されてこなかった場合は false に更新。

これらのオブジェクトを下のように繋ぐことで、車両オブジェクトごとに入力されたデータから、ワイパーの発生状況をエリアごとに集計する処理を実行することができます。

f:id:fltech:20200415211018p:plain
オブジェクトを繋ぎ合わせることでサービスを構成

出力結果を可視化したイメージは下の通りです。

f:id:fltech:20200415211218p:plain
出力結果の可視化イメージ(Leaflet | Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors)

オブジェクトは下のように、Dracenaを構成する計算ノード群に配備され、大量のデータ入力に対する処理負荷を分散しながら稼働します。

f:id:fltech:20200415211259p:plain
オブジェクトの分散配備

Dracenaではこのように、オブジェクトを組み合わせることでストリーム処理を実行するサービスを迅速に作り出すことができます。さらにサービスを本格的に運用するにあたって、次のようなメリットもあります。

  • 大規模化が容易
    • 日本全国という広いエリア、かつ数十万~数百万台という大量の車両を対象とした規模に、サービスを容易に拡大することができます。
  • サービスを停止することなく降雨推定のロジックを変更
    • 今回の例では降雨推定のロジックは、エリア内にワイパーを作動させている車両が存在する/しないかを判定するという単純なものでした。これを、例えば車両の存在台数も考慮し、降雨状況を尤度付で算出するといったロジックに変更する場合、その変更に係る作業・処理をサービス無停止で実行することができます。
  • 降雨状況を他のサービスで流用する
    • エリアオブジェクトに、他のオブジェクトやプラグインを継ぎ足すことで、エリアオブジェクトで求めた降雨状況の結果をもとに、さらに価値ある情報を生み出すことができます。例えば、「降雨状況」と、そのエリアを走る車両の「急制動状況」を融合し、そのエリアにおける運転危険レベルを算出するといった、サービスの発展が可能となります。

まとめ

今回は、「オブジェクト」というキーワードを中心に据え、 Dracena の上で動かすサービスの例を、降雨推定のユースケースを想定しながら紹介しました。今後はより詳細な技術的な内容も含めて Dracena に関する研究・開発状況について、一研究者の立場から発信していきたいと思います。