GKEとCloud Spannerが躍動する
ドラゴンクエストウォーク
51
自己紹介
● 邵 正 / Zheng Shao @axot
● 株式会社コロプラ(2015年新卒入社)
○ インフラチーム所属
○ 主に大規模アーキテクチャ設計担当
52
コロプラと
© 2019 ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.
©COLOPL, Inc.
53
1000万DL

54
● ? Pods
GKE プロダクション規模
© 2019 ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.
55
● 10,000+ Pods
GKE プロダクション規模
© 2019 ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.
56
GKEシングルクラスタ 課題
● Master Nodeに過負荷
● Spinnaker Deploy時間が長い
● 動作しないコンポーネント
57
● Master Nodeに過負荷
● Spinnaker Deploy時間が長い
● 動作しないコンポーネント
GKEマルチクラスタで解決
シングルクラスタ 場合 マルチクラスタ 場合
オブジェクト数: 大 オブジェクト数: 小
58
GKEマルチクラスタ 導入
● トラフィック制御
● クラスタ間通信
● モニタリング
FE
FE
FE
BE
Cloud
Spanner
59
トラフィック制御
Frontend
Backend
33%
33%
33%
?
60
トラフィック制御
Frontend
Canary
1%
HAProxy
Frontend
Backend
33%
33%
33%
61
GKE Cluster
クラスタ内通信
Application
Kubernetes Engine
RabbitMQ™
GKE/Kubernetes
RabbitMQ
Service
● 通常タイトルにおける構成(クラスタ内通信)
KubeDNS
GKE/Kubernetes
62
GKE Cluster
クラスタ内通信
Application
Kubernetes Engine
RabbitMQ™
GKE/Kubernetes
RabbitMQ
Service
● 通常タイトルにおける構成(クラスタ内通信)
KubeDNS
GKE/Kubernetes
1. rabbitmq.ns.svc.cluster.local.
63
GKE Cluster
クラスタ内通信
Application
Kubernetes Engine
RabbitMQ™
GKE/Kubernetes
RabbitMQ
Service
● 通常タイトルにおける構成(クラスタ内通信)
KubeDNS
GKE/Kubernetes
10.10.0.1
64
GKE Cluster
クラスタ内通信
Application
Kubernetes Engine
RabbitMQ™
GKE/Kubernetes
RabbitMQ
Service
● 通常タイトルにおける構成(クラスタ内通信)
KubeDNS
GKE/Kubernetes
10.0.0.110.10.0.1
65
クラスタ間通信
Frontend Cluster Backend Cluster
Application
GKE/Kubernetes
RabbitMQ™
GKE/Kubernetes
RabbitMQ
Service
rabbitmq.ns.svc.cluster.local.
● クラスタにおける通信
???
66
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS Cache
GKE/Kubernetes
RabbitMQ
Service
Node
kube-system
https://github.com/colopl/k8s-local-dns
https://github.com/colopl/expose-kubedns
● クラスタにおける通信
Application
GKE/Kubernetes
67
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS Cache
GKE/Kubernetes
RabbitMQ
Service
Node
kube-system
https://github.com/colopl/k8s-local-dns
https://github.com/colopl/expose-kubedns
● クラスタにおける通信
Application
GKE/Kubernetes
68
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS Cache
GKE/Kubernetes
RabbitMQ
Service
Node
kube-system
https://github.com/colopl/k8s-local-dns
https://github.com/colopl/expose-kubedns
● クラスタにおける通信
Application
GKE/Kubernetes
69
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS Cache
GKE/Kubernetes
RabbitMQ
Service
rabbitmq.ns.svc.cluster.local.
Node
kube-system
https://github.com/colopl/k8s-local-dns
https://github.com/colopl/expose-kubedns
● クラスタにおける通信
Application
GKE/Kubernetes
70
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS Cache
GKE/Kubernetes
Node
RabbitMQ
Service
kube-system
https://github.com/colopl/k8s-local-dns
https://github.com/colopl/expose-kubedns
● クラスタにおける通信
Application
GKE/Kubernetes
10.10.0.1 ?
71
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS Cache
GKE/Kubernetes
Node
RabbitMQ
Headless Service
kube-system
10.0.0.1
https://github.com/colopl/k8s-local-dns
https://github.com/colopl/expose-kubedns
● クラスタにおける通信
Application
GKE/Kubernetes
72
通常タイトルにおける構成 DQウォークにおける構成
Monitoring スケーリング(VictoriaMetrics)
…
Grafana Prometheus
VictoriaMetrics
Cluster Mode
73
● GKEマルチクラスタ 採用
● HAProxyによるトラフィック制御を実現
● Custom DNSによるクラスタ間通信
● Victoria Metricsを使ったモニタリングシステム
GKEまとめ
Cloud Spannerにおける
急激な高負荷へ 対策法
75
自己紹介
● 粟田大樹 / Awata Hiroki
● 株式会社コロプラ(2016年新卒入社)
○ サーバー基盤チーム所属
○ 主に Cloud Spanner まわり担当
76
Cloud Spanner と
● Google Cloud Platform にある DB サービス

● SQL が使える に KVS ようなスケール性能

● ダウンタイムなしでスケール可能
77
DQウォークで ユーザー系DBをすべて

Cloud Spannerで運用しています!!

© 2019 ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.
78
● ゲームサーバー 急激に高い負荷が来ます

○ リリース直後

○ イベント開始直後

○ ...

● Cloud Spannerに急激に高い負荷をかけてみよう

▶ ガンガンいこうぜ
79
▼ Cloud Spanner レイテンシ (99 perecentile)
80
Split
Node
急激な負荷!!!!
Split分割が
追いつかない〜〜
SplitSplitSplit Split
そ 結果
レイテンシ悪化...
81
Splitと ?
Split Split Split Split
…0 ~ 2
Node Node Node
3 ~ 5 7 ~ 9 a ~ c
Split
Key 範囲で分割
…
82
● Splitが増える条件
○ Load-based split(負荷トリガー)
○ Size-based split(サイズ増加トリガー)
83
Splitが増える条件 [1] Load-based split
Split Split Split Split
…0 ~ 2
Node Node Node
3 ~ 5 7 ~ 9 a ~ c
0 Keyへ
アクセスが多い…
…
84
Splitが増える条件 [1] Load-based split
Split Split Split Split
…1~2
Node Node Node
3 ~ 5 7 ~ 9 a ~ c
…
Split
0
0 Keyを分離
新規Splitに
85
Splitが増える条件 [2] Size-based split
Split Split Split Split
…0 ~ 2
Node Node Node
3 ~ 5 7 ~ 9 a ~ c
0 Key
データ量が多い…
…
86
Splitが増える条件 [2] Size-based split
Split Split Split Split
…1~2
Node Node Node
3 ~ 5 7 ~ 9 a ~ c
…
Split
0
0 Keyを分離
新規Splitに
87
Split
事前にwarm-up
Split Split Split
じわじわ…
warm-up後
圧倒的安定感!!!
Node
88
1. warm-up 2. 負荷試験 3. リリース
リリースまで 流れ
レイテンシ
89
Cloud Spanner Warm-up 手法
● ダミーデータをINSERT, SELECT
● GKEに乗せて並列化
…
INSERT, SELECT
90
$ kubectl scale deployment ...
Cloud Spanner
Console
負荷を上げて...
Cloud Spanner 様子みて…
ノード数を調節して…
手動でwarm-up...HPA(Human Pod AutoScaler)!!!
91
DQウォーク
Cloud Spanner
自動warm-up計画
92
…
2. Podスケール
INSERT, SELECT
1. Cloud Spanner
CPUを監視
3. 状況報告
93
Cloud Spanner
ノード数を
段階的に上げる
波 ように
負荷を上下させる
ノード数 QPS
94
1. warm-up 2. 負荷試験 3. リリース
リリースまで 流れ
warm-upされているか確認
95
1. warm-up 2. 負荷試験 3. リリース
ダミーデータ 削除
ここでwarm-upと負荷試験で
入れたデータを消したい場合
96
Split
Node
Split Split Split
DROP DATABASE
して いけない!!!
DROP DATABASE
するとSplitも
全部消えちゃう
Splitを残したまま
行だけを消す
(DELETE)
97
1. warm-up 2. 負荷試験 3. リリース
無事リリース
98
リリース直後 ピークを乗り切ったら…
サービスを継続したまま柔軟にスケール可能!
Cloud Spanner
強み!
ノード数
99
Cloud Spanner負荷対策まとめ
● まっさらなCloud Spanner 急激な高負荷に弱い
● Latencyが悪化する場合、事前に温めておく
● 温めたあと データを消す場合 行 み消す
● ピークを乗り切ったら柔軟にスケール可能
全体 まとめ
101
まとめ
● GKEマルチクラスタ
○ HAProxyを使ったトラフィック制御
○ Customsize DNSでクラスタ間通信
○ Victoria Metricsによるモニタリング基盤
● Cloud Spanner
○ 新しいCloud Spanner 事前に温める
○ 温めると急激な負荷がきても大丈夫!
102
We are hiring!
● コロプラで エンジニアを積極採用中です!!
○ Cloud Spanner, GKE を使ったゲームや基盤 開発
○ 他にもいろいろ...!
コロプラ 採用 検索
▼詳しく

株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game & Apps