Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
空調設備向けIoTシステムにおけるクラウドランニングコスト
Search
Kenta Nohara
October 22, 2019
Technology
3
3.5k
空調設備向けIoTシステムにおけるクラウドランニングコスト
ServerlessDays Tokyo 2019
Kenta Nohara
October 22, 2019
Tweet
Share
More Decks by Kenta Nohara
See All by Kenta Nohara
AWSを活用した空調機IoTプラットフォームの開発
nohara
7
6.7k
Other Decks in Technology
See All in Technology
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
130
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
250
.NET 9 のパフォーマンス改善
nenonaninu
0
990
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
250
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
160
DUSt3R, MASt3R, MASt3R-SfM にみる3D基盤モデル
spatial_ai_network
2
160
KnowledgeBaseDocuments APIでベクトルインデックス管理を自動化する
iidaxs
1
260
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
170
PHPからGoへのマイグレーション for DMMアフィリエイト
yabakokobayashi
1
170
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
5
38k
統計データで2024年の クラウド・インフラ動向を眺める
ysknsid25
2
850
ハイテク休憩
sat
PRO
2
160
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
327
38k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
YesSQL, Process and Tooling at Scale
rocio
169
14k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Practical Orchestrator
shlominoach
186
10k
RailsConf 2023
tenderlove
29
940
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
A Modern Web Designer's Workflow
chriscoyier
693
190k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Transcript
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 空調設備向けIoTシステムにおける クラウドランニングコスト
ダイキン工業株式会社 野原健太
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 2 自己紹介
野原 健太 ダイキン工業株式会社所属 ➢ 2008年4月に入社 ➢ 入社以降、組み込みソフト開発(主にC++) ➢ ここ数年、IoTシステム開発に進出 ➢ クラウド歴=AWS歴=サーバーレス歴 2年ほど
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 3 今日話したいこと
製造メーカーの組み込みソフト開発技術者が、 サーバーレスIoTシステムの開発に挑戦し、 苦労した話 Amazon DynamoDBの設計について、クラウ ドランニングコスト最適化の観点で工夫した話
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. ダイキン工業のIoTへの取り組み
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 5 ダイキン工業株式会社とIoT
会社概要 • 空調事業を主力とする会社 • 150カ国以上に事業を展開 IoTの取り組み(Daikin Global Platform) 全世界の空調機をインターネットにつないで、販売、 施工、運用、保守、更新といったライフサイクルに対 するサービスを提供する
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 6 Daikin
Global Platform Daikin Global Platform アプリケーション インターネット インターネット 建物 Edge 空調設備 機器 空調設備 機器 建物 Edge 空調設備 機器 空調設備 機器 インターネット
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 7 Daikin
Global Platform システム規模 • 想定機器接続台数500万台(各機器から毎分データ発生) • 想定ユーザー数30万人(同時アクセス9万人) • 求められる高い処理性能とスケーラビリティ • 無限に発生するデータを扱えるストレージ サーバーレスでやるしかない!! • 性能とスケーラビリティの担保をAWSに任せる! • 断固としてRDBは使わず、全てをNoSQLでまかなう!
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 8 Daikin
Global Platform 接続台数に応じてコスト最適化 • 初期投資を限りなく抑えたい(スモールスタート) • 接続台数とクラウド利用料を限りなく正比例にしたい サーバーレスでやるしかない!! • 徹底的な従量課金サービスの利用へ! 利用料 接続台数
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 9 サーバーレス開発
サーバーレスのクラウドサービスを適切に使いこなすことで、機能面、非機 能面ともに、作りたいシステムは作れる。 あとは、目標ランニングコスト以内で動くシステムを作れるかどうか。 一般的に、「サーバーレス化=コストが下がる」と言われることがあるが、 大量の負荷がかかるシステムでは、コストが青天井になるケースがある。 (サーバーレスが故に、負荷に応じてスケールし動いてしまうので。) そのため、コストを意識した設計や実装が重要となる。 各サービスの特性、課金体系を把握し、それに応じて適切に設 計を行うことが重要 サーバーレス開発は クラウドランニングコストとの闘い!! といっても過言ではない
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. Daikin Global
Platformのシステム構成
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 11 システム構成
Daikin Global Platform アプリ ケーション Edge 空調設備 機器 Amazon Kinesis Data Streams Amazon DynamoDB Amazon API Gateway • 空調設備機器から送られてくる運転データをKinesisで受け、Lambda で処理してDynamoDBに格納 • DynamoDBに格納された運転データを API Gateway ⇒ Lambdaを経由してDynamoDBから取り出し • DynamoDBには、設備機器の遠隔監視のため、最新の機器データのみ を格納(時系列データではない) 建物 ユーザ AWSのサーバーレスのサービスを組み合わせて構築
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 12 システムの負荷条件
Daikin Global Platform アプリ ケーション Edge 空調設備 機器 Amazon Kinesis Data Streams Amazon DynamoDB Amazon API Gateway 空調設備機器側の負荷 • 1機器あたりの運転データサイズ=数百項目(数十kB) • 機器から送られてくる運転データは、毎回全項目が送られてくるわけでは なく、数項目ずつ送られてくる。(値の変化があった項目のデータのみ送 られてくる) • 各機器の運転データは毎分数項目変化する ⇒毎分、接続機器数×数個の運転データが送信される 建物 ユーザ
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 13 システムの負荷条件
Daikin Global Platform アプリ ケーション Edge 空調設備 機器 Amazon Kinesis Data Streams Amazon DynamoDB Amazon API Gateway アプリケーション側の負荷 • 機器の遠隔監視のため、API Gateway経由で運転データを取り出す • 各ユーザは建物内の全機器の監視を行うために、同時に複数機器(数十機 器)の運転データを取り出す • ユーザは遠隔監視中は毎分運転データ取り出しを行う 建物 ユーザ
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 14 クラウドランニングコスト構造
Daikin Global Platform アプリ ケーション Edge 空調設備 機器 Amazon Kinesis Data Streams Amazon DynamoDB Amazon API Gateway 建物 ユーザ 以下のランニングコストが全体の大半を占める ①大量の運転データをDynamoDBに書き込む際に消費する WCUコスト ②機器の遠隔監視をリアルタイムに行うために、アプリから大 量に送られてくるリクエストを処理するために必要なLambda にかかるコスト ① ②
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 15 クラウドランニングコスト構造
Daikin Global Platform アプリ ケーション Edge 空調設備 機器 Amazon Kinesis Data Streams Amazon DynamoDB Amazon API Gateway 建物 ユーザ ①のWCUをおさえ、②のLambdaの処理時間をおさえ、 ランニングコストを最適化するためには、 DynamoDBのデータ構造がポイントとなる。 ① ②
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. コストを抑えるためのDynamoDB設計
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 17 DynamoDB設計
その1 最初に設計したDynamoDBの構造は以下の通り Primary Key Data-Item Attributes… Partition Key Sort Key Data 機器ID 時刻 100 2019-10-22T14:40:00.000Z 運転データ(JSON形式) 101 2019-10-22T14:40:00.000Z 運転データ(JSON形式) ・・・ ・・・ ・・・ 1機器1アイテムとして運転データを格納する この設計には問題があった…
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 18 DynamoDB設計
その1 Primary Key Data-Item Attributes… Partition Key Sort Key Data 機器ID 時刻 100 2019-10-22T14:40:00.000Z 運転データ(JSON形式) 数十kB 101 2019-10-22T14:40:00.000Z 運転データ(JSON形式) 数十kB ・・・ ・・・ ・・・ 1アイテムが数十kBあるため、数百項目ある運転データの1項目だけが送られてき た場合でも、その書き込み処理に数十WCUを消費する。 各機器からは、毎分データが送られてくるため、毎分、数十WCU×接続機器数の WCUを消費する。 運転データ書き込みの際のWCUがかかりすぎる 【DynamoDBの課金仕様】 アイテムの一部だけ更新する場合でも、1アイテムのサイズ分のWCUを消費する
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 19 DynamoDB設計
その2 その1を踏まえ、見直したDynamoDBの構造は以下の通り Primary Key Data-Item Attributes… Partition Key Sort Key Data 機器ID 運転データ項目名 100 項目1 項目1の運転データ(JSON形式) 100 ・・・ ・・・ 100 項目N 項目Nの運転データ(JSON形式) 1機器Nアイテムとして運転データを格納する これにより1アイテムあたりのサイズは1kB以下となり、1項目 だけ送られてきた場合はWCUを1だけ消費する、ということに なりWCU消費量を改善できた。 この設計にも問題があった…
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 20 DynamoDB設計
その2 1回の運転データ取り出しで数十機器の運転データを取り出す ため、数十機器×N項目=数千アイテムをDynamoDBから取り 出す必要あり 運転データ取り出しのLambda処理時間がかかりすぎる 【DynamoDBのAPI仕様】 ・Queryで指定できるPrimaryキーの数はひとつ ・BatchGetItemで取得できるアイテム数は最大100 ⇒いずれを利用しても、数十回APIを実行する必要があり、処理時間がかかる Primary Key Data-Item Attributes… Partition Key Sort Key Data 機器ID 運転データ項目名 100 項目1 項目1の運転データ(JSON形式) 100 ・・・ ・・・ 100 項目N 項目Nの運転データ(JSON形式)
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 21 DynamoDB設計
その3 その2を踏まえ、見直したDynamoDBの構造は以下の通り Partition Keyを建物IDとし、1機器Nアイテムとして運転 データを格納する 建物IDをキーとしてQueryを実行することで、1回のAPI呼び 出しで建物内の全機器の運転データを取得 (項目ごとに書き込めるのでWCUも抑えたまま) Primary Key Data-Item Attributes… Partition Key Sort Key Data 建物ID 機器ID_運転データ項目名 A 100_項目1 項目1の運転データ(JSON形式) A ・・・ ・・・ A 100_項目N 項目Nの運転データ(JSON形式)
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 22 DynamoDB設計
まとめ • データ書き込み側(少しずつ書き込みたい)と、データ読み 込み側(まとめて取り出したい)のユースケースが相反する ケースにおいて、両者のバランスを取る最適なデータ構造を 探ることができた • DynamoDBのデータ構造(キー設計)は、クラウドランニ ングコストの観点で非常に重要。アクセス頻度が高いデータ はキー設計を適切に行わないと、非常にコストがかかる! • DynamoDBの場合、書き込みにかかる料金(WCUの料金) は、読み込みにかかる料金(RCUの料金)の10倍以上なので、 特に、⾼頻度でデータ書き込みを行う箇所のキー設計が重要 (IoTシステムにおいて、機器のデータを書き込む箇所がま さに該当する)
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 余談
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 24 開発中に失敗した事例
皆様、お気をつけください 事例1 インスタンス停止し忘れ 高負荷をかけてシステムを評価するテストを実施する際に、負 荷ツールを動かすために、かなりハイスペックなEC2を2台使 用。テスト自体は数時間で完了したが、テスト終了後にインス タンスを停止し忘れ、1週間ほど放置。〇〇万円が課金されて しまった。 (負荷ツールも従量課金制のサーバーレスで動かせば!) 事例2 大量デバッグログ 高負荷をかけてシステムを評価するテストを実施する際に、ロ グレベルをDEBUGのままテストを実行。CloudWatch Logsに 数百億件のログを送信し、〇〇万円が課金されてしまった。 (CloudWatch Logs高い…)
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. Daikin Global
Platformに興味を持っていただいた方! AWSをやりたい方! 一緒にDaikin Global Platformを作りませんか? ご応募、お待ちしております! (採用HP) http://www.daikin.co.jp/recruit/career/ ご清聴ありがとうございました
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved.