広域データ収集・解析プログラム開発のための「SINETStream」の紹介
https://sinetstream.net/
⽵房 あつ⼦
国⽴情報学研究所
オープンソースシステムソフトウェア（OSSS）ワークショップ
2023年3⽉30⽇（⽊)© 2023 National Institute of Informatics

1

国⽴情報学研究所(NII)＝研究・教育＋事業
学術情報ネットワーク SINET

モバイルSINET①400Gbpsの全国展開と接続点の拡⼤• SINET6では全国を400Gbps*で整備し、その後トラフィック状況により適宜増強• 現DCに加え拡張DCを設置、また東京地区のDCを⾒直し、アクセス環境を改善＊沖縄は技術的な制約により当⾯100Gbpsベース
東京エリアは23区内の需要が⾮常に⼤きく、⽴川近辺
も⼤きいことから、トラフィック需要の偏りに対応するため、DCの配置を⾒直し
宇都宮

さいたま

つくば

旭川

柏

4

2
4

2

⽴川

8

2

1

1

4

1

1
4
1
11
1
4
⽂京 3
1 12 25
6
2 8
13

2
武蔵野

1 1

8
7

10

2

2

⾚字は加⼊機関数
相模原

広島

佐賀
松⼭

秋⽥
盛岡

⻑崎

⾼知
⿅児島

姫路

⼤分

熊本

⾦沢
福井

⼭形

徳島

神⼾
⼤阪
和歌⼭

京都

岐⾩

⼤津

彦根
奈良

津

仙台

富⼭
⻑岡

神岡

⾼松

帯広

上北

千葉

新潟

岡⼭

北⾒

⻘森

5
1

横浜

⿃取

北九州 宇部

室蘭

函館

品川

松江

福岡

札幌

松本

福島

⻑野
前橋
甲府 さいたま

郡⼭
宇都宮
⽔⼾

名古屋
静岡 相模原

岡崎

宮崎

那覇
宜野座

© 2023 National Institute of Informatics

浜松

沼津

柏
横浜 千葉

つくば

︓現⾏SINET DC
︓拡張/東京地区 SINET DC
︓400Gbps国内回線
︓100Gbps国内回線

112

IoTアプリケーション実験

情報系以外の研究者をいかに⽀援するか︖

NIIで実施したIoT実証実験第１期の成果© 2023 National Institute of Informatics

国⽴情報学研究所 学術情報基盤オープンフォーラム2020
https://www.nii.ac.jp/openforum/2020/day1_sinet2.html

3

SINETStream=ソフトウェアライブラリ• IoTアプリシステム開発のためのソフトウェアライブラリ• 安全・確実なIoTデータの収集・蓄積・解析に必要な機能を提供
データ

解析
プログラム

モバイルSINET+SINETStreamで，IoTシステム開発・
実験を⽀援

解析
プログラム

ストレージ

解析
プログラム
(オフライン)SINET以外でも使えます© 2023 National Institute of Informatics

4

SINETStream利⽤事例© 2023 National Institute of Informatics

5

SINETStream利⽤事例
脳波データ解析ライフサイエンスアプリ [広島⼤ 近堂先⽣，
町澤先⽣]


 
#$"

監視カメラ画像オンライン処理
処理前
遠隔カメラ画像

⼤学・研究機関

安全な
データ収集

クラウド

GPU or HPC nodes

HPC nodes

Kafka

Data



#$"



Data

Data

Data

Data

YOLOを⽤いた物体認識)"#+


⾼速データ
解析

Storage

Storage +
.*-

YOLO

OpenPose

処理後
遠隔カメラ画像

SINET
モバイル網

$'

カメラ付センサ


SINET SIM

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

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

"#

&%
!

%

⻑期間環境モニタリング'

0 02 ( )
S W

)

) -

Humidity

Temperature& Humidity
Sensor,/!&(R

OpenPoseを⽤いた特徴抽出

スマートフォンを⽤いたセンサデータ収集

I4
AWS (Cloud)Temperature-

⼤学 企業 地⽅公共団体
Raspberry Pi

(
- -

S3
GitHub Pages

A

P

Sensor App
SINETStream
Core

Tutorial Docker Container
Message Broker

Message Broker

Object Storage

Mosquitto

Kafka

MinIO

Kafka Connect 1

Kafka Connect 2

nginx

SINETStream
Helper

センサアプリ
画⾯
SW

Web Browser

Android
Sensors

Androidスマホ

Web Server

SINETStreamサーバ設定

JavaScript

可視化結果

Chart.js

Visualization

利⽤者PC

5
21302 ( )© 2023 National Institute of Informatics

6利⽤事例︓監視カメラ画像オンライン処理
処理後の
カメラ画像

YOLOを⽤いた物体認識

OpenPoseを⽤いた特徴抽出© 2023 National Institute of Informatics

処理前の
カメラ画像

Raspberry Pi
＋カメラ
＋ルータ

YOLO, https://pjreddie.com/darknet/yolo/
OpenPose, https://github.com/CMU-Perceptual-Computing-Lab/openpose

7

SINETStream利⽤事例︓多種センサデータ収集• 遠隔動物医療 [徳島⼤ 森松先⽣，⽵島先⽣]• 船上多種センサデータ収集 [東京海洋⼤ ⼤島先⽣＋NII]© 2023 National Institute of Informatics

8

遠隔動物医療での多種センサデータ収集 [徳島⼤]トレーラー型動物飼養保管・実験室，遠隔動物監視トレーラ

Raspberry Pi
Zero Wで実装済み

ケージ© 2023 National Institute of Informatics

森松先⽣，⽵島先⽣＠徳島⼤学 提供

⼿術台

9遠隔動物医療での多種センサデータ収集 [徳島⼤]Zabbixで収集・可視化

温度

湿度

照度

© 2023 National Institute of Informatics

森松先⽣，⽵島先⽣＠徳島⼤学 提供

10船上での多種センサデータ収集 [海洋⼤＋NII]• SINETStreamのサンプルアプリ利⽤• Androidスマホの多種センサ情報を収集す
るSensorアプリ• カメラ付Linux端末(Raspberry Pi)で
画像・通信スループット収集プログラム
à 開発不要，ダウンロード&設定で利⽤可能• 船上での多種センサデータ収集実験• 東京海洋⼤の練習船に設置• モバイルSINET経由でサーバに送信• 2022年10⽉の3⽇間の実験航海でAndroid 15種類，Linux 2種類のセンサ情報収集を確認（協⼒︓東京海洋⼤ ⼤島浩太先⽣）© 2023 National Institute of Informatics

選択した
センサ情報をクラウドへ送信SINETStreamセンサアプリで収集した
東京海洋⼤練習船の位置情報（2022年2⽉実験）
国⼟地理院提供の地理院タイルを加⼯して作成
https://maps.gsi.go.jp/development/ichiran.html

11船上での多種センサデータ収集 [海洋⼤＋NII]
ここに
設置

カメラ＋
ラズパイ
Sensor app+スマホ

協⼒︓東京海洋⼤© 2023 National Institute of Informatics

12

IoT処理の特徴© 2023 National Institute of Informatics

13

IoTシステムの構成
蓄積データ

3. IoTデータの蓄積・処理
データ収集
AI処理
サイバー空間（仮想空間）

クラウドにある
サーバ計算機
各種サービス
への適⽤

2. IoTデータの収集
ネットワーク

IoT
フィジカル空間（現実空間）© 2023 National Institute of Informatics

1. IoTデバイスでセンサデータを取得

サービスの提供，
OT (Operational
Technology)

制御・運⽤技術

IoTデバイス14

1. IoTデバイスでのセンサデータの取得
センサ種類

センサデータ

取得頻度（⽬安） データサイズ (⽬安)

温度計，湿度計

数値データ

数秒〜数分/回〜10 B (バイト)GPS，加速度計

ベクトルデータ

数ミリ秒〜数秒〜100 B

脳波計

⾏列データ

数百 Hz

〜数百 KB (キロB)(例: 30チャネルx計測数)(計測数/秒)

(1秒分)

カメラ

静⽌画

数秒〜数分/枚〜数 MB (メガB）

ビデオカメラHD動画

30 fps(枚/秒)〜数⼗ MB/秒

センサごとに取得頻度，データサイズが⼤きく異なる© 2023 National Institute of Informatics

15

2. IoTデータの収集／ネットワーク
センサ種類

センサデータ

取得頻度（⽬安） データサイズ (⽬安)

温度計，湿度計

数値データ

数秒〜数分/回〜10 B (バイト)GPS，加速度計

ベクトルデータ

数ミリ秒〜数秒〜100 B

脳波計

⾏列データ

数百 Hz

〜数百 KB (キロB)(例: 30チャネルx計測数)

(1秒分)

カメラ

静⽌画

数秒〜数分/枚〜数 MB (メガB）

ビデオカメラHD動画

30 fps(枚/秒)〜数⼗ MB/秒• ネットワーク(モバイル，Wi-Fi他)を介してIoTデータが送信される• IoTデータの使い⽅（画像認識，環境監視等）に応じて，必要な頻度，
サイズでのIoTデータ収集が必要
28• センサデータの送信頻度，サイズ 引⽤元︓総務省「⼯場向けワイヤレスIoT講習会座学講習テキスト」p.
https://smartiot-forum.jp/application/files/3515/6652/7825/wirelessiot-text_v1.pdf（検索⽇︓2023年1⽉25⽇）の調整と，適切なネットワークの選択が必要© 2023 National Institute of Informatics

16

2. IoTデータの収集／収集⽅法
Client-Server⽅式
IoTデバイスPublish-Subscribe (Pub-Sub)⽅式
サーバ

ClientClientIoTデバイス=出版側

サーバ＝購読側

Publisher

ServerPublisher

BrokerSubscriber

ClientPublisher• ClientとServerが直接送受信• 例︓Webサーバ (HTTP/HTTPS/REST)• Brokerを介してPubとSubが送受信• 例: メッセージブローカ (MQTT)
à IoTではPub-Sub⽅式がよく利⽤される© 2023 National Institute of Informatics

17

2. IoTデータの収集／Pub-Sub⽅式の特徴
IoTデバイスサーバ
Broker

温度1

Publisher1

Subscriber1

温度1

トピック

Publisher2

脳波2

画像1

温度
脳波計

画像3

Publisher3

画像3

画像
︓

画像1

Subscriber2

脳波2
画像3

画像1

Subscriber3• Brokerが複数Publisherからのメッセージを「トピック名」で交通整理àPublisherはBrokerのみに送信すればよいàBrokerに接続するだけでSubscriberは必要なトピックを購読できる
同じトピックのメッセージ複数のSubscriberが受信可能• ⼀般的なBrokerの実装では，メモリ上でデータをやり取りするのでオーバヘッド⼩• サーバは⾃⾝の処理（AIなど）に専念できる à 処理効率が⾼くなる© 2023 National Institute of Informatics

18

IoTシステムの実装例︓オンラインビデオ解析
IoTデバイス側

サーバ計算機側
画像ストリームVideo
CameraBroker

物体認識処理処理前画像1
画像ストリーム

Raspberry Pi

ネットワーク

Raspberry Pi
Video
Cameraクラウド

処理前画像2
処理後画像1

処理済

特徴抽出処理処理後画像2
処理済画像ストリーム

サーバ

GPUサーバGPUサーバ

可視化サーバ利⽤者環境© 2023 National Institute of Informatics

19

3. IoTデータの蓄積・処理
Subscriber

データを受け取ったらすぐに処理（例︓オンライン画像解析）

オンライン
処理

BrokerSubscriber
ストレージ

(ミニ）
バッチ処理

データを保存し，ある程度のデータが溜まったら処理（例︓統計処理，推論処理）

Apache Spark/Flink+HDFSのような
インタラクティブなデータ処理環境必要

Subscriber

オフライン/ そのままストレージに蓄積．
バッチ処理

ストレージ
© 2023 National Institute of Informatics

別のサーバが適宜データを利⽤（例︓農作物の成⻑条件解析など，
緊急性の低い解析処理）
従来のHPCクラスタで対応可能

20

SINETStreamの概要© 2023 National Institute of Informatics

21

SINETStreamの特徴• IoTシステム開発のためのソフトウェアライブラリを提供 [COMPSAC2021]• Java, Python, Android⽤共通APIを提供• バックエンドのメッセージブローカ／ストレージを意識せずアプリを容易に開発可能
API

API

Analysis
App.
App. Developer
App. = Application
W-API = Writer API
R-API = Reader API

SINETStream Architecture

Topic B

WriterService

BackendPub-Sub
Service

Topic B

MQTT

ReaderReaderKafka
S3
Storage

Topic A:

WriterR-API

WriterMessages
Topic A

R-API

• 認証・認可• 通信，データ暗号化• 圧縮／解凍• メトリクス収集 (通信／dropレート他)• 秘匿情報共有コンフィグサーバ [CloudNet2022]• チュートリアル，サンプルアプリの提供© 2023 National Institute of Informatics

NetworkApp. Developer

W-API

MQTTブローカ, Apache Kafka,
S3互換オブジェクトストレージ

SensorApp.

W-API• 共通APIからの安全確実なデータ収集• 多種ブローカ対応

SINETStream Overview

W-API• データの収集・蓄積・解析に必要な機能を提供

Storage/ DB

StreamFramework

22

SINETStream Writer/Reader API// Writer programfrom sinetstream import MessageWriter// 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)

•Massages
Topic A
Topic B-

Topic B
Topic A
© 2023 National Institute of Informatics



•Python版の例(Java版も同様)
同期・⾮同期API提供# Service設定ファイル
service-1:
Kafkaパラメータ
type: kafka
brokers:
- kafka-1:9092
service-2:
MQTTパラメータ
type: mqtt
brokers: 192.168.2.105:1883

23

100

0

© 2023 National Institute of Informatics
1.12
2.73

L-mqtt-nativS
L-mqtt-sinetA
47.73
59.16

M-kafka-sinetS
M-kafka-nativS

LAN環境
L-mqtt-nativA 5869.88

1.25

L-mqtt-sinetS

モバイル環境M-mqtt-nativA

throughput[MiB/s]

104.69131.9342.52

M-mqtt-nativS

M-mqtt-sinetA

46.4

M-mqtt-sinetS

10

1

0.01
100
1000
msgsz[B]3.5e+01

4.5e+01

nativeSsinetS
nativeAsinetA
5.9e+01

aws-kafka-plain-bw

5.9e+01

2.3e+01

2.5e+01

3.4e+00
3.1e+00

遅延

5.8e+00

1.2e+01100

3.2e-011000

3.3e-01

519.53366.06600

M-kafka-nativA

M-kafka-sinetA

300.86

Better 同期
API

62.53

500

L-kafka-nativA

L-kafka-sinetA

0.361

200

L-kafka-nativS

300

0.387

400

L-kafka-sinetS

Latency [ms]同期・⾮同期APIの提供• 同期API:• メッセージごとに送受信完了を確認• 応答時間（遅延）を重視するIoTアプリ向け• ⾮同期API• メッセージの送受信完了はコールバックで確認• スループットを重視するIoTアプリ向け
スループット ⾮同期
API
Better0.1

10000

LAN環境Kafka利⽤
24

SINETStream Android版• コアライブラリ• 基本的にJava/Python版と同等の機能を提供• ⾮同期APIのみ• MQTTブローカのみ• ヘルパーライブラリ• Android端末の多種センサのデータ収集・加⼯を⽀援• センサコントローラ• センサタイプ⼀覧提供• センサデータ送出間隔設定• センササービス• 各種センサデータを取得，蓄積し，指定間隔でJSON形式に加⼯して提供

Writer プログラム

Reader プログラム

publishセンサデータ収集
SINETStream Android ヘルパーライブラリ

subscribe

SINETStream Android コアライブラリ

SINETStream Android Helper API

SINETStream Android Async API

ロケーション
トラッカー

センサ
コントローラ

認証・認可

ロケーションサービス

センササービス

イベント管理JSON変換イベント管理ロケーション
管理

コンフィグ
ファイル
読み込み

Eclipse Paho

センサ管理

publishSensor

データ
暗号化

通信暗号化

メトリクス
収集
(未実装)

Android SystemGPS© 2023 National Institute of Informatics

ユーザアプリケーション
プログラム

ユーザアプリケーションプログラム

subscribe

MQTT-based Broker
25

SINETStreamのセキュリティ機能• 認証• ユーザ（センサ／解析プログラム）の接続を許可• TLSのクライアント／サーバ認証，パスワード認証• 認可• トピックに対するユーザの読み書きを制限• 通信，データの暗号化（注）認証・認可，TLSはブローカ実装でのサポートが必要• TLSで通信の暗号化• データ暗号化 (共通鍵で暗号化して送信，ブローカ内のデータも暗号化される)
ネットワーク隔離
モバイルSINET (VPN)

Yes

VPN + 通信暗号化

Yes

VPN + データ暗号化

Yes

VPN + 通信・データ暗号化

Yes© 2023 National Institute of Informatics

通信時の安全性

データの安全性

Yes
Yes
Yes

Yes
26

秘匿情報共有⽀援コンフィグサーバと対応ライブラリ
RDB

2つの機能を持つコンフィグサーバを開発

設定
情報• 設定情報の容易な配布• SINETStreamの設定情報(ブローカの種類，
アドレス，共通鍵等)の登録，共有• 対応ライブラリの利⽤で，複数のセンサプ
ログラムに⾃動(再)配布も可能

コンフィグサーバ
設定情報
の登録

設定
情報

• SINETStreamのデータ暗号化機能で⽤いる
共通鍵の管理• 研究グループメンバ間で共通鍵を共有可能

設定
情報

設定
情報

SINETStream

SINETStream

SINETStream

センサプログラム センサプログラム センサプログラム• Java版，Python版を2021年12⽉より公開• Android版はまもなく公開予定• 安全な秘匿情報共有

ブローカ

Secure KVS

共通鍵

コンフィグサーバ
共通鍵，メンバの登録

共通鍵情報は各⾃の公開鍵で暗号化して提供• 秘匿情報は暗号化されて設定情報に埋め込まれる© 2023 National Institute of Informatics

27

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}') #受信量/秒を出⼒© 2023 National Institute of Informatics

28

メッセージ圧縮／解凍機能
送信するセンサデータを圧縮／解凍する機能を提供• 圧縮機能を有するブローカはあるが，データ暗号化後の圧縮は効果が薄い
à SINETStreamで圧縮／解凍機能をサポート• データ通信量を低減できる︕• ただし，圧縮効果の検討が必要（圧縮・解凍時間増 vs. 通信データ量減）
SINETStream© 2023 National Institute of Informatics

解凍
BrokerR-API

Writer

W-API

圧縮

Reader

29

SINETStreamデモパッケージの公開
SINETStreamを⽤いた典型的なIoTシステムのプログラム，構築⼿順を公開
数値センサデータを扱うIoTシステム
センサ端末

クラウド／
学内サーバ
ZabbixKafka(例︓Raspberry Pi)

温度，湿度，CO2濃度

Elasticsearch +Grafana

徳島⼤学で利⽤

動画像を扱うIoTシステム
クラウド／
学内サーバ
センサ端末

Kafka

(例︓Raspberry Pi)

動画像を指定画素数，
フレーム数で切り出す

海上実験で利⽤© 2023 National Institute of Informatics

可視化
プログラム

YOLO
OpenPose

https://github.com/nii-gakunin-cloud/sinetstream-demo

30

SINETStream Android版サンプルアプリ• Android端末を⽤いたIoTアプリシステム構築を⽀援するため，コアライ
ブラリ，ヘルパーライブラリでアプリを開発• 研究・教育⽤途での利⽤を⽀援するチュートリアルも開発
テキスト送受信アプリ
SINETStream Android Echo
(Echo)

センサ情報収集アプリ
SINETStream Android Sensor
Publisher (Sensor)
海上実験で利⽤

ダウンロードと簡単な設定
のみで利⽤可能© 2023 National Institute of Informatics

31

センサアプリを⽤いたチュートリアルも公開• Android端末を⽤いたIoTアプリシステム構築を体験できる à ご活⽤ください︕• センサデータの受信，蓄積，可視化を⾏うサーバ⽤Dockerコンテナイメージを提供，システム構築容易• ⼿順︓サーバ設定àAndroid端末でアプリ設定，実⾏à利⽤者PCで結果確認
Sensor App
SINETStream
Core

Tutorial Docker Container
Message Broker

Message Broker

Object Storage

Mosquitto

Kafka

MinIO

SINETStream
HelperWeb Browser
Kafka Connect 1

センサアプリ
画⾯

Kafka Connect 2

Android
Sensors

Androidスマホ© 2023 National Institute of Informatics

nginx
Web Server

SINETStreamサーバ設定

JavaScript
Chart.js

可視化結果Visualization

利⽤者PC

Android版：https://sinetstream.net/docs/tutorial-android/(Python版：https://www.sinetstream.net/docs/tutorial/)

32

まとめ
• SINETStream 広域データ収集・解析プログラム開発⽀援ソフトウェア• SINETStreamの開発状況• 2019年12⽉ v1.0 – Python(P), Java(J) APIを提供

SINET以外の環境でも使えます• 2020年3⽉ v1.1 - タイムスタンプ機能，プラグイン開発ガイド• 2020年6⽉ v1.2 - ⾮同期API，SINETStreamサーバ設定ガイド• 2020年7⽉ v1.3 - メトリクス収集機能• 2020年10⽉ v1.4 – Android(A)版（コア／ヘルパライブラリ）• 2021年3⽉ v1.5 - Android版アプリEcho/Sensor，チュートリアル• 2021年12⽉ v1.6 - コンフィグサーバ(J,P)，SensorアプリGPS対応(A)• 2022年4⽉ - SINETStreamデモパッケージ公開• 2022年9⽉ - S3互換ストレージ対応(J,P)，メッセージ圧縮機能(J,P)• 2023年4⽉(予定) – Android版コンフィグサーバ対応, CLI提供(J, P)• IoTセキュリティ研究との連携

https://sinetstream.net/
オープンソース
チュートリアル，デモ公開
国内，Python版のみで580インストール確認(2023年3⽉現在)• JST CREST「形式検証とシステムソフトウェアの協働によるゼロトラストIoT」(2021.10-2027.3). https://zt-iot.nii.ac.jp/© 2023 National Institute of Informatics

33