ServerlessDays Tokyo 2019
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved.空調設備向けIoTシステムにおけるクラウドランニングコストダイキン工業株式会社 野原健太
View Slide
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. 6Daikin Global PlatformDaikin Global Platformアプリケーションインターネットインターネット建物Edge空調設備機器空調設備機器建物Edge空調設備機器空調設備機器インターネット
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 7Daikin Global Platformシステム規模• 想定機器接続台数500万台(各機器から毎分データ発生)• 想定ユーザー数30万人(同時アクセス9万人)• 求められる高い処理性能とスケーラビリティ• 無限に発生するデータを扱えるストレージサーバーレスでやるしかない!!• 性能とスケーラビリティの担保をAWSに任せる!• 断固としてRDBは使わず、全てをNoSQLでまかなう!
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 8Daikin 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 KinesisData StreamsAmazon 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 KinesisData StreamsAmazon DynamoDB Amazon API Gateway空調設備機器側の負荷• 1機器あたりの運転データサイズ=数百項目(数十kB)• 機器から送られてくる運転データは、毎回全項目が送られてくるわけではなく、数項目ずつ送られてくる。(値の変化があった項目のデータのみ送られてくる)• 各機器の運転データは毎分数項目変化する⇒毎分、接続機器数×数個の運転データが送信される建物ユーザ
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 13システムの負荷条件Daikin Global PlatformアプリケーションEdge空調設備機器 Amazon KinesisData StreamsAmazon DynamoDB Amazon API Gatewayアプリケーション側の負荷• 機器の遠隔監視のため、API Gateway経由で運転データを取り出す• 各ユーザは建物内の全機器の監視を行うために、同時に複数機器(数十機器)の運転データを取り出す• ユーザは遠隔監視中は毎分運転データ取り出しを行う建物ユーザ
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 14クラウドランニングコスト構造Daikin Global PlatformアプリケーションEdge空調設備機器 Amazon KinesisData StreamsAmazon DynamoDB Amazon API Gateway建物ユーザ以下のランニングコストが全体の大半を占める①大量の運転データをDynamoDBに書き込む際に消費するWCUコスト②機器の遠隔監視をリアルタイムに行うために、アプリから大量に送られてくるリクエストを処理するために必要なLambdaにかかるコスト① ②
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 15クラウドランニングコスト構造Daikin Global PlatformアプリケーションEdge空調設備機器 Amazon KinesisData StreamsAmazon DynamoDB Amazon API Gateway建物ユーザ①のWCUをおさえ、②のLambdaの処理時間をおさえ、ランニングコストを最適化するためには、DynamoDBのデータ構造がポイントとなる。① ②
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved.コストを抑えるためのDynamoDB設計
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 17DynamoDB設計 その1最初に設計したDynamoDBの構造は以下の通りPrimary Key Data-Item Attributes…Partition Key Sort KeyData機器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. 18DynamoDB設計 その1Primary Key Data-Item Attributes…Partition Key Sort KeyData機器ID 時刻100 2019-10-22T14:40:00.000Z 運転データ(JSON形式)数十kB101 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. 19DynamoDB設計 その2その1を踏まえ、見直したDynamoDBの構造は以下の通りPrimary Key Data-Item Attributes…Partition Key Sort KeyData機器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. 20DynamoDB設計 その21回の運転データ取り出しで数十機器の運転データを取り出すため、数十機器×N項目=数千アイテムをDynamoDBから取り出す必要あり運転データ取り出しのLambda処理時間がかかりすぎる【DynamoDBのAPI仕様】・Queryで指定できるPrimaryキーの数はひとつ・BatchGetItemで取得できるアイテム数は最大100⇒いずれを利用しても、数十回APIを実行する必要があり、処理時間がかかるPrimary Key Data-Item Attributes…Partition Key Sort KeyData機器ID 運転データ項目名100 項目1 項目1の運転データ(JSON形式)100 ・・・ ・・・100 項目N 項目Nの運転データ(JSON形式)
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 21DynamoDB設計 その3その2を踏まえ、見直したDynamoDBの構造は以下の通りPartition Keyを建物IDとし、1機器Nアイテムとして運転データを格納する建物IDをキーとしてQueryを実行することで、1回のAPI呼び出しで建物内の全機器の運転データを取得(項目ごとに書き込めるのでWCUも抑えたまま)Primary Key Data-Item Attributes…Partition Key Sort KeyData建物ID 機器ID_運転データ項目名A 100_項目1 項目1の運転データ(JSON形式)A ・・・ ・・・A 100_項目N 項目Nの運転データ(JSON形式)
Copyright: ©2019 DAIKIN INDUSTRIES, LTD., All Rights Reserved. 22DynamoDB設計 まとめ• データ書き込み側(少しずつ書き込みたい)と、データ読み込み側(まとめて取り出したい)のユースケースが相反するケースにおいて、両者のバランスを取る最適なデータ構造を探ることができた• 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.