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 の成長を支える運用改善
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 期
高速化と安定性に課題
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 戦いの歴史
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
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 へ置換