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.6k
空調設備向け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.8k
Other Decks in Technology
See All in Technology
Webアプリを Lambdaで動かすまでに考えること / How to implement monolithic Lambda Web Application
_kensh
7
1.2k
Devinで模索する AIファースト開発〜ゼロベースから始めるDevOpsの進化〜
potix2
PRO
3
1.8k
チームビルディング「脅威モデリング」ワークショップ
koheiyoshikawa
0
190
IVRyにおけるNLP活用と NLP2025の関連論文紹介
keisukeosone
0
170
LangChainとLangGiraphによるRAG・AIエージェント実践入門「10章 要件定義書生成Alエージェントの開発」輪読会スライド
takaakiinada
0
120
フロントエンドも盛り上げたい!フロントエンドCBとAmplifyの軌跡
mkdev10
2
220
Zabbixチョットデキルとは!?
kujiraitakahiro
0
160
TopAppBar Composableをカスタムする
hunachi
0
170
似たような課題が何度も蘇ってくるゾンビふりかえりを撲滅するため、ふりかえりのテーマをフォーカスしてもらった話 / focusing on the theme
naitosatoshi
0
360
データベースで見る『家族アルバム みてね』の変遷 / The Evolution of Family Album Through the Lens of Databases
kohbis
4
1.1k
OSSコントリビュートをphp-srcメンテナの立場から語る / OSS Contribute
sakitakamachi
0
1.2k
NLP2025 参加報告会 / NLP2025
sansan_randd
4
500
Featured
See All Featured
Speed Design
sergeychernyshev
29
880
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Thoughts on Productivity
jonyablonski
69
4.6k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
The Invisible Side of Design
smashingmag
299
50k
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.