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 が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game & Apps

14,484 views

Published on

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

Published in: Technology
  • Be the first to comment

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

×