Slide 1

Slide 1 text

本田 恭 Pococha の急成長を支える DeNA 的なインフラ運用改善

Slide 2

Slide 2 text

自己紹介 2015 2016 2017 最近 中途入社(IT 基盤部) 国内ゲームのインフラ 大規模ゲームのインフラ 大規模ゲーム / Auto Motive Cloud Journey / Pococha などなど

Slide 3

Slide 3 text

自己紹介 趣味 筋トレ ベンチプレス デッドリフト スクワット NiziU では NINA 派 120 kg 150 kg 140 kg

Slide 4

Slide 4 text

https://www.pococha.com

Slide 5

Slide 5 text

[2021/01]

Slide 6

Slide 6 text

1.9M DL [2021/01]

Slide 7

Slide 7 text

API 2017 2021 req/s 20 vCPU 4 Mbps 10 QPS 80

Slide 8

Slide 8 text

API 2017 2021 req/s 20 8,500 vCPU 4 2,000 Mbps 10 3,000 QPS 80 35,000 [2021/01]

Slide 9

Slide 9 text

425 %

Slide 10

Slide 10 text

https://www.pococha.com

Slide 11

Slide 11 text

Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善 4. まとめ

Slide 12

Slide 12 text

Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善 4. まとめ

Slide 13

Slide 13 text

230 + [2021/01]

Slide 14

Slide 14 text

DeNA のインフラ運用特色 ● どこでも動かせる ○ On Premise / Public Cloud ● 複数サービス横断 ○ Metadata(後述) を利用した共通的な Script たち

Slide 15

Slide 15 text

https://unsplash.com QCT https://unsplash.com [Quality / Cost / Time]

Slide 16

Slide 16 text

DeNA のインフラ運用特色 ● どこでも動かせる ○ On Premise / Public Cloud ● 複数サービス横断 ○ Metadata(後述) を利用した共通的な Script たち ● QCT の追求 ○ https://www.slideshare.net/dena_tech/denaqctiaas-aws-summit-tokyo-2019

Slide 17

Slide 17 text

Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善 4. まとめ

Slide 18

Slide 18 text

Pococha のインフラ構成 ● 開発チームで全て構築運用 ● 基盤は AWS ○ EC2(API / batch / daemon) ○ Aurora ○ ElastiCache ○ etc.

Slide 19

Slide 19 text

Pococha のインフラ構成 ● 開発チームで全て構築運用 ● 基盤は AWS ○ EC2(API / batch / daemon) ○ Aurora ○ ElastiCache ○ etc.

Slide 20

Slide 20 text

Pococha のインフラ構成 ● 開発チームで全て構築運用 ● 基盤は AWS ○ EC2(API / batch / daemon) ○ Aurora ○ ElastiCache ○ etc. Small Start なプロジェクト

Slide 21

Slide 21 text

Pococha のインフラ構成 Aurora EC2 EC2 EC2 ElastiCache Auto Scaling Group

Slide 22

Slide 22 text

Pococha の成長と課題 ● アーキテクチャ ● 定常運用 ● 性能管理

Slide 23

Slide 23 text

Pococha の成長と課題 [アーキテクチャ] ● VPC CIDR 不足 ○ IP Address 枯渇の恐れ ● CDN 対象不足 ○ CDN 使わず origin からデータ直接配信 ● SPOF なサーバ群 ○ 停止するとサービスへの影響大

Slide 24

Slide 24 text

Pococha の成長と課題 [定常運用] ● 監視と障害対応フロー ● ScaleOut が遅い ● ログ欠損

Slide 25

Slide 25 text

Pococha の成長と課題 [性能管理] ● 監視メトリクスが不十分 ● 500 超のテーブルが 1 Aurora Cluster に ● API, Redis 応答劣化 ● サーバコスト増大

Slide 26

Slide 26 text

Pococha の成長と課題 ● アーキテクチャ ● 定常運用 ● 性能管理 Small Start 状態の限界

Slide 27

Slide 27 text

Pococha のインフラ構成 Aurora EC2 EC2 EC2 ElastiCache Auto Scaling Group 開発/インフラ双方の運用を維持

Slide 28

Slide 28 text

DeNA 的 ノウハウ https://www.pococha.com

Slide 29

Slide 29 text

サービス 品質向上 https://www.pococha.com

Slide 30

Slide 30 text

Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善 4. まとめ

Slide 31

Slide 31 text

● 障害対応 ● 性能管理とチューニング ● DB 分割 ● Auto Scaling Pococha の成長を支える運用改善

Slide 32

Slide 32 text

● 障害対応 ● 性能管理とチューニング ● DB 分割 ● Auto Scaling DeNA のインフラ品質で達成 Pococha の成長を支える運用改善

Slide 33

Slide 33 text

● 障害対応 ● 性能管理とチューニング ● DB 分割 ● Auto Scaling Pococha の成長を支える運用改善

Slide 34

Slide 34 text

Pococha の成長を支える運用改善 I. DB 分割 II. Auto Scaling

Slide 35

Slide 35 text

DB 分割 ● 垂直分割 ● 水平分割

Slide 36

Slide 36 text

DB 分割 [垂直分割] ● テーブル単位での分割 ○ User: users / user_friends / ... ○ Live: lives / archived_lives / ... ○ Log: login_logs / used_item_logs / ... ● テーブル用途毎で Cluster にまとめる

Slide 37

Slide 37 text

● テーブル単位での分割 ○ User: users / user_friends / ... ○ Live: lives / archived_lives / ... ○ Log: login_logs / used_item_logs / ... ● テーブル用途毎で Cluster にまとめる アクセス頻度に応じた負荷分散 DB 分割 [垂直分割]

Slide 38

Slide 38 text

DB 分割 [水平分割] ● レコード毎に分割 ○ users などレコードが膨大になりうるもの ○ ScaleUp で限界となりうるもの ● 大きなテーブルを複数 Cluster に分割 ● Shard と key を mapping

Slide 39

Slide 39 text

● レコード毎に分割 ○ users などレコードが膨大になりうるもの ○ ScaleUp で限界となりうるもの ● 大きなテーブルを複数 Cluster に分割 ● Shard と key を mapping データ量に則した分割 DB 分割 [水平分割]

Slide 40

Slide 40 text

Pococha を支えるバックエンド 〜アーキテクチャと DB シャーディング〜 [関連セッション]

Slide 41

Slide 41 text

DB 分割 Pococha DB ... User User Live Live Log Log ...

Slide 42

Slide 42 text

DB 分割 [垂直分割] Pococha DB User User Live Live Log Log ... ...

Slide 43

Slide 43 text

DB 分割 [垂直分割] User Live Log ...

Slide 44

Slide 44 text

DB 分割 [垂直分割] User Live Log ... 負荷や QPS に応じ Type 選択

Slide 45

Slide 45 text

DB 分割 [水平分割] User Live Log ...

Slide 46

Slide 46 text

DB 分割 [水平分割] User Mapping user_id shard_id 10001 1 10002 2 10003 1 ... ... User Shard 1 User Shard 2

Slide 47

Slide 47 text

DB 分割 [水平分割] User Mapping User Shard 1 User Shard 2 User Shard 3 User Shard 4 user_id shard_id 10001 1 10002 2 10003 1 ... ...

Slide 48

Slide 48 text

DB 分割 [水平分割] User Mapping User Shard 1 User Shard 2 User Shard 3 User Shard 4 user_id shard_id 10001 1 10002 2 10003 1 ... ... 90001 3 90002 4 90003 3 90004 4

Slide 49

Slide 49 text

DB 分割 [水平分割] User Mapping User Shard 1 User Shard 2 User Shard 3 User Shard 4 user_id shard_id 10001 1 10002 2 10003 1 ... ... 90001 3 90002 4 90003 3 90004 4 重み付けによる負荷の均等化

Slide 50

Slide 50 text

Pococha を支えるバックエンド 〜アーキテクチャと DB シャーディング〜 [関連セッション]

Slide 51

Slide 51 text

I. DB 分割 II. Auto Scaling Pococha の成長を支える運用改善

Slide 52

Slide 52 text

I. DB 分割 II. Auto Scaling A. 人はなぜ Auto Scaling したいのか B. DeNA と Auto Scaling 戦いの歴史 C. Pococha で解決したかったこと D. QCT を意識した Auto Scaling 構成 Pococha の成長を支える運用改善

Slide 53

Slide 53 text

人はなぜ Auto Scaling したいのか ● 品質維持しつつコスト最適化 ● Traffic に合わせた ScaleOut / ScaleIn ● 運用工数の削減

Slide 54

Slide 54 text

人はなぜ Auto Scaling したいのか ● 品質維持しつつコスト最適化 ● Traffic に合わせた ScaleOut / ScaleIn ● 運用工数の削減 お金の節約

Slide 55

Slide 55 text

DeNA と Auto Scaling 戦いの歴史 1. 一枚岩 Script 期 2. Workflow と Spot Instances 期 [AWS] 3. Managed Instance Group 期 [GCP]

Slide 56

Slide 56 text

Auto Scaling との戦い [1/3] 一枚岩 Script 期 ● 大量構築にかかる時間大 ● コードの運用が面倒 ○ リトライ制御と複雑なロジック ○ 起動から Service In まで全部担保しテストが面倒 ○ タスク間の依存関係と冪等性の担保

Slide 57

Slide 57 text

Auto Scaling との戦い [1/3] Cloud Launch Instances (Auto Scaler) Server Server Server Network Check Provision Monitor ServiceIn Server Server Server Server Server Server 一枚岩 Script 期 Metadata

Slide 58

Slide 58 text

Metadata Auto Scaling との戦い [1/3] Cloud Launch Instances (Auto Scaler) Server Server Server Network Check Provision Monitor ServiceIn Server Server Server Server Server Server 一枚岩 Script 期

Slide 59

Slide 59 text

Auto Scaling との戦い [1/3] Server Server Server Network Check Provision Monitor Server Server Server Server Server Server Metadata 一枚岩 Script 期 Metadata に依存 共通 Script 利用

Slide 60

Slide 60 text

Auto Scaling との戦い [1/3] 一枚岩 Script 期 Server Server Server Network Check Provision Monitor Server Server Server Server Server Server Metadata Retry の制御 冪等性の担保

Slide 61

Slide 61 text

Auto Scaling との戦い [1/3] Server Server Server Network Check Provision Post Provision Server Server Server Server Server Server Metadata Monitor Server Server Server 一枚岩 Script 期

Slide 62

Slide 62 text

Metadata Auto Scaling との戦い [1/3] Cloud Launch Instances (auto-scaler) Server Server Server Network Check Provision Monitoring ServiceIn Server Server Server Server Server Server 一枚岩 Script 期 高速化と安定性に課題

Slide 63

Slide 63 text

Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS] ● Launch と Provisioning の分離 ● Metadata への登録を非同期に ● (内製)Workflow ツールにより構築を並行化

Slide 64

Slide 64 text

Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS] AWS Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API Script / etc...

Slide 65

Slide 65 text

Auto Scaling との戦い [2/3] Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API Synchronizer Workflow AWS Workflow と Spot Instances 期 [AWS] Script / etc...

Slide 66

Slide 66 text

Auto Scaling との戦い [2/3] Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API Workflow と Spot Instances 期 [AWS]

Slide 67

Slide 67 text

Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS] ● Instance の管理は Script ○ AZ 分散 ○ 複数 Instance Type ○ Spot Instance 起動できないときに Failover ○ On Demand と Spot の割合

Slide 68

Slide 68 text

Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS] ● Instance の管理は Script ○ AZ 分散 ○ 複数 Instance Type ○ Spot Instance 起動できないときに Failover ○ On Demand と Spot の割合 管理 Script のロジックが煩雑

Slide 69

Slide 69 text

Auto Scaling との戦い [3/3] Managed Instance Group 期 [GCP] ● Instance の管理を GCP に任せる ○ AZ の分散 ○ 台数維持 ● Instance Group の抽象化 ○ AWS でも動かせるように

Slide 70

Slide 70 text

Auto Scaling との戦い [3/3] Managed Instance Group 期 [GCP] Workflow Sync Instance Controller Auto Scaler Server Server Server Adapter GCP Instance Group Instance Group Instance Group

Slide 71

Slide 71 text

Auto Scaling との戦い [3/3] Workflow Sync Instance Controller Auto Scaler Server Server Server Adapter GCP Instance Group Instance Group Instance Group Managed Instance Group 期 [GCP]

Slide 72

Slide 72 text

Auto Scaling との戦い [3/3] Instance Controller GCP Adapter AWS ... Managed Instance Group 期 [GCP]

Slide 73

Slide 73 text

Auto Scaling との戦い [3/3] Workflow Sync Instance Controller Auto Scaler GCP Server Server Server Adapter Instance Group Instance Group Instance Group Managed Instance Group 期 [GCP]

Slide 74

Slide 74 text

Auto Scaling との戦い [3/3] Managed Instance Group 期 [GCP] ● Instance の撤去対象選定は DeNA で実施 ○ Service Out を事前にするなど必要 ● Auto Scaler は未だに独自実装 ● Instance Controller が複雑

Slide 75

Slide 75 text

Auto Scaling との戦い [3/3] Managed Instance Group 期 [GCP] ● Instance の撤去対象選定は DeNA で実施 ○ Service Out を事前にするなど必要 ● Auto Scaler は未だに独自実装 ● 登場人物が増えすぎた 次はもっとシンプルな構成に

Slide 76

Slide 76 text

DeNA と Auto Scaling 戦いの歴史 1. 一枚岩 Script 期 2. Workflow と Spot Instances 期 [AWS] 3. Managed Instance Group 期 [GCP]

Slide 77

Slide 77 text

1. 一枚岩 Script 期 2. Workflow と Spot Instances 期 [AWS] 3. Managed Instance Group 期 [GCP] Step and a step DeNA と Auto Scaling 戦いの歴史

Slide 78

Slide 78 text

Pococha で解決したかったこと ● 少しでも早く Scale

Slide 79

Slide 79 text

● 少しでも早く Scale ● インフラ共通 Script 群で運用 ● より Managed Service を活かした構成 Pococha で解決したかったこと

Slide 80

Slide 80 text

https://unsplash.com https://unsplash.com QCT [Quality / Cost / Time]

Slide 81

Slide 81 text

QCT を意識した Auto Scaling 構成 ● 安定化 ○ インフラ共通 Script 群で運用 ○ より Managed Service を活かした構成 ● 高速化 ○ 少しでも早く Scale ● コスト最適化

Slide 82

Slide 82 text

● 安定化 ○ インフラ共通 Script 群で運用 ○ より Managed Service を活かした構成 ● 高速化 ○ 少しでも早く Scale ● コスト最適化 QCT を意識した Auto Scaling 構成

Slide 83

Slide 83 text

● 安定化 ○ インフラ共通 Script 群で運用 ○ より Managed Service を活かした構成 ● 高速化 ○ 少しでも早く Scale ● コスト最適化 QCT を意識した Auto Scaling 構成

Slide 84

Slide 84 text

Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS] AWS Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API [再掲]

Slide 85

Slide 85 text

Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS] AWS Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API [再掲]

Slide 86

Slide 86 text

Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS] AWS Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API [再掲] Managed Service で再設計

Slide 87

Slide 87 text

Pococha Auto Scaling 運用 ● Instance 台数管理 ● 負荷に応じた増減 ● イベント前の増設 ● AMI が最新の状態

Slide 88

Slide 88 text

Pococha Auto Scaling 運用 + インフラ ● Instance 台数管理 ● 負荷に応じた増減 ● イベント前の増設 ● AMI が最新の状態 ● Scale の正確さ

Slide 89

Slide 89 text

AWS

Slide 90

Slide 90 text

Pococha Auto Scaling 運用 + インフラ ● Instance 台数管理 ● 負荷に応じた増減 ● イベント前の増設 ● AMI が最新の状態 ● Scale の正確さ Auto Scaling Group(ASG) Scaling policy Scheduled action Launch Templates Lifecycle hooks

Slide 91

Slide 91 text

● 安定化 ○ インフラ共通 Script 群で運用 ○ より Managed Service を活かした構成 ● 高速化 ○ 少しでも早く Scale ● コスト最適化 Managed + Workflow で網羅 QCT を意識した Auto Scaling 構成

Slide 92

Slide 92 text

Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS] Launch Instances (Auto Scaler) Server Server Server Metadata Database Scheduler Scheduler Scheduler Executor Sync Sync Scheduler API Synchronizer Workflow AWS [再掲]

Slide 93

Slide 93 text

Auto Scaling との戦い [2/3] Workflow と Spot Instances 期 [AWS] Launch Instances (Auto Scaler) AWS ここだけ AWS に置き換え

Slide 94

Slide 94 text

Auto Scaling Group と Workflow 連携 Server Server Server ASG

Slide 95

Slide 95 text

Auto Scaling Group と Workflow 連携 Server Server Server Scheduler Workflow Scheduler Lifecycle SQS ASG Wait

Slide 96

Slide 96 text

Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync Scheduler Lifecycle SQS Server Server Server Scheduler Workflow ASG Wait

Slide 97

Slide 97 text

Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync Scheduler Lifecycle SQS Server Server Server Scheduler Workflow ASG InService

Slide 98

Slide 98 text

● Lifecycle に Enq されたら provision 開始 ● Metadata は非同期で更新 ○ Lifecycle の処理をブロックしない ○ 依存する provision script のみ影響 ● Terminate も同様の流れ Auto Scaling Group と Workflow 連携

Slide 99

Slide 99 text

1. [AWS] Launch Instances 2. [AWS] Instance 情報を SQS に入れる 3. [DeNA] SQS から Message 取得 4. [DeNA] (内製)Workflow ツールへリクエスト 5. [DeNA] Workflow が Provisioning 処理実行 6. [DeNA] 処理完了を AWS に通知 7. [AWS] Instance を Service In Auto Scaling Group と Workflow 連携

Slide 100

Slide 100 text

Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync Server Server Server Scheduler Workflow Scheduler Lifecycle SQS ASG

Slide 101

Slide 101 text

Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync Server Server Server Scheduler Workflow Scheduler Lifecycle SQS ASG

Slide 102

Slide 102 text

Auto Scaling Group と Workflow 連携 AWS Metadata Sync Sync Server Server Server Scheduler Workflow Scheduler Lifecycle SQS ASG 簡単に内製ツール連携

Slide 103

Slide 103 text

● 安定化 ○ インフラ共通 Script 群で運用 ○ より Managed Service を活かした構成 ● 高速化 ○ 少しでも早く Scale ● コスト最適化 QCT を意識した Auto Scaling 構成

Slide 104

Slide 104 text

● 安定化 ○ インフラ共通 Script 群で運用 ○ より Managed Service を活かした構成 ● 高速化 ○ 少しでも早く Scale ● コスト最適化 => Spot Instances 活用 QCT を意識した Auto Scaling 構成

Slide 105

Slide 105 text

● 安定化 ○ インフラ共通 Script 群で運用 ○ より Managed Service を活かした構成 ● 高速化 ○ 少しでも早く Scale ● コスト最適化 Spot Instances のための設計 QCT を意識した Auto Scaling 構成

Slide 106

Slide 106 text

● 複数 Instance Pool 利用 ● Spot Interruptions ● On Demand への Failover ● On Demand を Spot へ置換 Spot Instances と Auto Scaling Group

Slide 107

Slide 107 text

● 複数 Instance Pool 利用 ● Spot Interruptions ● On Demand への Failover ● On Demand を Spot へ置換 Spot Instances と Auto Scaling Group

Slide 108

Slide 108 text

● Instance Type の混合 ○ Instance Pool = Instance Type x AZ ● ASG 内で Traffic 分散はできない 複数 Instance Pool 利用

Slide 109

Slide 109 text

● Instance Type の混合 ○ Instance Pool = Instance Type x AZ ● ASG 内で Traffic 分散はできない 複数 Instance Pool 利用

Slide 110

Slide 110 text

複数 ASG と Traffic weight ● Instance Type の混合 ○ Instance Pool = Instance Type x AZ ● ASG 内で Traffic 分散はできない 複数 Instance Pool 利用

Slide 111

Slide 111 text

c5.2xlarge c5.9xlarge c4.2xlarge c4.8xlarge c5.4xlarge c4.4xlarge ASG 複数 Instance Pool 利用

Slide 112

Slide 112 text

c5.2xlarge c5.9xlarge c4.2xlarge c4.8xlarge c5.4xlarge c4.4xlarge ASG 4.5x 複数 Instance Pool 利用

Slide 113

Slide 113 text

c5.2xlarge c4.2xlarge ASG c5.4xlarge c4.4xlarge ASG c5.9xlarge c4.8xlarge ASG 複数 Instance Pool 利用

Slide 114

Slide 114 text

ASG 2x ASG 4x ASG 9x Target Group Target Group Target Group Load Balancer 複数 Instance Pool 利用

Slide 115

Slide 115 text

2 ASG 2x ASG 4x ASG 9x Target Group Target Group Target Group Load Balancer 4 9 複数 Instance Pool 利用

Slide 116

Slide 116 text

2 ASG 2x ASG 4x ASG 9x Target Group Target Group Target Group Load Balancer 4 9 複数 Instance Pool 利用

Slide 117

Slide 117 text

2 ASG 2x ASG 4x ASG 9x Target Group Target Group Target Group Load Balancer 4 9 複数 Instance Pool 利用

Slide 118

Slide 118 text

2 9 ASG 2x ASG 4x ASG 9x Target Group Target Group Target Group Load Balancer 4 複数 Instance Pool 利用

Slide 119

Slide 119 text

2 9 ASG 2x ASG 4x ASG 9x Target Group Target Group Target Group Load Balancer 4 複数 Instance Pool 利用 1台辺りの障害の影響を均等に

Slide 120

Slide 120 text

C5.2xlarge (OnDemand) C5.2xlarge (Spot) ASG(2x) N M C5.2xlarge (OnDemand) C5.2xlarge (Spot) ASG(2x) N M 2xl (OnDemand) 2xl (OnDemand) 2xl (Spot) 2xl (Spot) ASG 2x N M 複数 Instance Pool 利用

Slide 121

Slide 121 text

● 複数 Instance Pool 利用 ● Spot Interruptions ● On Demand への Failover ● On Demand を Spot へ置換 Spot Instances と Auto Scaling Group

Slide 122

Slide 122 text

● Shutdown 前に Service Out ● Event と Workflow 連携は Lifecycle 流用 ● 停止時に On Demand 増設しない Spot Interruptions

Slide 123

Slide 123 text

● Shutdown 前に Service Out ● Event と Workflow 連携は Lifecycle 流用 ● 停止時に On Demand 増設しない Spot Interruptions

Slide 124

Slide 124 text

Policy の Scale に全て委任 ● Shutdown 前に Service Out ● Event と Workflow 連携は Lifecycle 流用 ● 停止時に On Demand 増設しない Spot Interruptions

Slide 125

Slide 125 text

Server Scheduler Spot Interrupt ASG SQS Event InstanceId Event Bridge Spot Spot Interruptions

Slide 126

Slide 126 text

Server Scheduler Spot Interrupt ASG SQS Event InstanceId Event Bridge TerminateInstance In AutoScalingGroup Spot Spot Interruptions

Slide 127

Slide 127 text

Server Scheduler Spot Interrupt ASG SQS Event InstanceId Event Bridge TerminateInstance In AutoScalingGroup Scheduler Workflow Scheduler Lifecycle SQS Terminate Lifecycle Spot Spot Interruptions

Slide 128

Slide 128 text

1. [AWS] Spot Interruption Event 検知 2. [AWS] Event の InstanceId を SQS に入れる 3. [DeNA] SQS から Message 取得 4. [DeNA] ASG に TerminateInstanceInAutoScalingGroup 実行 5. [AWS] Lifecycle を SQS に通知 6. [DeNA] Message 取得し Workflow へリクエスト 7. [DeNA] Workflow で Terminate 前処理 8. [AWS] Instance 削除 Spot Interruptions

Slide 129

Slide 129 text

Server Scheduler Spot Interrupt ASG SQS Event InstanceId Event Bridge Scheduler Workflow Scheduler Lifecycle SQS Terminate Lifecycle 流用 TerminateInstance In AutoScalingGroup Terminate Lifecycle Spot Spot Interruptions

Slide 130

Slide 130 text

● 複数 Instance Pool 利用 ● Spot Interruptions ● On Demand への Failover ● On Demand を Spot へ置換 Spot Instances と Auto Scaling Group

Slide 131

Slide 131 text

On Demand への Failover ● Spot Instance が起動できないときに発動 ○ Spot Interruptions ではない ● 一時的に On Demand で代用

Slide 132

Slide 132 text

On Demand で Capacity 確保 On Demand への Failover ● Spot Instance が起動できないときに発動 ○ Spot Interruptions ではない ● 一時的に On Demand で代用

Slide 133

Slide 133 text

Server ASG Spot On Demand への Failover

Slide 134

Slide 134 text

Server ASG Event Event Bridge Scheduler Spot Failover SQS Failed detail Spot On Demand への Failover

Slide 135

Slide 135 text

Server ASG Event Event Bridge Scheduler Spot Failover SQS Failed detail Scheduler Global Lock Acquire Spot On Demand への Failover

Slide 136

Slide 136 text

Server ASG Event Event Bridge Scheduler Spot Failover SQS Failed detail Scheduler Global Lock OnDemandBaseCapacity +N (N := DesiredCapacity - Instances) Acquire Spot On Demand への Failover

Slide 137

Slide 137 text

ASG Event Event Bridge Scheduler Spot Failover SQS Failed detail Scheduler Global Lock Acquire Server Scheduler Workflow Scheduler Lifecycle SQS OnDemandBaseCapacity +N (N := DesiredCapacity - Instances) OnDemand On Demand への Failover

Slide 138

Slide 138 text

1. [AWS] ASG 起動失敗 Event 検知 2. [AWS] Event 情報を SQS に通知 3. [DeNA] SQS から Message 取得 4. [DeNA] Lock 取得 5. [DeNA] OnDemandBaseCapacity 変更 6. [DeNA] Lock release 7. [AWS] Instance 情報を SQS に通知 8. [DeNA] Lifecycle で Provisioning On Demand への Failover

Slide 139

Slide 139 text

ASG Event Event Bridge Scheduler Spot Failover SQS Failed detail Scheduler Global Lock Acquire Server Scheduler Workflow SQS Scheduler Lifecycle OnDemandBaseCapacity +N (N := DesiredCapacity - Instances) OnDemand On Demand への Failover

Slide 140

Slide 140 text

Scheduler Spot Failover Scheduler Global Lock On Demand への Failover

Slide 141

Slide 141 text

Scheduler Spot Failover Scheduler Global Lock MySQL DynamoDB ... Redis On Demand への Failover

Slide 142

Slide 142 text

ASG Event Event Bridge Scheduler Spot Failover SQS Failed detail Scheduler Global Lock Acquire Server Scheduler Workflow SQS Scheduler Lifecycle OnDemandBaseCapacity +N (N := DesiredCapacity - Instances) OnDemand On Demand への Failover 正確で安定した Capacity 確保

Slide 143

Slide 143 text

● 複数 Instance Pool 利用 ● Spot Interruptions ● On Demand への Failover ● On Demand を Spot へ置換 Spot Instances と Auto Scaling Group

Slide 144

Slide 144 text

On Demand を Spot へ置換 ● Failover 後に Spot に戻す ● メンテがないので Online で実行 ● batch の定期実行で十分 ○ いきなり安定化するとは考えにくい

Slide 145

Slide 145 text

定期的に Spot Instance を利用 On Demand を Spot へ置換 ● Failover 後に Spot に戻す ● メンテがないので Online で実行 ● batch の定期実行で十分 ○ いきなり安定化するとは考えにくい

Slide 146

Slide 146 text

ASG Server Server Reduce OnDemand OnDemaneBaseCapacity - N (N := threshold) OnDemand Spot On Demand を Spot へ置換

Slide 147

Slide 147 text

ASG Reduce OnDemand Scheduler Workflow Scheduler Lifecycle SQS OnDemaneBaseCapacity - N (N := threshold) Server OnDemand Spot Server (Spot) Server On Demand を Spot へ置換

Slide 148

Slide 148 text

Server (Spot) ASG Server Reduce OnDemand Scheduler Workflow Scheduler Lifecycle SQS OnDemaneBaseCapacity - N (N := threshold) Spot On Demand を Spot へ置換

Slide 149

Slide 149 text

ASG Server Server Reduce OnDemand OnDemaneBaseCapacity - N (N := threshold) OnDemand Spot On Demand を Spot へ置換

Slide 150

Slide 150 text

ASG Server Server Reduce OnDemand SQS Event Event Bridge Failed detail OnDemaneBaseCapacity - N (N := threshold) OnDemand Spot On Demand を Spot へ置換

Slide 151

Slide 151 text

ASG Server Server Reduce OnDemand SQS Event Event Bridge Failed detail Scheduler Spot Failover OnDemaneBaseCapacity - N (N := threshold) OnDemand Spot On Demand を Spot へ置換

Slide 152

Slide 152 text

1. [DeNA] OnDemandBaseCapacity 変更 2. [AWS] Spot Instances を起動 3. [AWS] Spot Instance 情報を SQS に通知 4. [DeNA] Lifecycle で Provisioning 5. [AWS] On Demand Instance 情報を SQS に通知 6. [DeNA] Lifecycle で削除前処理実行 7. [AWS] On Demand Instance 削除 On Demand を Spot へ置換 [成功]

Slide 153

Slide 153 text

On Demand を Spot へ置換 [失敗] 1. [DeNA] OnDemandBaseCapacity 変更 2. [AWS] ASG 起動失敗 Event 発火 3. [AWS] Event 情報を SQS に通知 4. [DeNA] SQS から Message 取得 5. [DeNA] Spot の Failover 処理実行

Slide 154

Slide 154 text

ASG Server Server Reduce OnDemand SQS Event Event Bridge Failed detail Scheduler Spot Failover OnDemaneBaseCapacity - N (N := threshold) OnDemand Spot On Demand を Spot へ置換 失敗時は On Demand Failover

Slide 155

Slide 155 text

ASG Spot Instances と Auto Scaling Group ASG 2x Event Bridge Scheduler Spot Failover SQS Scheduler Global Lock Scheduler Workflow Scheduler Lifecycle SQS Reduce OnDemand Sync Sync Metadata AWS

Slide 156

Slide 156 text

ASG Spot Instances と Auto Scaling Group ASG 2x Event Bridge Scheduler Spot Failover SQS Scheduler Global Lock Scheduler Workflow Scheduler Lifecycle SQS Reduce OnDemand Sync Sync Metadata AWS

Slide 157

Slide 157 text

ASG Spot Instances と Auto Scaling Group ASG 2x Event Bridge Scheduler Spot Failover SQS Scheduler Global Lock Scheduler Workflow Scheduler Lifecycle SQS Reduce OnDemand Sync Sync Metadata AWS Script のロジックを AWS へ

Slide 158

Slide 158 text

Managed の恩恵 https://unsplash.com

Slide 159

Slide 159 text

Capacity Rebalancing ● Interruption 前に代替 Spot を起動, Lifecycle 発火 ○ より安定して Spot instance の導入可能 ● 起動しやすい Pool を自動選択 ○ Spot Allocation Strategy = capacity-optimized ● Spot の起動に失敗したら Event 発火可能 ○ On Demand へ Failover 可能

Slide 160

Slide 160 text

Capacity Rebalancing ● Interruption 前に代替 Spot を起動, Lifecycle 発火 ○ より安定して Spot instance の導入可能 ● 起動しやすい Pool を自動選択 ○ Spot Allocation Strategy = capacity-optimized ● Spot の起動に失敗したら Event 発火可能 ○ On Demand へ Failover 可能 便利機能を簡単に導入

Slide 161

Slide 161 text

Pococha Auto Scaling のさらなる夢 ● Spot 比率自動調整 ● Traffic weight 自動調整 ● Instance の Rolling update 完全自動化 ● Subsystem の Tracking

Slide 162

Slide 162 text

Agenda 1. DeNA のインフラ運用 2. Pococha のインフラのこれまで 3. Pococha の成長を支える運用改善 4. まとめ

Slide 163

Slide 163 text

https://www.pococha.com

Slide 164

Slide 164 text

https://unsplash.com https://unsplash.com QCT [Quality / Cost / Time]

Slide 165

Slide 165 text

https://www.pococha.com DeNA 的 ノウハウ

Slide 166

Slide 166 text

● 障害対応 ● 性能管理とチューニング ● DB 分割 ● Auto Scaling Pococha の成長を支える運用改善

Slide 167

Slide 167 text

DB 分割 [垂直分割] Pococha DB User User Live Live Log Log ... ...

Slide 168

Slide 168 text

DB 分割 [垂直分割] User Live Log ...

Slide 169

Slide 169 text

DB 分割 [水平分割] User Mapping User Shard 1 User Shard 2 User Shard 3 User Shard 4 user_id shard_id 10001 1 10002 2 10003 1 ... ... 90001 3 90002 4 90003 3 90004 4

Slide 170

Slide 170 text

c5.2xlarge c4.2xlarge ASG c5.4xlarge c4.4xlarge ASG c5.9xlarge c4.8xlarge ASG 複数 Instance Pool 利用

Slide 171

Slide 171 text

9 2 ASG 2x ASG 4x ASG 9x Target Group Target Group Target Group Load Balancer 4 複数 Instance Pool 利用

Slide 172

Slide 172 text

ASG Spot Instances と Auto Scaling Group ASG 2x Event Bridge Scheduler Spot Failover SQS Scheduler Global Lock Scheduler Workflow Scheduler Lifecycle SQS Reduce OnDemand Sync Sync Metadata AWS

Slide 173

Slide 173 text

Small Start から大規模サービスへ ● 抜本的解決を目指す ● 既存運用をできるだけ維持 ○ 開発チーム ○ インフラチーム ● 足りない部分の実装は細かく ○ Managed Service に置き換え可能に

Slide 174

Slide 174 text

Small Start から大規模サービスへ ● 抜本的解決を目指す ● 既存運用をできるだけ維持 ○ 開発チーム ○ インフラチーム ● 足りない部分の実装は細かく ○ Managed Service に置き換え可能に Make you happy

Slide 175

Slide 175 text

Pococha のグローバル展開に携わりたい 大規模トラフィックと戦いたい Subsystem を実装したい

Slide 176

Slide 176 text

https://career.dena.com

Slide 177

Slide 177 text

No content