Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
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 を使ったゲームや基盤 開発
○ 他にもいろいろ...!
コロプラ 採用 検索
▼詳しく
Próxima SlideShare
Cargando en…5
×

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

25.666 visualizaciones

Publicado el

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

Publicado en: Tecnología
  • Inicia sesión para ver los comentarios

株式会社コロプラ『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 を使ったゲームや基盤 開発 ○ 他にもいろいろ...! コロプラ 採用 検索 ▼詳しく

×