AWS Startup Tech Meetup Online #5 での登壇資料です。 https://aws-startup-community.connpass.com/event/213928/
© UniFa Inc.睡眠中の園児達を⾒守る「ルクミー午睡チェック」のアーキテクチャユニファ株式会社
View Slide
© UniFa Inc.⾃⼰紹介Twitter: @akanuma
© UniFa Inc.事業・サービスについて
© UniFa Inc.もっと⾒たい。もっと⾒てほしい。を、もっと叶えたい。「保育の質を上げる」保育関係者のパートナー
© UniFa Inc.
© UniFa Inc.AWS Startup Architecture of the Year Japan 2020 優勝
© UniFa Inc.従来の午睡チェック業務⼿書きによる5分間隔でのうつ伏せ寝チェック
© UniFa Inc.ルクミー午睡チェック概要
© UniFa Inc.ルクミー午睡チェック概要Web管理画⾯
© UniFa Inc.利⽤中の様⼦
© UniFa Inc.利⽤実績導⼊施設数 約 3,200 施設午睡センサー数 約 35,000 個タブレット数 約 5,000 台
© UniFa Inc.システムアーキテクチャ
© UniFa Inc.想定された課題アクセス特性Ø ピークタイム: 11:00 – 15:00Ø 5分毎に iPad アプリから集中的にデータが送信されるチェックシートデータ量Ø 12レコード/園児/時 x 14時間 x 10園児 = 1,680レコード/⽇/施設Ø 1,680 x 2,000施設 = 3,360,000レコード/⽇
© UniFa Inc.Overview
© UniFa Inc.全体構成図
© UniFa Inc.全体構成図オンライン処理
© UniFa Inc.全体構成図バッチ処理
© UniFa Inc.午睡チェックシートデータの処理
© UniFa Inc.午睡チェックシートデータの処理ピークタイムに合わせてEC2 を Auto Scalingピークタイムに合わせてEC2 を Auto Scaling(API Server と同⼀インスタンス)
© UniFa Inc.午睡チェックシートデータの処理Redis を使⽤してステータスフラグを記録しCreate/Update/Delete の処理順番を保つ
© UniFa Inc.午睡チェックシートデータの処理SQSを介した⾮同期処理Worker が DynamoDBに書き込む
© UniFa Inc.午睡チェックシートデータの処理DynamoDBのテーブルは⽉別で作成しキャパシティやアクセス⽅法を調整過去テーブルへのアクセスは同期処理
© UniFa Inc.午睡チェックシートデータの処理データ送信回数、アラート回数などのセンサー単位での情報はDynamoDB Stream でLambda Function を実⾏して都度集計しDynamoDB のテーブルに記録
© UniFa Inc.午睡チェックシートデータの処理DynamoDB の Write Capacity を予め登録しておくWorker は起動時に⾃⾝の情報を登録稼働中の Worker 数とWrite Capacity の情報を取得WriteCapacity:120
© UniFa Inc.午睡チェックシートデータの処理DynamoDB の Write Capacity を予め登録しておくWorker は起動時に⾃⾝の情報を登録稼働中の Worker 数とWrite Capacity の情報を取得Write Capacity の情報をもとにスロットリングが発⽣しないように書き込み速度を調整WriteCapacity:120404040
© UniFa Inc.午睡チェックシートデータの処理SQSに格納されてから処理されるまでの時間。確認時点で最⼤167秒。ビジネス要件は300秒以内。
© UniFa Inc.午睡チェックシートデータの処理SQSに送信されたデータ数。確認時点で最⼤1.76万件/分。
© UniFa Inc.午睡チェックシートデータの処理ワーカーによる処理数。確認時点で最⼤7,790件/分。
© UniFa Inc.Design for Failure10回処理に失敗したデータはDLQに格納される。送信順が不正だった場合は処理に失敗するためDLQに格納され通知される。4⽇間処理されなかった場合削除される
© UniFa Inc.Design for FailureCloudWatch Events でLambda Function をキックしDynamoDB のバックアップ対象テーブルのリストを抽出してSQSに格納
© UniFa Inc.Design for FailureSQSに格納されたテーブルリストをもとに対象のテーブルのラベルを更新
© UniFa Inc.Design for FailureDynamoDB のテーブルのラベルをもとに対象を特定してAWS Backup でバックアップ取得
© UniFa Inc.Design for Failure
© UniFa Inc.Design for Failure午睡チェック業務実⾏中の場合はサーバへ接続できなくなってもセンサーと iPad 間でチェック業務可能
© UniFa Inc.Design for Failureセルラー回線(SORACOM Air Sim)を使うことで保育園のWi-Fiの安定性の問題を回避同時に導⼊時の保育園側のハードルを下げる
© UniFa Inc.ビジネスインパクト
© UniFa Inc.導⼊施設数Ø サービス開始: 2018年4⽉(約3年経過)Ø 導⼊施設数: 約3,200施設(2020/06/30時点)
© UniFa Inc.データ量増加推移012345678910201804201805201806201807201808201809201810201811201812201901201902201903201904201905201906201907201908201909201910201911201912202001202002202003202004202005202006202007Millions2年半累計で約1.2億レコード 2020.04緊急事態宣⾔コロナ禍による稼働減
© UniFa Inc.アーキテクチャによるビジネス貢献信頼性Ø レスポンスタイムやパフォーマンスの劣化なしØ サーバに接続できなくても稼働継続可能運⽤上の優秀性Ø セルラー回線を使うことでWi-Fiの問題を回避Ø 安定的な稼働と導⼊時のハードルを下げることに貢献
© UniFa Inc.安⼼を進化させる。ほほ笑みが増えていく。命に関わる業務での安⼼・安全をサポート求められる Well-Architected の柱Ø 信頼性Ø 運⽤上の優秀性
© UniFa Inc.もっと⾒たい。もっと⾒てほしい。を、もっと叶えたい。
© UniFa Inc.イベントやります︕https://unifa.connpass.com/event/213885/
© UniFa Inc.We are hiring!!インフラエンジニア、Rubyエンジニアをはじめとして開発メンバー募集しています︕︕お気軽にご連絡ください︕︕