Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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
● 通常タイトルにおける構成(クラスタ内通信)
Kub...
62
GKE Cluster
クラスタ内通信
Application
Kubernetes Engine
RabbitMQ™
GKE/Kubernetes
RabbitMQ
Service
● 通常タイトルにおける構成(クラスタ内通信)
Kub...
63
GKE Cluster
クラスタ内通信
Application
Kubernetes Engine
RabbitMQ™
GKE/Kubernetes
RabbitMQ
Service
● 通常タイトルにおける構成(クラスタ内通信)
Kub...
64
GKE Cluster
クラスタ内通信
Application
Kubernetes Engine
RabbitMQ™
GKE/Kubernetes
RabbitMQ
Service
● 通常タイトルにおける構成(クラスタ内通信)
Kub...
65
クラスタ間通信
Frontend Cluster Backend Cluster
Application
GKE/Kubernetes
RabbitMQ™
GKE/Kubernetes
RabbitMQ
Service
rabbitmq....
66
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS...
67
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS...
68
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS...
69
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS...
70
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS...
71
クラスタ間通信
Frontend Cluster Backend Cluster
RabbitMQ™
GKE/Kubernetes
CoreDNS
GKE/Kubernetes
Cloud Load
Balancing
Local DNS...
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を分離
新規Spl...
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を分離
新規Spl...
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 Po...
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
○ 新しいClo...
102
We are hiring!
● コロプラで エンジニアを積極採用中です!!
○ Cloud Spanner, GKE を使ったゲームや基盤 開発
○ 他にもいろいろ...!
コロプラ 採用 検索
▼詳しく
Upcoming SlideShare
Loading in …5
×

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

26,507 views

Published on

2019 年 11 月 18 日 Google Cloud INSIDE Game & Apps
『GKE と Cloud Spanner が躍動する
 ドラゴンクエストウォーク』
株式会社コロプラ 邵 正氏と粟田 大樹氏によるセッションの登壇スライドです。

Published in: Technology
  • Login to see the comments

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

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

  5. 5. 54 ● ? Pods GKE プロダクション規模 © 2019 ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.
  6. 6. 55 ● 10,000+ Pods GKE プロダクション規模 © 2019 ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.
  7. 7. 56 GKEシングルクラスタ 課題 ● Master Nodeに過負荷 ● Spinnaker Deploy時間が長い ● 動作しないコンポーネント
  8. 8. 57 ● Master Nodeに過負荷 ● Spinnaker Deploy時間が長い ● 動作しないコンポーネント GKEマルチクラスタで解決 シングルクラスタ 場合 マルチクラスタ 場合 オブジェクト数: 大 オブジェクト数: 小
  9. 9. 58 GKEマルチクラスタ 導入 ● トラフィック制御 ● クラスタ間通信 ● モニタリング FE FE FE BE Cloud Spanner
  10. 10. 59 トラフィック制御 Frontend Backend 33% 33% 33% ?
  11. 11. 60 トラフィック制御 Frontend Canary 1% HAProxy Frontend Backend 33% 33% 33%
  12. 12. 61 GKE Cluster クラスタ内通信 Application Kubernetes Engine RabbitMQ™ GKE/Kubernetes RabbitMQ Service ● 通常タイトルにおける構成(クラスタ内通信) KubeDNS GKE/Kubernetes
  13. 13. 62 GKE Cluster クラスタ内通信 Application Kubernetes Engine RabbitMQ™ GKE/Kubernetes RabbitMQ Service ● 通常タイトルにおける構成(クラスタ内通信) KubeDNS GKE/Kubernetes 1. rabbitmq.ns.svc.cluster.local.
  14. 14. 63 GKE Cluster クラスタ内通信 Application Kubernetes Engine RabbitMQ™ GKE/Kubernetes RabbitMQ Service ● 通常タイトルにおける構成(クラスタ内通信) KubeDNS GKE/Kubernetes 10.10.0.1
  15. 15. 64 GKE Cluster クラスタ内通信 Application Kubernetes Engine RabbitMQ™ GKE/Kubernetes RabbitMQ Service ● 通常タイトルにおける構成(クラスタ内通信) KubeDNS GKE/Kubernetes 10.0.0.110.10.0.1
  16. 16. 65 クラスタ間通信 Frontend Cluster Backend Cluster Application GKE/Kubernetes RabbitMQ™ GKE/Kubernetes RabbitMQ Service rabbitmq.ns.svc.cluster.local. ● クラスタにおける通信 ???
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. 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
  21. 21. 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 ?
  22. 22. 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
  23. 23. 72 通常タイトルにおける構成 DQウォークにおける構成 Monitoring スケーリング(VictoriaMetrics) … Grafana Prometheus VictoriaMetrics Cluster Mode
  24. 24. 73 ● GKEマルチクラスタ 採用 ● HAProxyによるトラフィック制御を実現 ● Custom DNSによるクラスタ間通信 ● Victoria Metricsを使ったモニタリングシステム GKEまとめ
  25. 25. Cloud Spannerにおける 急激な高負荷へ 対策法
  26. 26. 75 自己紹介 ● 粟田大樹 / Awata Hiroki ● 株式会社コロプラ(2016年新卒入社) ○ サーバー基盤チーム所属 ○ 主に Cloud Spanner まわり担当
  27. 27. 76 Cloud Spanner と ● Google Cloud Platform にある DB サービス
 ● SQL が使える に KVS ようなスケール性能
 ● ダウンタイムなしでスケール可能
  28. 28. 77 DQウォークで ユーザー系DBをすべて
 Cloud Spannerで運用しています!!
 © 2019 ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.
  29. 29. 78 ● ゲームサーバー 急激に高い負荷が来ます
 ○ リリース直後
 ○ イベント開始直後
 ○ ...
 ● Cloud Spannerに急激に高い負荷をかけてみよう
 ▶ ガンガンいこうぜ
  30. 30. 79 ▼ Cloud Spanner レイテンシ (99 perecentile)
  31. 31. 80 Split Node 急激な負荷!!!! Split分割が 追いつかない〜〜 SplitSplitSplit Split そ 結果 レイテンシ悪化...
  32. 32. 81 Splitと ? Split Split Split Split …0 ~ 2 Node Node Node 3 ~ 5 7 ~ 9 a ~ c Split Key 範囲で分割 …
  33. 33. 82 ● Splitが増える条件 ○ Load-based split(負荷トリガー) ○ Size-based split(サイズ増加トリガー)
  34. 34. 83 Splitが増える条件 [1] Load-based split Split Split Split Split …0 ~ 2 Node Node Node 3 ~ 5 7 ~ 9 a ~ c 0 Keyへ アクセスが多い… …
  35. 35. 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に
  36. 36. 85 Splitが増える条件 [2] Size-based split Split Split Split Split …0 ~ 2 Node Node Node 3 ~ 5 7 ~ 9 a ~ c 0 Key データ量が多い… …
  37. 37. 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に
  38. 38. 87 Split 事前にwarm-up Split Split Split じわじわ… warm-up後 圧倒的安定感!!! Node
  39. 39. 88 1. warm-up 2. 負荷試験 3. リリース リリースまで 流れ レイテンシ
  40. 40. 89 Cloud Spanner Warm-up 手法 ● ダミーデータをINSERT, SELECT ● GKEに乗せて並列化 … INSERT, SELECT
  41. 41. 90 $ kubectl scale deployment ... Cloud Spanner Console 負荷を上げて... Cloud Spanner 様子みて… ノード数を調節して… 手動でwarm-up...HPA(Human Pod AutoScaler)!!!
  42. 42. 91 DQウォーク Cloud Spanner 自動warm-up計画
  43. 43. 92 … 2. Podスケール INSERT, SELECT 1. Cloud Spanner CPUを監視 3. 状況報告
  44. 44. 93 Cloud Spanner ノード数を 段階的に上げる 波 ように 負荷を上下させる ノード数 QPS
  45. 45. 94 1. warm-up 2. 負荷試験 3. リリース リリースまで 流れ warm-upされているか確認
  46. 46. 95 1. warm-up 2. 負荷試験 3. リリース ダミーデータ 削除 ここでwarm-upと負荷試験で 入れたデータを消したい場合
  47. 47. 96 Split Node Split Split Split DROP DATABASE して いけない!!! DROP DATABASE するとSplitも 全部消えちゃう Splitを残したまま 行だけを消す (DELETE)
  48. 48. 97 1. warm-up 2. 負荷試験 3. リリース 無事リリース
  49. 49. 98 リリース直後 ピークを乗り切ったら… サービスを継続したまま柔軟にスケール可能! Cloud Spanner 強み! ノード数
  50. 50. 99 Cloud Spanner負荷対策まとめ ● まっさらなCloud Spanner 急激な高負荷に弱い ● Latencyが悪化する場合、事前に温めておく ● 温めたあと データを消す場合 行 み消す ● ピークを乗り切ったら柔軟にスケール可能
  51. 51. 全体 まとめ
  52. 52. 101 まとめ ● GKEマルチクラスタ ○ HAProxyを使ったトラフィック制御 ○ Customsize DNSでクラスタ間通信 ○ Victoria Metricsによるモニタリング基盤 ● Cloud Spanner ○ 新しいCloud Spanner 事前に温める ○ 温めると急激な負荷がきても大丈夫!
  53. 53. 102 We are hiring! ● コロプラで エンジニアを積極採用中です!! ○ Cloud Spanner, GKE を使ったゲームや基盤 開発 ○ 他にもいろいろ...! コロプラ 採用 検索 ▼詳しく

×