SlideShare uma empresa Scribd logo
1 de 34
1© Internet Initiative Japan Inc.
Spring Cloud Data Flow で構成される
IIJ IoTサービス
株式会社インターネットイニシアティブ
2018年12月14日
クラウド本部 クラウドサービス2部 ビッグデータ技術課
近藤 憲児
2
IIJ
0から1以上を生みだす
1992
イ ン タ ー ネ ッ ト 「 そ の も の 」 か ら 「 新 た な 使 い 方 」 ま で
私 た ち は 変 化 の 最 先 端 に 立 ち 、 提 案 し つ づ け て い ま す 。
IIJのコアは、インターネットを作り、支え、変えていく「技術者」です。
ネットワーク事業
インテグ
レーション事業
現在
ビジネス活用のため、インターネット
商用接続サービスを開始。
IIJのはじまり
クラウド事業
セキュリティ事業
モバイル事業
ネットワーク事業
国内初
1993 インターネット
接続サービス開始
研究目的 ビジネス活用
会社、家庭、学校などを「つなぐ」事業です。
ITシステムとネットワークの安全を「守る」事業です。
お客様の要望を、ITで「作って叶える」事業です。
例えばスマホ、IoTなど「無線でつなぐ」事業です。
ネットワーク経由で「システムの機能を貸す」事業です。
3
自己紹介(IIJ)
• 近藤 憲児
• IIJ IoTサービスの開発・運用に従事
4
お話すること
• IIJ IoTサービス 概要
• 以前のアーキテクチャと課題
• Spring Cloud Data Flow の導入による改善アプローチ
• スケーラビリティについて
• デモ
Enterprise Integration Patterns がいかにして具現化されうるのかを、
Spring Cloud Data Flow を本番環境へ導入した知見を基にご紹介
5
IIJ IoTサービス 概要
6
IIJ IoTサービスの概要
デバイスゲートウェイ機器
センサー(温湿度・振動・位置・電力等)
ネットワーク(モバイル・有線・無線・LPWA)
デバイス管理/データ収集・蓄積
アプリケーション/ミドルウェア/データベース
データ分析/特定業務開発 データ分析/特定業務開発
センサー(温湿度・振動・位置・電力等)
IIJ IoTサービス
アプリケーション/ミドルウェア/データベース
IoTシステムの「つなぐ」部分をもっと楽に。
7
IIJ IoTサービスの機能
データハブデータストレージ
デバイスモニタリング
プライベート
コネクタ
デバイスコントロール
クラウドアダプタ
プライベート
モバイルゲートウェイ
IoT専用SIM
• モバイルアクセス
8
IIJ IoTサービスの機能
データハブデータストレージ
デバイスモニタリング
プライベート
コネクタ
デバイスコントロール
クラウドアダプタ
プライベート
モバイルゲートウェイ
IoT専用SIM
• モバイルアクセス
Today’s topics!
9
IIJ IoTサービスの機能
データハブデータストレージ
デバイスモニタリング
プライベート
コネクタ
デバイスコントロール
クラウドアダプタ
プライベート
モバイルゲートウェイ
IoT専用SIM
• モバイルアクセス
データを蓄積する低コストストレージを提供
センサーデータ送信
データストレージ
HTTP/TCP/UDP
Amazon S3互換API
HTTPS
ブラウザアクセス
ファイルアップロード/
ダウンロード
HTTPS
10
IIJ IoTサービスの機能
データハブデータストレージ
デバイスモニタリング
プライベート
コネクタ
デバイスコントロール
クラウドアダプタ
プライベート
モバイルゲートウェイ
IoT専用SIM
• モバイルアクセス
センサーデータの外部システムへの転送
センサーデータ送信
データハブ
お客様システムA
お客様システムB
お客様システムC
センサーデータ転送
HTTP/TCP/UDP
HTTP/HTTPS
インターネット
11
以前のアーキテクチャと課題
12
Spark App (データストレージ)
以前のアーキテクチャ
Gateway
Kafka
Spark App (データハブ)
Redis
顧客サーバ
Object
Storage
HTTP-Client
(データを顧客サーバへ転送する)
Redis-Client
(転送結果をRedisへ格納する)
Aggregator
(複数のデータを一つに束ねる)
Uploader
(束ねたデータをファイルにしてアップロード)
Redis-Client
(アップロードした結果をRedisへ格納する)
13
以前のアーキテクチャと課題
処理をstreamingにしたい
 マイクロバッチをやめたい
機能拡張性・保守性をあげたい
 処理を分けたい
スケールが難しい
 スケールアップしか方法がない
14
Spring Cloud Data Flow の導入による
改善アプローチ
15
Spring Cloud Stream
SinkSource Processor
Stream
Spring Cloud Stream の基本的な概念
• Message を単位とした、Event-Driven な処理を実現することに特化したフ
レームワーク
• Source, Processor, Sink はそれぞれ Spring Cloud Stream で実装したアプリ
ケーション(あるいはtopic)に相当する
• Binder は、Kafka や RabbitMQ といった メッセージングシステム であり、
各コンポーネントは Binder を介して Message のやりとりを行う
• Binder は EIP の “Channel” に相当
• Source, Processor, Sink を Binder で結合したものを Stream と呼ぶ
Binder Binder
16
Spring Cloud Stream
Gateway
HTTP-Client
(データを顧客サーバへ転送する)
Redis-Client
(転送結果をRedisへ格納する)
Gateway
Server
Service Activator Service Activator
IoTデータ レスポンス
データ
Message Message
Channel Channel
HTTP-
Client
Redis-
Client
(Kafka topic)
Source Processor Sink
データハブ
EIP
Spring Cloud
Stream
Binder Binder
17
Spring Cloud Stream
Gateway
Uploader
(束ねたデータをファイル
にしてアップロード)
Redis-Client
(アップロード結果をRedisへ
格納する)
Gateway
Server
Aggregator Service Activator
IoTデータ レスポンス
データ
Message Message
Channel
データストレージ
EIP
Aggregator
(複数のデータを一つに
束ねる)
Service Activator
Channel
Aggregator,
Uploader
Redis-
Client
(Kafka topic)
Source Processor Sink
Spring Cloud
Stream
Binder Binder
18
Spring Cloud Stream
Gateway Kafka
Redis
顧客サーバ
Object
Storage
Aggregator,
Uploader
Redis-Client
HTTP-Client Redis-Client
Streaming処理を
実現
19
Spring Cloud Stream の機能拡張性
Question:
「データハブで、一つのデータに対して複数の顧客サーバへの転送が行
えるよう、機能拡張を行いたい。どのように設計する?」
Answer:
一つのデータをクローンするProcessorアプリケーションを増やす。
Pseudo-
Splitter
Redis-
Client
(Kafka topic)
Source Processor Sink
HTTP-
Client
Processor
HTTP-
Client
Redis-
Client
(Kafka topic)
Source Processor Sink
20
Spring Cloud Stream の機能拡張性
Pseudo-
Splitter
Redis-
Client
(Kafka topic)
Source Processor Sink
データハブ(機能拡張)
Gateway
Server
Service Activator Service Activator
Message
Channel
Message
Channel
(Pseudo-)Splitter
Channel
Message
Gateway
HTTP-Client
(データを顧客サーバ
へ転送する)
Redis-Client
(転送結果をRedisへ
格納する)
IoTデータ レスポンスデータ
HTTP-
Client
Processor
Duplicator
(データを複製する)
複製されたIoT
データ
Spring Cloud
Stream
EIP
21
Spring Cloud Stream の機能拡張性
Gateway Kafka
Redis
顧客サーバ
Object
Storage
Aggregator,
Uploader
Redis-Client
Pseudo-
Splitter
HTTP-Client
Redis-Client
コンポーネントを増
やすだけで機能拡張
を実現
22
Spring Cloud Data Flow
Question:
「Spring Cloud Stream で実装したアプリケーションをどこのサーバ
で動かす?アプリケーションの可用性をどう担保する?Stream の定義
をどこで管理する?実装したjarはどこに持っておく?」 などなど …
このような microservice 特有の複雑さを、どのように管理する?
Answer:
Spring Cloud Data Flowを導入する。
23
Spring Cloud Data Flow
Spring Cloud Data Flow
• Spring Cloud Stream や Spring Task で実装されたアプリケーションのコン
ポーネント間のパイプライン(Stream)の定義や、アプリケーションのデプロ
イ/アンデプロイ実行、デプロイ状態の管理などを提供する マネジメント
ツール
• GUI, CLI 完備
• コンポーネント間のパイプラインをDSLで表現できる
• Binder … メッセージングミドルウェア
• Kafka, RabbitMQ, Azure EventHubs, Amazon Kinesis Stream …
• Deployer … アプリケーションのランタイム環境
• local, Apache YARN(EOL), Apache Mesos, Kubernetes, Cloud Foundry
:sourceTopic > pseudo-splitter | http-client > redis-client
24
Spring Cloud Data Flow
Kafka
Aggregator,
Uploader
Redis-
Client
Pseudo-
Splitter
HTTP-Client
Redis-Client
Hadoop Cluster (YARN, HDFS)
SCDF
server
streamのパイプライン
やデプロイ状態を管理
Localに配置した
jarをデプロイ
アプリケーションの冗
長性はYARN(とHDFS)
が管理
25
Spring Cloud Config, Spring Cloud Bus, Spring Cloud Netflix
Question:
「Instanceで保持したDB情報の更新をどのように行う?」
「Configのランタイムアップデートをどのように実現する?」
Answer:
Spring Cloud Config, Spring Cloud Netflix (Eureka), Spring Cloud Bus を
利用する。
• Spring Cloud Config
• 「アプリケーション毎に分散するapplication.yml の、中央集権管理機能を提供するもの」
• Eureka
• 「DNSのようなもの」
• Sring Cloud Bus
• 「アプリケーションの状態の変化を、他のアプリケーションに伝播させて伝える仕組みを
提供するもの」
26
Spring Cloud Config, Spring Cloud Bus, Spring Cloud Netflix
Edge
ServerEvent
(ex. REST API)
Eureka
Server
http-client
Kafka
http://192.168.10.13:21234/management/bus/refresh
aggregator redis-client http-client http-client
RDB
ConfigServer
(Spring Cloud Bus)
http-client http-client http-client
“Who is http-client ?”
“192.168.10.13:21234”
Register
“http-client is
192.168.10.13:21234”
Request Resources
refresh refresh refresh
27
スケーラビリティについて
28
Spring Cloud Data Flow でのスケールアウト
Question:
「どのようにスケールさせるのか?」
Answer:
Spring Cloud Data Flow で Stream をデプロイする時に、
起動するInstance数を指定する。
stream deploy --name datahub-stream --properties "deployer.http-client.count=3"
例: データハブのHTTP-Clientを3つ立ち上げたい場合
29
Kafka
Kafka Cluster
App
App
App
App
App
App
Producer Broker Consumer
SubscribePublish
http://kafka.apache.org/
Topic
30
ConsumerClient
ConsumerClient
PartitionとConsumerClientの関係
Topic
Data 1 Data 2 Data 3
Data 4 Data 5 Data 6
Data 7 Data 8 Data 9
Partitions = 3, ConsumerClient = 3
Topic
Partitions = 3, ConsumerClient = 1
Partition-0
Partition-1
Partition-2
Partition-0
Partition-1
Partition-2
Data 1 Data 2 Data 3
Data 4 Data 5 Data 6
Data 7 Data 8 Data 9
ConsumerClient
(ex. Processor App)
ConsumerClient
Throughput が3倍に
31
PartitionとConsumerClientの関係
Partition数 : Consumer数 = 1 : 1
が最適?
→必ずしもそうではない
Partition数をわずかに大きくするとパフォーマンスが上がった
さらにPartition数を大きくすると、パフォーマンスは高止まりした
32
PartitionとConsumerClientの関係
• 𝑝: Partition数
• 𝑐: ConsumerClient数
• 𝑡: Throughput(無単位)
• 目的関数を
𝑦 𝑝, 𝑐, 𝑤 = 𝑤0 𝑝2
+ 𝑤1 𝑐2
+ 𝑤2 𝑝𝑐 + 𝑤3 𝑝 + 𝑤4 𝑐
として、𝐸 𝑤 = 𝑖(𝑦(𝑝𝑖, 𝑐𝑖, 𝑤) − 𝑡𝑖)2
が最小となる
𝑤 = 𝑤0 𝑤1 𝑤2 𝑤3 𝑤4
𝑇
を求める。
∴ 𝑤 = −𝟏. 𝟏𝟑 − 𝟐. 𝟐𝟑 𝟑. 𝟏𝟏 𝟑𝟔. 𝟓𝟗 𝟏𝟖𝟐. 𝟗𝟖 𝑇
.
• 𝛻𝑦 𝑝, 𝑐 | 𝑝=0,𝑐=0 = 36.59, 182.98
∴
𝑝
𝑐
=
182
36
~
5
1
→ IoTサービスでは、およそ
Partition数 : ConsumerClient数 = 5 : 1 が最適な比率であった。
最適な Partition数 と ConsumerClient数 の比率は何か?
→ Throughput が Partition数 と ConsumerClient数 をパラメータに持つ放物面
で近似できると仮定して、回帰曲面を出す。その後、求めた曲面の勾配ベクト
ルの内、(p, c) = (0,0) 地点での pとcの比を求める。
33
デモ
34
IIJ-BKLT999-0001

Mais conteúdo relacionado

Mais procurados

[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsYoshiyasu SAEKI
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
ブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせるブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせるKLab Inc. / Tech
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情Masahiro Tomita
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13Amazon Web Services Japan
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたデータベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたHyperleger Tokyo Meetup
 
DI(依存性注入)について
DI(依存性注入)についてDI(依存性注入)について
DI(依存性注入)についてYui Ito
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要Google Cloud Platform - Japan
 
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...Insight Technology, Inc.
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 

Mais procurados (20)

[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
ブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせるブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせる
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたデータベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみた
 
DI(依存性注入)について
DI(依存性注入)についてDI(依存性注入)について
DI(依存性注入)について
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
 
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 

Semelhante a Spring Cloud Data Flow で構成される IIJ IoTサービス

Data x AI x API で考えるビジネスインフラ
Data x AI x API で考えるビジネスインフラData x AI x API で考えるビジネスインフラ
Data x AI x API で考えるビジネスインフラDaiyu Hatakeyama
 
パブリッククラウド動向とIBMの取り組み
パブリッククラウド動向とIBMの取り組みパブリッククラウド動向とIBMの取り組み
パブリッククラウド動向とIBMの取り組みKimihiko Kitase
 
Sdn japan2016 hpe_switch_story_v2
Sdn japan2016 hpe_switch_story_v2Sdn japan2016 hpe_switch_story_v2
Sdn japan2016 hpe_switch_story_v2Kyohei Moriyama
 
OSSではじめるオープン・スタンダードのクラウド @201304
OSSではじめるオープン・スタンダードのクラウド @201304OSSではじめるオープン・スタンダードのクラウド @201304
OSSではじめるオープン・スタンダードのクラウド @201304Shinichiro Arai
 
Twilio x SendGrid x Bluemix 実践ハンズオン
Twilio x SendGrid x Bluemix 実践ハンズオンTwilio x SendGrid x Bluemix 実践ハンズオン
Twilio x SendGrid x Bluemix 実践ハンズオンMasaya Fujita
 
Go azure keynote-クラウド利用のあらゆるニーズに応える windows azure の進化
Go azure keynote-クラウド利用のあらゆるニーズに応える windows azure の進化Go azure keynote-クラウド利用のあらゆるニーズに応える windows azure の進化
Go azure keynote-クラウド利用のあらゆるニーズに応える windows azure の進化GoAzure
 
日米クラウド最前線!経営戦略としてのクラウドを考える
日米クラウド最前線!経営戦略としてのクラウドを考える日米クラウド最前線!経営戦略としてのクラウドを考える
日米クラウド最前線!経営戦略としてのクラウドを考えるNissho-Blocks
 
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...Insight Technology, Inc.
 
Cloudian meets CloudStack
Cloudian meets CloudStackCloudian meets CloudStack
Cloudian meets CloudStackCLOUDIAN KK
 
次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとは次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとはTrainocate Japan, Ltd.
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 
ネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリット
ネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリットネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリット
ネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリットMidokura
 
プライベートクラウドへの準備はできていますか?[ホワイトペーパー]
プライベートクラウドへの準備はできていますか?[ホワイトペーパー]プライベートクラウドへの準備はできていますか?[ホワイトペーパー]
プライベートクラウドへの準備はできていますか?[ホワイトペーパー]KVH Co. Ltd.
 
【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ
【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ
【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイNobuyuki Matsui
 
クラウドがもたらすパラダイムシフト
クラウドがもたらすパラダイムシフトクラウドがもたらすパラダイムシフト
クラウドがもたらすパラダイムシフトkurikiyo
 
ぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloudぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic CloudElasticsearch
 
クラウド座談会資料
クラウド座談会資料クラウド座談会資料
クラウド座談会資料知礼 八子
 
トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9Treasure Data, Inc.
 

Semelhante a Spring Cloud Data Flow で構成される IIJ IoTサービス (20)

Data x AI x API で考えるビジネスインフラ
Data x AI x API で考えるビジネスインフラData x AI x API で考えるビジネスインフラ
Data x AI x API で考えるビジネスインフラ
 
パブリッククラウド動向とIBMの取り組み
パブリッククラウド動向とIBMの取り組みパブリッククラウド動向とIBMの取り組み
パブリッククラウド動向とIBMの取り組み
 
Sdn japan2016 hpe_switch_story_v2
Sdn japan2016 hpe_switch_story_v2Sdn japan2016 hpe_switch_story_v2
Sdn japan2016 hpe_switch_story_v2
 
OSSではじめるオープン・スタンダードのクラウド @201304
OSSではじめるオープン・スタンダードのクラウド @201304OSSではじめるオープン・スタンダードのクラウド @201304
OSSではじめるオープン・スタンダードのクラウド @201304
 
Twilio x SendGrid x Bluemix 実践ハンズオン
Twilio x SendGrid x Bluemix 実践ハンズオンTwilio x SendGrid x Bluemix 実践ハンズオン
Twilio x SendGrid x Bluemix 実践ハンズオン
 
クラウド検討の進め方
クラウド検討の進め方クラウド検討の進め方
クラウド検討の進め方
 
Go azure keynote-クラウド利用のあらゆるニーズに応える windows azure の進化
Go azure keynote-クラウド利用のあらゆるニーズに応える windows azure の進化Go azure keynote-クラウド利用のあらゆるニーズに応える windows azure の進化
Go azure keynote-クラウド利用のあらゆるニーズに応える windows azure の進化
 
日米クラウド最前線!経営戦略としてのクラウドを考える
日米クラウド最前線!経営戦略としてのクラウドを考える日米クラウド最前線!経営戦略としてのクラウドを考える
日米クラウド最前線!経営戦略としてのクラウドを考える
 
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
 
Cloudian meets CloudStack
Cloudian meets CloudStackCloudian meets CloudStack
Cloudian meets CloudStack
 
次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとは次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとは
 
IBM and Open @201311
IBM and Open @201311IBM and Open @201311
IBM and Open @201311
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
ネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリット
ネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリットネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリット
ネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリット
 
プライベートクラウドへの準備はできていますか?[ホワイトペーパー]
プライベートクラウドへの準備はできていますか?[ホワイトペーパー]プライベートクラウドへの準備はできていますか?[ホワイトペーパー]
プライベートクラウドへの準備はできていますか?[ホワイトペーパー]
 
【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ
【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ
【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ
 
クラウドがもたらすパラダイムシフト
クラウドがもたらすパラダイムシフトクラウドがもたらすパラダイムシフト
クラウドがもたらすパラダイムシフト
 
ぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloudぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloud
 
クラウド座談会資料
クラウド座談会資料クラウド座談会資料
クラウド座談会資料
 
トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9
 

Spring Cloud Data Flow で構成される IIJ IoTサービス

Notas do Editor

  1. 自己紹介もかねて会社の紹介を インターネットイニシアティブ、IIJ 日本で最初に商用インターネットサービスを行った会社 最近はIIJ mioという格安SIMでもおなじみ 私は新卒でこの会社に入社して、それ以来IoTに関する事業に携わっている。 最近はもっぱらIIJ IoTサービスの開発と運用を行っている
  2. 今日お話することです。 先ほどのセッションでは理論的なお話であった。 ここからは、そのEIPが実際の要件に対してどのようにはまるのかを伝える。 また、それで実装したアプリケーションがどのように運用されるのかを、SCDFというワードとともに説明する。
  3. まずはじめに、要件として、これからお話するために必要なベースとなる知識として、IIJ IoTサービス概要を説明する
  4. キャッチフレーズ IoTシステムはえてして巨大で面倒なことになる。 センサーからクラウドにどうにかしてあげる、のどうにかしてあげる部分 ネットワーク デバイス ここのわずらわしさを吸収するサービスである
  5. 機能はこのようなものです。
  6. 今日のTopicです。
  7. 読む センサーをPFに送ってもらい、そこで10分間で送ってもらったデータを一つのファイルにまとめて、ObjectStorageに配置する。 IoTシステムの要件は様々だが、データをためる、というのは汎用的。これをクリックぽちぽちで実現できる機能です。
  8. 読む データを送ってもらって、 お客様は同一のエンドポイントに送信し続けるだけでよい。エンドポイントの変更、追加などでデバイスに変更を加える必要がない
  9. これからのお話を劇的なものにするために、以前のアーキテクチャについてご説明します。
  10. Sparkベースであった (データのフローを説明) (Kafkaについて簡単に説明)
  11. しばらくよく動いてくれたが、内部でいくつかの課題や、やりたいことがでてきた。 ここでは3つfeatureする 処理をStreamingにしたい データハブの話 機能の拡張性・保守性をあげたい 今はシンプルな処理しか行っていないが、これから機能を拡張していこうとすると巨大なアプリケーションになる。巨大なアプリケーションになるほど保守性が下がることは皆さんもご承知の通り。なので処理を分けることはできないか、という課題 スケールが難しい 特にデータストレージの話。Sparkはもともと分散処理基盤なのでスケールのしやすさが志向されているものであるが、これはどちらかというと使い方の問題で、パフォーマンスをあげるにはスケールアップするしか手段がない状態であった。
  12. 本題です。 こうした課題を解決する手段として、結果的にSCDFの導入を決めた。 その軌跡を順番に紹介する。
  13. Spring Cloud Stream で実装した。
  14. (処理の説明) (処理がEIPでかくとこうなることを説明) 特に「メッセージをうけて処理をする」という意味ではHTTPもRedisも同じになるので、似たような図が並んでいる (それをCloud Streamで実装する単位に分けたときの説明)
  15. 同様に説明 特にAggregaterについて説明
  16. 全体図 一つ目:Streaming処理を実現 二つ目:Redis-Clientを同じJarを使っていること。これにより、異なるアプリケーションに共通する処理を、コードをコピペして対応する、という冗長な作業をする必要がなくなった。
  17. ここからはQA方式でご紹介 Questionの説明 Answerの説明
  18. Answerについて詳細に説明 特にPseudo-Splitterについて説明 Pseudo-Splitterは近藤が勝手に名づけたものなので注意。厳密にはこれはSplitterではない。 なぜなら、Splitterは一つのMessageをSplitして複数のMessageにすることを指すが、今回は一つのMessageをクローンしているため。
  19. HTTP-Client, Redis-Clientについては、別のアプリケーションなので、テストをしなくても良い部分というのがより明確になった。 またアプリケーションが分離されているので、パフォーマンスを挙げるために増やす必要のあるInstanceの単位が分かれて経済的。
  20. 特にBinderとDeployerについて SCDFを導入するには、この二つの環境を選定することが必要 IoTサービスでは BinderはKafka. 理由はリリース時から使ってきてナレッジも多くある。わざわざRabbitMQなどを使うことを検討するメリットも理由もなかったので。 DeployerはYARN. 理由はチームにHadoop Clusterの運用経験者が複数人いたため。 Deployerの候補に共通するのは、一つはリソースの抽象化を行うもの、もう一つはアプリケーションの可用性を担保してくれるものであること。 YARNはEOLなので、これから導入する人はこれを選ぶべきではない。
  21. 一つめのQuestionは次のようなもの ユーザが設定変更を行ったなどでDBに更新があった際、各Instanceのメモリ上に持っているDB情報する必要があるが、それをどのように悟るか また、並列化された複数のInstanceは同じタイミングで更新する必要がある。それをどういう仕組みで実現するか。 二つ目のQuestionは、application.ymlの変更を、アプリケーションのrestartなしで行う方法はあるのか、というもの
  22. (アニメーションの説明) ここで問題になるのは、各Instanceが抽象化されたリソース上で動いていること。これにより Cloud busの機能でEdgeから直接InstanceにRequestを送る必要があるが、このInstanceのIPアドレスやPortを特定できないこと Application.ymlをホストに配置する、ということができないこと
  23. 以上でSCDFを使ったIoTサービスのアーキテクチャについての説明を終わります。 最後にスケーラビリティについてご説明して、このセクションを終えます。
  24. 次にスケールアウトを実際にどのように実現するか、についてです。 Questionはそのまま「スケールさせたいとき、どのような操作が必要になる?」です。 この回答としては、私たちはSCDFのDeployコマンドを実行するときに、以下のようにinstanceの数を指定することで実現しています。 このようにオプションをつけるのです。人間がやるオペレーションとしては、ここにあるinstanceの数を指定しなおして、Deployするだけ。 そうすると、SCDFが勝手にDeployerに対して指定したinstance数分たててくれる
  25. これまで何度もKafka、Kafkaと連呼してきましたが、このKafkaはこれまでご説明してきたアーキテクチャの中で重要なものになっています。 まずこのKafkaの概要をご説明します。 Kafkaは分散メッセージングシステムである。Kafkaによって、非同期にMessageのやり取りを行うことができる。 最もベーシックなKafkaの説明では、Producer、Broker、Consumerの3つの役割がある。 まずBrokerはKafka自身をさす。Brokerはtopicと呼ばれる、メッセージを書き込むまさに掲示板のようなものを持っています。 ProducerとConsumerはそれぞれアプリケーションで、ProducerはConsumerにメッセージを伝えることを目的としている。 Producerは伝えたいメッセージをtopicに書き込む。これをPublishと呼ぶ。 Consumerはこのtopicを、まるでtail –f コマンドでファイルの更新を監視しているように、常に更新されたものをみている。これをSubscribeと呼ぶ。 このKafkaを使えば、メッセージを送る側と受信する側を疎結合にする、いわゆるPublish-Subscribeモデル実現することができる。ProducerはConsumerを気にせず、topicに書き込むことに専念すればよいし、ConsumerはProducerのことを意識せず、topicに書き込まれた・書き込まれていない、だけを意識することができる。 以上がKafkaの概要です。
  26. さらに詳細に言うと、topicにはPartitionという概念を持っている。 例えば「一つのtopicに対してpartition数=3を設定する」といった使い方をする。 Producerが一つのtopicにメッセージをpublishするとします。すると、Kafkaの中で、PublishされたメッセージはPartitionのどれか一つに入ります。ここで一つのMessageが異なるPartitionにまたがって存在するということはありません。 一方、一つのtopicをsubscribeしているConsumerは、Partition単位でsubscribeの粒度を決めることができる。 例えばpartitionが3のtopicに対してConsumerが一つの場合、はこの絵のように、Consumerは3つのPartitionを同時にSubscribeすることになります。 一方、Partitionが③のtopicに対して、Consumerが3つの場合、この絵のように、それぞれ異なるPartitionをまたそれぞれ異なるConsumerがSubscirbeしていることになります。 ここでConsumerに注目してみると、上よりも、下のほうが、一つのConsumerが処理すべきMessageの量が少ない、つまり1/3になっている。故に、下のほうが並列に処理が進むため、パフォーマンスは3倍になる、という結論がでるであろう。こういう仕組みをベースにして、スケールアウトを実現します。 これはすごく単純化した説明であるので、例えば処理に必要なデータの集まりや実行順序というところをどのように担保するか、については言及していない。
  27. ここでpartitionとClientの数について考えてみる。 先ほどの理論から出てくる結論としては、PartitionとClientの数を1:1にすると、もっともパフォーマンスがでる、となるであろう。 しかしながら、実際そうではなかった。 一つのConsumerが2つ以上のPartitionを担当している場合、1:1よりもパフォーマンスがでた。 さらに、Consumer一つに対してPartitionの数をどんどん増やしてみると、今度はパフォーマンスが高止まりし始めた。パフォーマンスが下がるケースもあった。 これはなぜかわからない。 ここで次のような疑問が生まれる、 ConsumerとPartitionの最適な組み合わせは?? 以下はこれを求めるために使った一つの手法のご紹介です。
  28. 結論から申しますと、ConsumerとPartitionの数の比を1:5にするとよい。 手法としては、回帰分析を行った。 partitionをp, Consumerをcとして、throughputをtとおく。このthroughputの単位は言及しない。実はHTTP Requestの毎秒単位のもの。 モデルを二次形式としておいて、得られたテストデータから、この評価関数を最小にするような二次係数の係数の組み合わせを導く。これはRに任せた。 そこから以下のような関数がでてきた function(p, c) { -1.133499 * p^2 + -2.229904 * c^2 + 3.112091 * p * c + 36.596983 * p + 182.988513 * c } これは二変数関数なので、③次元にプロットできる。それが右の絵である。これが頂上ここのz軸に相当するものがthroughputを示しているので、坂の上にいくほど、throughputはあがる。 ここで、例えばthroughputを1000にするとして、最適なPartitionとConsumerの数の組み合わせは何であろうか。 throuputを1000とすると、この絵では、z軸が1000である等高線全てがその組み合わせの候補となる。 ここで初期値を(partition, Consumer )= (0, 0)からはじめれば、絵でいう原点から頂上まで向かうのにどの方向に向かえば一番最短距離でいけるか、を考えればいい。 そういうときは勾配ベクトルを求めればいいのでそれを計算する。するとc:p = 37:183 、(c = 37k, p = 183k)となった。つまりc/p = 37/183 およそ 1:5というのがわかった。 IoTサービスではこういう結果がでたが、これは環境に依存するもの。しかしながら、放物曲面を仮定することと勾配ベクトルを使うところの手法は汎用的に使える。
  29. SCDFでアプリケーション実行のデプロイ Streamの定義をDSLで行うこと Streamのデプロイ Instanceを増やすことでThroughputがあがること
  30. おわり 質問受け付ける