SINETStreamによるIoTアプリケーション開発⽀援
https://www.sinetstream.net/

⽵房 あつ⼦

国⽴情報学研究所
2020年10⽉9⽇(⾦) ADVNET2020© 2020 National Institute of Informatics

1

SINET広域データ収集基盤（モバイルSINET）• 超⾼速学術ネットワークSINETにモバイル機能を搭載• 隔離されたモバイルネットワークをSINETに直結してセキュアなネットワーク環境（VPN）を研究プロジェクトごとに提供• 多様なデータ処理環境との連携で最先端のIoT系研究を⽀援
4+

'%+e "OQIfU;)#,<EN8`C6/.0S:\Xa
2-3*86?@B;TK

A+

""

#,</)%$&86
 

"

""

<'.1

" "" 5 MV !
0(;7Y]L=[Z_,DW

G.

34>PH7"

=  F1
@5?K :+>9=0,< !=2^9R3Z

AJdb*

3Z&($!cg3© 2020 National Institute of Informatics

https://www.sinet.ad.jp/wadci

2

IoTアプリケーション実験
情報系以外の研究者をいかに⽀援するか︖

NIIで実施したIoT実証実験第１期の成果
国⽴情報学研究所 学術情報基盤オープンフォーラム2020
https://www.nii.ac.jp/openforum/2020/day1_sinet2.html

3

SINETStreamでIoTアプリ開発⽀援• IoTアプリのための共通APIを提供• メッセージングシステムを意識せずIoTアプリを容易に開発可能• データの収集・蓄積・解析に必要な機能を提供• 安全確実なデータ収集，認証・認可，暗号化，メトリクス収集  !"&$%#%%


© 2020 National Institute of Informatics

% 4

活⽤事例１: オンライン動画像解析• モバイル網とクラウドの計算資源をSINETで安全に接続• クラウドでビッグデータの収集と⾼速リアルタイムデータ解析>-)CI!9D!
GPU or HPC nodes&@
YOLO v3
OpenPose
7G

Storage
Data

Data#0?A2+
HPC nodes

Kafka

3/:=>-*CI!9D

Storage
Data

Data

Data

YOLOv3.4,8B
"F!
SINET
SIM

OpenPose.<EH$#05%'(1;6,YOLO v3 (https://pjreddie.com/darknet/yolo/)
Openpose (https://github.com/CMU-Perceptual-Computing-Lab/openpose)© 2020 National Institute of Informatics

 

5

活⽤事例２: 室内環境監視ライブデモ
&%#54,
6=:#78!2;
AWS (Cloud)    Temperature
Humidity  Temperature& Humidity
Sensor

S3
GitHub Pages

.3/!
$('<0)-"&%*&%

>1?1

 +-"&%) "6=:

>1

>1?1&%#
94© 2020 National Institute of Informatics?1

https://www.sinetstream.net/docs/livedemo/livedemo.html

6活⽤事例３: ライフサイエンス• 近堂徹先⽣,町澤昌宏先⽣[広島⼤学]他
⾼次ライフサイエンス情報の安全な収集のためSINETStreamを活⽤
SINETStreamのセキュリティ機能活⽤ #$" +
.*-#$")"#+$'


&%
!

'

"#

© 2020 National Institute of Informatics

&%
!

%

',/!&(近堂徹先⽣＠広島⼤ 提供

7活⽤事例４: スマホセンサデータ解析• スマートフォン（Android）のセンサからのデータ収集・蓄積・可視化• スマホの多様なセンサ情報の収集を⽀援するソフトウェアも提供[孫ほか，DICOMO2020])$,B.6<8=5
KibanaElasticsearch  FAG1!+#"

'&   !++#">@;D(%*HG1
E1
7C1

,3

© 2020 National Institute of Informatics

9-/04?:28

SINETStreamソフトウェア• 広域データ収集・解析プログラム開発⽀援ソフトウェア
パッケージ• SINETStream（Linux⽤ライブラリ）• 2019年12⽉にv1.0リリース• PythonライブラリとJavaライブラリを提供• SINETStream Android版 New!

• 2020年10⽉8⽇ v1.4でリリース• AAR (Android ARchive)形式で提供（Java，Kotlin対応）© 2020 National Institute of Informatics

9

SINETStreamソフトウェア• 広域データ収集・解析プログラム開発⽀援ソフトウェア
パッケージ• SINETStream（Linux⽤ライブラリ）• 2019年12⽉にv1.0リリース• PythonライブラリとJavaライブラリを提供• SINETStream Android版 New!

• 2020年10⽉8⽇ v1.4でリリース• AAR (Android ARchive)形式で提供（Java，Kotlin対応）© 2020 National Institute of Informatics

10

SINETStreamの概念図• トピックベースのPub-Sub型⾮同期メッセージングモデル• ブローカを介してデータをWriter，Reader間で送受信• プログラムの可搬性のため，ブローカ依存パラメータは設定ファイルで定義

W-APIBroker
Pub-Sub
ServiceW-API© 2020 National Institute of Informatics

Topic B

ReaderReader

MQTT
Kafka:

WriterServiceR-API

Massages
Topic A
Topic B

Writer

解析プログラム側（Subscriber）

SINETStream

R-API

Writer

W-API

センサ／IoTデバイス側（Publisher）

DB /Storage

Topic A

StreamFramework
11

SINETStream Writer/Reader API
Python，JavaのAPIを提供// Reader programfrom sinetstream import MessageReader

writer = MessageWriter('service-1', 'topic-1')
with writer as f:f.publish(b'Hello! This is the 1st message.')f.publish(b'Hello! This is the 2nd message.')reader = MessageReader('service-1', 'topic-1')
with reader as f:
for msg in f:print(msg.value)

Topic B 

© 2020 National Institute of Informatics

 

Topic B

Massages
Topic A# Service設定ファイル
service-1:
Kafkaパラメータ
Topic A
type: kafka
brokers:
- kafka-1:9092
service-2:
MQTTパラメータ
type: mqtt
brokers: 192.168.2.105:1883

// Writer programfrom sinetstream import MessageWriter12同期・⾮同期APIの提供• 同期API:• メッセージごとに送受信完了を確認• 応答時間（遅延）を重視するIoTアプリ向け• ⾮同期API• メッセージの送受信完了はコールバックで確認• スループットを重視するIoTアプリ向け© 2020 National Institute of Informatics

13

SINETStreamのセキュリティ機能• 認証• ユーザ（センサ／解析プログラム）の接続を許可• TLSのクライアント／サーバ認証，パスワード認証• 認可• トピックに対するユーザの読み書きを制限• 通信，データの暗号化• TLSで通信の暗号化
à ⽣データをクラウド• SINETStream独⾃に提供するデータ暗号化 ストレージに置かない（注）認証・認可，TLSはブローカもサポートが必要
ネットワーク隔離

モバイルSINET (VPN)

Yes

VPN + 通信暗号化

Yes

VPN + データ暗号化

Yes

VPN + 通信・データ暗号化

Yes© 2020 National Institute of Informatics

通信時の安全性

データの安全性

Yes
Yes
Yes

医療データ等，機微情報を扱うアプリで活⽤

Yes
14

SINETStreamのメトリクス収集機能• メッセージ送受信に関するメトリクス情報を収集・提供• SINETStream内でメッセージの数，サイズ，エラー数をカウント
à 通信負荷をかけずに収集可能• 通信レート，最⼩／平均／最⼤メッセージサイズ，エラーレート等が取得可能
from sinetstream import MessageReader
reader = MessageReader('service-1', 'topic-001')
with reader as f:count = 0
for msg in f:count += 1
if (count == 10): #10メッセージごとに受信レート表⽰
count = 0m = reader.metrics# 累積統計情報取得
reader.reset_metrics() #カウンターリセット
print(f'COUNT/s: {m.msg_count_rate}') #受信数/秒を出⼒
print(f'BYTES/s: {m.msg_bytes_rate}') #受信量/秒を出⼒© 2020 National Institute of Informatics

15多様なメッセージブローカに対応• SINETStreamのSPI(Service ProviderInterface) を実装したプラグインの開発で，複数ブローカに対応• 現在KafkaとMQTTのプラグインを提供• エッジノードの活⽤や5Gに最適化された実装への応⽤も可能© 2020 National Institute of Informatics

SINETStreamソフトウェア
Application Programming Interface (API)   


Service Provider Interface (SPI)
Kafka 

MQTT 

Apache Kafka

Eclipse Paho

16

SINETStreamチュートリアル
1. SINETStreamのインストール
2. メッセージングシステム(Kafka, MQTT)に対して
SINETStreamを⽤いたメッセージの送受信• WriterはSINETStreamを⽤いてメッセージをBrokerに送信• ReaderはSINETStreamを⽤いてBrokerからメッセージを受信• Brokerは WriterとReaderの間でメッセージを集約、配送

Kafka、MQTTブローカ(Mosquitto)はコンテナで簡単に起動

教育⽤途での利⽤も可© 2020 National Institute of Informatics

https://www.sinetstream.net/docs/tutorial/17

SINETStreamソフトウェア• 広域データ収集・解析プログラム開発⽀援ソフトウェア
パッケージ• SINETStream（Linux⽤ライブラリ）• 2019年12⽉にv1.0リリース• PythonライブラリとJavaライブラリを提供• SINETStream Android版 New!

• 2020年10⽉8⽇ v1.4でリリース• AAR (Android ARchive)形式で提供（Java，Kotlin対応）© 2020 National Institute of Informatics

18

SINETStream Android版• SINETStream Android
コアライブラリ

サンプルアプリ

設定ファイルSS Android Helper• SINETStream Android
Helperライブラリ• SINETStream Androidサン
プルアプリ（仮称、開発中）

SS Android© 2020 National Institute of Informatics

各種センサ

ブローカー

19

SINETStream Android版• SINETStream Android
コアライブラリ• Linux版と同等の機能を提供するコアライブラリ• 提供中︓⾮同期R/W API，認証認可，TLS• 提供予定︓データ暗号化，メトリクス収集• Android版の制限• Androidでは同期APIは利⽤不可• KafkaのAndroid⽤ライブラリ無し
à MQTTプラグインのみ提供(Eclipse Pahoを利⽤
https://www.eclipse.org/paho/）
SS Android© 2020 National Institute of Informatics

20

SINETStream Android版• SINETStream Android
Helperライブラリ• Android端末に装備されている多種センサ情報の収集を容易にするライブラリ• SensorController

SS Android Helper• 各種センサの操作に必要なAPIをユーザに提供• 利⽤可能なセンサ種別⼀覧提供，ネットワーク送出間隔設定可能à 負荷抑制のための制御可能• SernsorService

各種センサ情報の収集・加⼯と，加⼯データをパブリッシュする機能モジュール© 2020 National Institute of Informatics

21

Android Helperで⽣成するセンサ情報• 取得したセンサ情報の他，IoTアプリで必要とされる情報も付与してJSON形式で送信• 送信する情報• Android端末情報• 位置情報• 複数センサ情報• タイムスタンプ© 2020 National Institute of Informatics

複数センサに対応

22

SINETStream Android版• SINETStream Androidサン
プルアプリ（仮称、開発中）

サンプルアプリ• SINETStreamヘルパーライ
ブラリを利⽤したアプリ• 開発不要、すぐに使える︕© 2020 National Institute of Informatics

23

まとめ• 広域データ収集・解析プログラム開発⽀援ソフトウェア
パッケージSINETStreamを開発• IoTアプリのための共通APIを提供• データの収集・蓄積・解析に必要な機能を提供• SINETStreamの開発状況• 2019年12⽉ v1.0 - Python, Java APIを提供• 2020年3⽉ v1.1，6⽉ v1.2，8⽉ v1.3リリース• 2020年10⽉8⽇ v1.4 Android版リリース• 以降の予定 – Androidサンプルアプリ, ⾼度な安全機能，5G対応，...

SINETStream公開中︓https://www.sinetstream.net/• オープンソース（Apache License v2.0）で公開• チュートリアル，ライブデモあり• ユーザ登録をお願いいたします（MLへの登録，最新情報案内）© 2020 National Institute of Informatics

24