Slide 1

Slide 1 text

コロプラにおける Launch Coordination Engineeringの取り組み

Slide 2

Slide 2 text

● @halnique ● 株式会社コロプラ サーバー基盤グループ LCEチーム ● 2020/2 入社 自己紹介

Slide 3

Slide 3 text

● k8sそのものの話はあまり多くありません(できません) ● スマートフォンゲームのバックエンドシステムなので、一般的なWebアプリ ケーションとは異なる点がある場合があります 諸注意

Slide 4

Slide 4 text

内容

Slide 5

Slide 5 text

● LCEってなんですか? ● コロプラでLCEが必要な理由 ● コロプラのLCEの業務とk8s 内容

Slide 6

Slide 6 text

● LCEってなんですか? ● コロプラでLCEが必要な理由 ● コロプラのLCEの業務とk8s 内容

Slide 7

Slide 7 text

LCEってなんですか? Launch Coordination Engineering ローンチ調整エンジニアリング

Slide 8

Slide 8 text

LCEってなんですか? Launch Coordination Engineering ローンチ調整エンジニアリング

Slide 9

Slide 9 text

LCEってなんですか? Site Reliability Engineering / Chapter 27 - Reliable Product Launches at Scale https://sre.google/sre-book/reliable-product-launches/

Slide 10

Slide 10 text

LCEってなんですか? SRE

Slide 11

Slide 11 text

LCEってなんですか? SRE LCE

Slide 12

Slide 12 text

● プロダクトやサービスがGoogleの信頼性の基準とベストプラクティスに沿っ ているかを監査し、信頼性を高めるための具体的なアクションを提供する ● ローンチに関わる複数のチーム間の連絡役として働く ● タスクが滞り無く進んでいることを確認し、技術面からローンチを推進する ● 門番の役目を果たし、ローンチが「安全」だという判断の承認を行う ● 開発者の学習速度を高めるために内部ドキュメントやトレーニング用のリ ソースを用意し、開発者に対してベストプラクティスやGoogleのサービスと 統合する方法についての教育を行う LCEってなんですか? Site Reliability Engineering / Chapter 27 - Reliable Product Launches at Scale https://sre.google/sre-book/reliable-product-launches/

Slide 13

Slide 13 text

● LCEってなんですか? ● コロプラでLCEが必要な理由 ● コロプラのLCEの業務とk8s 内容

Slide 14

Slide 14 text

● LCEってなんですか? ● コロプラでLCEが必要な理由 ● コロプラのLCEの業務とk8s 内容

Slide 15

Slide 15 text

コロプラでLCEが必要な理由

Slide 16

Slide 16 text

コロプラでLCEが必要な理由 ゲームたくさん作って たくさんリリースしたい!

Slide 17

Slide 17 text

コロプラでLCEが必要な理由 完成した!リリースだ

Slide 18

Slide 18 text

コロプラでLCEが必要な理由 お、コロプラの新作出てるんだ やってみるか

Slide 19

Slide 19 text

コロプラでLCEが必要な理由 サーバーのようすが…?

Slide 20

Slide 20 text

コロプラでLCEが必要な理由 緊急 メンテナンス!

Slide 21

Slide 21 text

コロプラでLCEが必要な理由 …やらなくていいか

Slide 22

Slide 22 text

Q: いくつもゲーム出してるんだから、落ちないためのノウハウあるでしょ? A: それがなかなか難しいんです… ● ローンチに携わった経験のある人が多くない ● ローンチ時に最大トラフィックが来るようなマーケティング ● ビッグバンリリース ● ゲームによって異なるアーキテクチャ、アクセスパターンや負荷の特性 ● ローンチ直前までクオリティアップの開発が行われていることもあり、ローンチそのものの準備に 開発の工数を割きづらい ● 大規模ゲームの運用経験がない場合、負荷的な観点で開発をするのが難しいことも コロプラでLCEが必要な理由

Slide 23

Slide 23 text

Q: いくつもゲーム出してるんだから、落ちないためのノウハウあるでしょ? A: それがなかなか難しいんです… ● ローンチに携わった経験のある人が多くない ● ローンチ時に最大トラフィックが来るようなマーケティング ● ビッグバンリリース ● ゲームによって異なるアーキテクチャ、アクセスパターンや負荷の特性 ● ローンチ直前までクオリティアップの開発が行われていることもあり、ローンチそのものの準備に 開発の工数を割きづらい ● 大規模ゲームの運用経験がない場合、負荷的な観点で開発をするのが難しいことも コロプラでLCEが必要な理由

Slide 24

Slide 24 text

● 開発期間の長期化もあり、ローンチの期間が空きがち ● ゲームに使われるインフラなど技術スタックの更新 ● ローンチが近づくとアサインされるローンチ請負人的な人もいたが、その人 個人の負荷が高い&スケールしづらい コロプラでLCEが必要な理由 ローンチに関するノウハウの断片化

Slide 25

Slide 25 text

● 開発期間の長期化もあり、ローンチの期間が空きがち ● ゲームに使われるインフラなど技術スタックの更新 ● ローンチが近づくとアサインされるローンチ請負人的な人もいたが、その人 個人の負荷が高い&スケールしづらい コロプラでLCEが必要な理由 ローンチに関するノウハウの断片化

Slide 26

Slide 26 text

● 個人ではなく、ローンチ請負チームがあればよいのでは? ● 調べてみるとGoogleでも似たような取り組みをしているようだ コロプラでLCEが必要な理由 コロプラLCEの発足

Slide 27

Slide 27 text

● LCEってなんですか? ● コロプラでLCEが必要な理由 ● コロプラのLCEの業務とk8s 内容

Slide 28

Slide 28 text

● LCEってなんですか? ● コロプラでLCEが必要な理由 ● コロプラのLCEの業務とk8s 内容

Slide 29

Slide 29 text

コロプラのLCEの業務とk8s ● プロダクトやサービスがGoogleの信頼性の基準とベストプラクティスに沿っ ているかを監査し、信頼性を高めるための具体的なアクションを提供する ● ローンチに関わる複数のチーム間の連絡役として働く ● タスクが滞り無く進んでいることを確認し、技術面からローンチを推進する ● 門番の役目を果たし、ローンチが「安全」だという判断の承認を行う ● 開発者の学習速度を高めるために内部ドキュメントやトレーニング用のリ ソースを用意し、開発者に対してベストプラクティスやGoogleのサービスと 統合する方法についての教育を行う Site Reliability Engineering / Chapter 27 - Reliable Product Launches at Scale https://sre.google/sre-book/reliable-product-launches/

Slide 30

Slide 30 text

コロプラのLCEの業務とk8s ● プロダクトやサービスがGoogleの信頼性の基準とベストプラクティスに沿っ ているかを監査し、信頼性を高めるための具体的なアクションを提供する ● ローンチに関わる複数のチーム間の連絡役として働く ● タスクが滞り無く進んでいることを確認し、技術面からローンチを推進する ● 門番の役目を果たし、ローンチが「安全」だという判断の承認を行う ● 開発者の学習速度を高めるために内部ドキュメントやトレーニング用のリ ソースを用意し、開発者に対してベストプラクティスやGoogleのサービスと 統合する方法についての教育を行う Site Reliability Engineering / Chapter 27 - Reliable Product Launches at Scale https://sre.google/sre-book/reliable-product-launches/

Slide 31

Slide 31 text

コロプラのLCEの業務とk8s 負荷試験

Slide 32

Slide 32 text

コロプラのLCEの業務とk8s 1. 実際にゲームをプレイ a. ユーザーの行動(アクセスパターン)を把握 b. ゲーム上重要な/特殊な仕様を把握 2. 負荷をかけるシナリオを検討・作成 a. リトライ戦略などゲームの実装も合わせて確認 3. 負荷試験に使う環境を構築 a. 負荷をかける側の環境も合わせて構築 b. DBのウォームアップ環境も兼ねる 4. ミニマムな規模から負荷試験を実施 a. リソースあたり処理できるユーザー数を見積もる 5. 想定の最大規模までスケールしながら実施 6. リリース 3~6 ヶ 月

Slide 33

Slide 33 text

コロプラのLCEの業務とk8s 1. 実際にゲームをプレイ a. ユーザーの行動(アクセスパターン)を把握 b. ゲーム上重要な/特殊な仕様を把握 2. 負荷をかけるシナリオを検討・作成 a. リトライ戦略などゲームの実装も合わせて確認 3. 負荷試験に使う環境を構築 a. 負荷をかける側の環境も合わせて構築 b. DBのウォームアップ環境も兼ねる 4. ミニマムな規模から負荷試験を実施 a. リソースあたり処理できるユーザー数を見積もる 5. 想定の最大規模までスケールしながら実施 6. リリース 3~6 ヶ 月

Slide 34

Slide 34 text

● ユーザーがどういう行動をするか把握 ● ユーザーあたりのRPSを測定 コロプラのLCEの業務とk8s

Slide 35

Slide 35 text

コロプラのLCEの業務とk8s 1. 実際にゲームをプレイ a. ユーザーの行動(アクセスパターン)を把握 b. ゲーム上重要な/特殊な仕様を把握 2. 負荷をかけるシナリオを検討・作成 a. リトライ戦略などゲームの実装も合わせて確認 3. 負荷試験に使う環境を構築 a. 負荷をかける側の環境も合わせて構築 b. DBのウォームアップ環境も兼ねる 4. ミニマムな規模から負荷試験を実施 a. リソースあたり処理できるユーザー数を見積もる 5. 想定の最大規模までスケールしながら実施 6. リリース 3~6 ヶ 月

Slide 36

Slide 36 text

コロプラのLCEの業務とk8s ● Golangの自作負荷試験ツール

Slide 37

Slide 37 text

Q: なんで自作? A: より実際のクライアントに近づけたい ● リトライなどエラーハンドリングを柔軟に制御したい ● 複雑な行動パターンもシナリオとして表現したい ● クライアントのメトリクスも収集して可視化したい コロプラのLCEの業務とk8s

Slide 38

Slide 38 text

コロプラのLCEの業務とk8s Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること [Google Cloud INSIDE Games & Apps] / SREの取り組み https://www.slideshare.net/GoogleCloudPlatformJP/spanner-gkespinnaker-sre-google-cloud-insid e-games-apps

Slide 39

Slide 39 text

コロプラのLCEの業務とk8s 開発チーム LCE SRE ローンチ

Slide 40

Slide 40 text

コロプラのLCEの業務とk8s 1. 実際にゲームをプレイ a. ユーザーの行動(アクセスパターン)を把握 b. ゲーム上重要な/特殊な仕様を把握 2. 負荷をかけるシナリオを検討・作成 a. リトライ戦略などゲームの実装も合わせて確認 3. 負荷試験に使う環境を構築 a. 負荷をかける側の環境も合わせて構築 b. DBのウォームアップ環境も兼ねる 4. ミニマムな規模から負荷試験を実施 a. リソースあたり処理できるユーザー数を見積もる 5. 想定の最大規模までスケールしながら実施 6. リリース 3~6 ヶ 月

Slide 41

Slide 41 text

コロプラのLCEの業務とk8s Google Kubernetes Engine Google Cloud Spanner

Slide 42

Slide 42 text

コロプラのLCEの業務とk8s

Slide 43

Slide 43 text

コロプラのLCEの業務とk8s

Slide 44

Slide 44 text

コロプラのLCEの業務とk8s ● Application Cluster ○ Application (PHP) Pods ○ etc ● Testing Tools Cluster ○ Scenario Runner (Golang) Job ○ Spanner Warm-Up Tools (Golang) Job/Deployment ○ etc

Slide 45

Slide 45 text

コロプラのLCEの業務とk8s ● Application Cluster ○ Application (PHP) Pods ○ etc ● Testing Tools Cluster ○ Scenario Runner (Golang) Job ○ Spanner Warm-Up Tools (Golang) Job/Deployment ○ etc

Slide 46

Slide 46 text

コロプラのLCEの業務とk8s ● Golang ● Helm charts ● GitLab CI build manifest → Google Cloud Storage ● Spinnaker deploy manifest

Slide 47

Slide 47 text

コロプラのLCEの業務とk8s 1. 実際にゲームをプレイ a. ユーザーの行動(アクセスパターン)を把握 b. ゲーム上重要な/特殊な仕様を把握 2. 負荷をかけるシナリオを検討・作成 a. リトライ戦略などゲームの実装も合わせて確認 3. 負荷試験に使う環境を構築 a. 負荷をかける側の環境も合わせて構築 b. DBのウォームアップ環境も兼ねる 4. ミニマムな規模から負荷試験を実施 a. リソースあたり処理できるユーザー数を見積もる 5. 想定の最大規模までスケールしながら実施 6. リリース 3~6 ヶ 月

Slide 48

Slide 48 text

コロプラのLCEの業務とk8s ● Spanner Nodes x1 (Processing units x1000) ● Application HPA min:1 ~ ● Scenario users 1,000 ~ Spanner 1 nodeを基準として処理できるユーザー数や周辺の必要リソースを見積 もる 明らかにパフォーマンスが良くない箇所を確認・修正

Slide 49

Slide 49 text

コロプラのLCEの業務とk8s Hot spot Warming up Session Split Mutation Stale / Strong read

Slide 50

Slide 50 text

コロプラのLCEの業務とk8s 1. 実際にゲームをプレイ a. ユーザーの行動(アクセスパターン)を把握 b. ゲーム上重要な/特殊な仕様を把握 2. 負荷をかけるシナリオを検討・作成 a. リトライ戦略などゲームの実装も合わせて確認 3. 負荷試験に使う環境を構築 a. 負荷をかける側の環境も合わせて構築 b. DBのウォームアップ環境も兼ねる 4. ミニマムな規模から負荷試験を実施 a. リソースあたり処理できるユーザー数を見積もる 5. 想定の最大規模までスケールしながら実施 6. リリース 3~6 ヶ 月

Slide 51

Slide 51 text

コロプラのLCEの業務とk8s N users (Spanner 1 node) Target users (Spanner X node)

Slide 52

Slide 52 text

コロプラのLCEの業務とk8s 1. 実際にゲームをプレイ a. ユーザーの行動(アクセスパターン)を把握 b. ゲーム上重要な/特殊な仕様を把握 2. 負荷をかけるシナリオを検討・作成 a. リトライ戦略などゲームの実装も合わせて確認 3. 負荷試験に使う環境を構築 a. 負荷をかける側の環境も合わせて構築 b. DBのウォームアップ環境も兼ねる 4. ミニマムな規模から負荷試験を実施 a. リソースあたり処理できるユーザー数を見積もる 5. 想定の最大規模までスケールしながら実施 6. リリース 3~6 ヶ 月

Slide 53

Slide 53 text

コロプラのLCEの業務とk8s ゲーム データベースとして Cloud Spanner を使用する場合のベスト プラクティス https://cloud.google.com/architecture/best-practices-cloud-spanner-gaming-database

Slide 54

Slide 54 text

● リリース2日前 ○ Spanner Warm-up ● リリース1日前 ○ Scale-out ○ Testing ○ Delete data ● リリース当日 ○ Monitoring ● リリース後 ○ Clean up コロプラのLCEの業務とk8s

Slide 55

Slide 55 text

まとめ

Slide 56

Slide 56 text

● ローンチに関わる色んなことをやるのがLCE ● コロプラではローンチたくさんしたいけど、サービス落としたくないので LCEチームが立ち上がった ● コロプラのLCEはk8sや関連技術を使って、ローンチ前の負荷試験に注力して いる まとめ

Slide 57

Slide 57 text

以上