Upgrade to Pro — share decks privately, control downloads, hide ads and more …

大規模ゲーム開発環境を支えるサーバー・インフラアーキテクチャへの取り組み事例 / Execut...

Takeo Suzuki
November 23, 2019

大規模ゲーム開発環境を支えるサーバー・インフラアーキテクチャへの取り組み事例 / Execution example of server and infrastructure architectures that supporting large-scale game development environments

CEDEC+KYUSHU 2019
http://cedec-kyushu.jp/2019/session/36.html

上記にてお話した際の資料です。
前半はインフラベースの技術変遷と開発環境インフラ自動化取組みについて。
後半はサーバーサイドベースの技術変遷と開発環境運用の自動化取組みについての話です。

DELiGHTWORKS

Takeo Suzuki

November 23, 2019
Tweet

Other Decks in Technology

Transcript

  1. Copyright 2019 DELiGHTWORKS. 自己紹介 鈴木 健生 (すずき たけお) これまでゲーム業界で様々な職種の経験を重ね、 2019年

    6月にディライトワークス株式会社にSREとして入社 開発者の業務を効率化する為の自動化に取り組み中
  2. Copyright 2019 DELiGHTWORKS. アジェンダ (前半) 5 ➢ インフラのこれまでの変遷と取り組みの事例 ⚫ 大量コンテンツ配信について

    ⚫ ゲームデータベースについて ⚫ デプロイについて ➢ 開発環境構築の効率化について
  3. Copyright 2019 DELiGHTWORKS. 大量コンテンツ配信について 2 10 多方面のCDN有効活用により、全体的な速度の向上へ マスターデータの取得 Game Server

    Smartphone ゲームAPIのコール Smartphone CDN Game Server Storage Server 負荷軽減+速度向上 Game Server Smartphone ゲームサーバから取得 Smartphone CDN Game Server 応答速度の向上
  4. Copyright 2019 DELiGHTWORKS. データベースについて – 資料 - ➢ 詳細は弊社エンジニアが過去に講演した資料がございます ➢

    Fate/Grand Orderにおける大規模なデータベース移行と負荷試験 /今井 https://www.slideshare.net/MorioImai/fategrand-order ➢ これで怖くない!?大規模環境で体験するDB負荷対策 ~垂直から水平の彼方へ~ /甲 https://www.slideshare.net/hideakikabuto/db-108716671 ➢ 想定外な規模へと成長し続けるサービスを支えるサーバ開発・運用の軌跡 ~ DBの縦横分割スケーリング ~ /髙屋 https://speakerdeck.com/walkure/history-of-a-large-scale-web-api-service-development-and-operation- with-vertical-and-horizontal-database-partitioning
  5. Copyright 2019 DELiGHTWORKS. コンテナ化について 14 テストの容易化、環境の安定化、デプロイの高速化 Windows Servers CI ソースを各サーバー内で展開

    ZIP ソース管理 自動化ツール Linux Servers ビルドしたコンテナを設置するだけ CI ソース管理 コンテナ 自動化ツール
  6. Copyright 2019 DELiGHTWORKS. インフラ事例 - まとめ - 15 ➢ コンテンツ状況により、必要となるインフラも変化を求められます

    問題の想定や検証/対策等を常にする事が大切 ➢ CDNはコンテンツ配信のキャッシュ用途だけではなく、色々な面で 恩恵を受けることが出来る ➢ コンテナ利用は効率化やコスト軽減効果等色々な効果が期待出来る
  7. Copyright 2019 DELiGHTWORKS. アジェンダ(前半) 16 ➢ インフラのこれまでの変遷と取り組みの事例 ⚫ 大量コンテンツ配信について ⚫

    ゲームデータベースについて ⚫ デプロイについて ➢ 開発環境構築の効率化について
  8. Copyright 2019 DELiGHTWORKS. 弊社開発環境について 19 ➢ 弊社では、以下の担当者向けに個別の環境を用意 ⚫ QA ⚫

    プランナー ⚫ デザイナー ⚫ エンジニア ➢ これを必要に応じ立てたり消したりしてます
  9. Copyright 2019 DELiGHTWORKS. 以前までの開発環境運用 20 エンジニア (サーバー/インフラ) 利用者 (QA/プランナー) チャットによる、環境作成依頼

    ・新規?既存? ・新規→インフラ構築 ・指定バージョンのデプロイ ・正常動作確認後、提供 環境
  10. Copyright 2019 DELiGHTWORKS. 以前までの開発環境運用 21 エンジニア (サーバー/インフラ) 利用者 (QA/プランナー) チャットによる、環境作成依頼

    ・新規?既存? ・新規→インフラ構築 ・指定バージョンのデプロイ ・正常動作確認後、提供 環境
  11. Copyright 2019 DELiGHTWORKS. こんな開発環境運用あるある 22 ➢ 依頼相手と連絡がとれない ➢ 承認者と連絡がとれない ➢

    依頼内容の間違い ➢ 急な差し込み依頼でエンジニアの手が取られる ➢ 作成依頼を貰ったが、提供時には不要になってた ➢ …とにかく時間や手戻りが発生
  12. Copyright 2019 DELiGHTWORKS. 現在の開発環境運用 28 利用者 承認者 ②承認 (チャット) ③Job実行

    ④インフラ構築 ⑤デプロイ ⑥ソース適用 ⑦環境テスト ⑧完了通知 (チャット) ①WebUIから依頼 環境 Terraform Jenkins GitHub
  13. Copyright 2019 DELiGHTWORKS. 現在の開発環境運用 - これにより - 29 ➢ 運用周りで大きな改善

    ➢ 超絶劇的速度向上! ➢ ヒューマンエラーも軽減! 新規作成 環境更新 再起動 環境削除 1日〜2日 1日 数時間 1週間程度 約20分 約6分 約5分 約10分
  14. Copyright 2019 DELiGHTWORKS. 課題が生まれました 32 ➢ Jenkinsを利用する事の運用コスト ⚫ オンプレでもIaaSでも監視やメンテが必須 ➢

    入力フォーム式による入力ミス ⚫ パラメータが手入力式で間違える ➢都度都度、エンジニアの手が止まる
  15. Copyright 2019 DELiGHTWORKS. サーバーレスに向けJenkinsを置き換えよう 38 ➢ 情報入力WebUI → SlackApps +

    AWS Lambda ➢ ジョブの実行 → CircleCI ➢ Terraform → Terraform ➢ 環境のチェック → CircleCI ➢ 新要素! コンテナのbuild → AWS CodeBuild ➢ 新要素! コンテナデプロイ → AWS CodePipeline
  16. Copyright 2019 DELiGHTWORKS. なんでSlackAppsをUIに? 39 ➢ 社内共通コミュニケーションツール ➢ コミュニケーションの流れで環境構築 ➢

    あらゆる情報がすべて1アプリで完結 ➢ SlackIDでユーザー管理 ➢ どこでも申請と承認が可能 ➢ 使ってみたかった
  17. Copyright 2019 DELiGHTWORKS. なんでCircleCIを選択? 40 ➢ コスト面で利点 ⚫ Performance (従量課金)プランは便利

    ➢ 並列実行環境が利用出来る ➢ iOS向けのビルドも出来る ➢ クラウドベンダーによらないCI ➢ これも、使ってみたかった
  18. Copyright 2019 DELiGHTWORKS. 入力ミスに対しての取り組み 41 ➢ サーバー名、ブランチ名等情報が手入力 ➢ サーバー名 ⚫

    サーバー情報マスターを作成し、操作時にリスト化、選択式に ➢ ブランチ名 ⚫ ブランチ情報をGitHubのAPIを叩いて取得し、それをリスト化し て選択式に ➢ 選択式にすることでアナログなミスの排除
  19. Copyright 2019 DELiGHTWORKS. 新規コンテンツの開発環境運用 43 利用者 承認者 ③承認 (チャット) ⑧環境テスト

    ①SlackAppsから 情報入力 ④Job実行 ⑥ソース取得 ビルド ⑨完了通知 環境 ⑤インフラ構築 Terraform ⑦コンテナ適用 ②ブランチ 情報取得 GitHub
  20. Copyright 2019 DELiGHTWORKS. 新規の開発環境運用 - これにより - 47 ➢ 目的であった問題点の解決

    ⚫ Jenkinsを利用せず、すべてサーバレスでの動作 ⚫ 環境指定が選択式なので、誤字脱字ミスの解消 ➢ それ以外として ⚫ Slack上で情報が見えるので、他の人の動きも見える ⚫ エラー通知もSlack専用グループに通知で追いやすく ⚫ 旧環境からの高速化…はそれほどならず。でも高速化の余地あり
  21. Copyright 2019 DELiGHTWORKS. 新規の開発環境運用 – 悩んだ所 - 48 ➢ SlackAppsダイアログの3秒ルール

    ⚫ ダイアログ表示の[Submit]には3秒で応答しないといけない ⚫ Lambda内部でLambdaを非同期で呼び出し ➢ Lambdaへのソースデプロイ ⚫ 自前でデプロイコマンドを作成 ➢ 1つのTerraformレシピで複数マシン名への対応 ⚫ リソース情報ファイルをS3に設置。それを init 時に指定
  22. Copyright 2019 DELiGHTWORKS. 新規の開発環境運用 – 悩んだ所2 - 49 ➢ CircleCIAPIでJobを実行すると1Job内での並列動作が出来ない

    問題 ⚫ 現在未対応、プレビュー版のAPIでは対応が可能 ➢ CircleCIからGitHubEnterprise Serverにアクセス出来ない問 題 ⚫ GitHubEnterprise Cloudを利用
  23. Copyright 2019 DELiGHTWORKS. 開発環境運用 – まとめ - 51 ➢ 人同士の情報伝達や人の手での確認はリスクもコストも高い。で

    すが、汎用的な運用では自動化する事で避けることができる ➢ まずはスモールスタート。そして、必要な時にリソース追加。 サーバーレスは積極的に導入して行く ➢ 人力入力フォームはエラーの温床なりがち、単純化する事により エラーを回避できる
  24. Copyright 2019 DELiGHTWORKS. 前半 インフラ まとめ 52 ➢ インフラを支える技術は日々進化。その中から取捨選択できるよ うに想定と検証を重ね、適したツールを取り込んでいく事が大事

    ➢ コンテンツの質を高める要件の一つはテストを重ねる事。テスト を何度も重ねる為には効率化が必須 ➢ 全てのベースはインフラが支えている。そのベースを失わない為 にも日々検証と改善に取り組むことが必然
  25. Copyright 2019 DELiGHTWORKS. 自己紹介 王 秦如(Ou Shinjo) ディライトワークス株式会社 技術部 サーバープログラマー

    これまではクライアント、サーバー、インフラ(ほんの数か月)エンジ ニアを経験、現在は自動化回りを担当
  26. Copyright 2019 DELiGHTWORKS. なぜC# 61 言語機能が多い Visual Studioによるサポートが強力 弊社プログラマーの好み クライアント(Unity)とソースコードを共有できる

    ジェネリック、静的/動的型付け、LINQ、Unsafeなど便利機能がいっぱい サーバー側の人がクライアント側のソースを読む際の障壁が少なくなる(逆も然り) 参照の表示、インテリセンス、クイックアクション、ブレイクポイントなど 会社立ち上げ時からのエンジニアがC#を好きだった
  27. Copyright 2019 DELiGHTWORKS. クラウド環境の新しい取り組み 70 Fate/Grand Order AWS Cloud Fate/Grand

    OrderはAWSを利用 社内の知見を溜めたい 選択肢を増やしたい GCPを利用した新規プロジェクト
  28. Copyright 2019 DELiGHTWORKS. クラウド環境の新しい取り組み 71 コンテナ化したので運用の仕方を検討 Google App Engine Google

    Kubernetes Engine Googleのインフラの上でアプリケーション を作り、実行できるようにするPaaSです Googleのインフラストラクチャを使用して、 コンテナ化されたアプリケーションのデプ ロイ、管理、スケーリングを行うマネージ ド環境です Windows Servers CI ソースを各サーバー内で展開 ZIP ソース管理 自動化ツール
  29. Copyright 2019 DELiGHTWORKS. クラウド環境の新しい取り組み 72 フルマネージド 〇 〇 〇 自動スケーリング

    〇 〇 〇 C#をサポート × 〇 〇 Dockerイメージの サポート 〇 〇 〇 Google App Engine フレシブル環境 Google Kubernetes Engine Google App Engine スダンダート環境 C#はサポートされて いないので不採用
  30. Copyright 2019 DELiGHTWORKS. フルマネージド 〇 〇 〇 自動スケーリング 〇 〇

    〇 C#をサポート × 〇 〇 Dockerイメージの サポート 〇 〇 〇 その他 ・VMインスタンスは毎週 再起動します ・長期的に動かし続けるこ とが可能 クラウド環境の新しい取り組み 73 Google App Engine フレシブル環境 Google Kubernetes Engine Google App Engine スダンダート環境 C#はサポートされて いないので不採用 毎週再起動するため不 採用
  31. Copyright 2019 DELiGHTWORKS. フルマネージド 〇 〇 〇 自動スケーリング 〇 〇

    〇 C#をサポート × 〇 〇 Dockerイメージの サポート 〇 〇 〇 その他 ・VMインスタンスは毎週 再起動します ・長期的に動かし続けるこ とが可能 クラウド環境の新しい取り組み 74 Google App Engine フレシブル環境 Google Kubernetes Engine Google App Engine スダンダート環境 GKEを採用
  32. Copyright 2019 DELiGHTWORKS. 以前までの開発環境の運用 79 ➢ 弊社では、以下の担当者向けに個別の環境を用意 ⚫ QA ⚫

    プランナー ⚫ デザイナー ⚫ エンジニア ➢ これを必要に応じ立てたり消したりしてます
  33. Copyright 2019 DELiGHTWORKS. 以前までの開発環境の運用 80 QA プランナー デザイナー エンジニア 開発環境

    決定 弊社では開発アプリに開発環境選択画面を作成し、環 境を選んでからゲームスタートするようにしています 開発環境画面担当者
  34. Copyright 2019 DELiGHTWORKS. 以前までの開発環境の運用 82 開発環境 決定 開発環境画面担当者 Test01環境の 追加をお願い

    依頼者 対応します! 弊社では開発環境画面担当者に開発環境 の情報をまとめ依頼をして手動で追加し てもらいます QA プランナー デザイナー エンジニア Test01
  35. Copyright 2019 DELiGHTWORKS. 以前までの開発環境の運用 83 開発環境 決定 開発環境画面担当者 依頼者 海外版環境の

    追加をお願 い! ××のテスト 環境追加をお 願い △△のテスト 環境追加をお 願い Test01環境の 追加をお願い □□のテスト 環境追加をお 願い Test02の追加 もお願い 負荷試験環境 の追加も頼む 外部検証環境 の追加も頼む ◦◦のテスト 環境追加をお 願い デバッグ環境 の追加も! ◦◦のテスト 環境追加をお 願い QA プランナー デザイナー エンジニア Test01
  36. Copyright 2019 DELiGHTWORKS. 以前までの開発環境の運用 84 決定 QA プランナー デザイナー エンジニア

    Test01 Test02 負荷試験 外部検証 デバッグ フューチャ 開発環境 開発環境画面担当者 依頼者 海外版環境の 追加をお願 い! ××のテスト 環境追加をお 願い △△のテスト 環境追加をお 願い Test01環境の 追加をお願い □□のテスト 環境追加をお 願い Test02の追加 もお願い 負荷試験環境 の追加も頼む 外部検証環境 の追加も頼む ◦◦のテスト 環境追加をお 願い デバッグ環境 の追加も! ◦◦のテスト 環境追加をお 願い
  37. Copyright 2019 DELiGHTWORKS. 以前までの開発環境の運用 86 決定 QA プランナー デザイナー エンジニア

    Test01 Test02 負荷試験 外部検証 デバッグ フューチャ 開発環境 Test01って何用 だっけ 外部検証のマス ターはいつのバー ジョンだっけ プランナーって サーバープログラ ムのブランチどれ だっけ 外部検証って誰 が使ってるん だっけ デザイナー最後 更新したのいつ だっけ 負荷試験つかっ ていいんだっけ
  38. Copyright 2019 DELiGHTWORKS. 以前までの開発環境の運用 ~まとめ~ 88 開発環境は複数存在する 各開発環境は口頭かドキュメントを使って管理してる 開発アプリからは開発環境選択画面を経由して開発環境の選択を行う 開発環境が増えた際は担当者に依頼して、手動で追加を行う

    プランナーの人数分環境がたてられているタイトルも 開発環境選択画面の情報は基本べた書き 追加に伴い、アプリの再ビルドと再配布の手間も コミュニケーションコストの発生、ドキュメントは気を抜くとすぐ古くなったり。。
  39. Copyright 2019 DELiGHTWORKS. 今の開発環境の運用 環境名 用途 マスター アプリバー ジョン ドメイン

    ブランチ 利用者 開発者 開発用 ◦◦◦ 1.0.3 xxx develop 開発メンバー QA デバッグ用 △△△ 1.0.1 yyy master QA DBから情報を参照して表示するWebページを作成、どの環境がどういう風に使われて いるかは一目瞭然 開発環境の問い合わせによるコミュニケーションコストの撲滅を目指す!
  40. Copyright 2019 DELiGHTWORKS. 今の開発環境の運用 ~まとめ~ 93 開発環境の情報はDBに入れて保持する 開発環境DBの更新はCI/CDと連動して自動/手動更新する 開発環境DBのデータを参照して開発管理サイトに表示する 開発環境DBのデータに基づいて開発環境のリストを返すAPIを用意

    DBは専用のものを作成 開発管理サイトでは開発管理の閲覧と編集、マスター更新の有り無しなど設定できる クライアントが必要な情報だけ返す 利用者/使用用途など推測不可能なデータは手動更新
  41. Copyright 2019 DELiGHTWORKS. CI/CDツールの選定 97 サーバーレス 〇 〇 〇 Dockerイメージの

    サポート × 〇 〇 ランライム 提供のみ 提供のみ 任意の言語を選べる File System Read Only Read Only コンテナイメージに準拠 Google Cloud Function Google Cloud Run Google App Engine スダンダート環境 今回はファイルを生成してGitリポジトリにプッシュすることがCIの要件 に含まれています
  42. Copyright 2019 DELiGHTWORKS. CI/CDツールの選定 98 今回はファイルを生成してGitリポジトリにコミットすることがCIの要件 に含まれています サーバーレス 〇 〇

    〇 Dockerイメージの サポート × 〇 〇 ランライム 提供のみ 提供のみ 任意の言語を選べる File System Read Only Read Only コンテナイメージに準拠 Google Cloud Function Google Cloud Run Google App Engine スダンダート環境 Google Cloud Run を採用しました
  43. Copyright 2019 DELiGHTWORKS. Cloud Run移行後の課題 102 Jenkinsのような入力インターフェイスはない パラメータの受け渡しが面倒 パラメータごとにサービスとして作るのも現実的ではない Cloud

    Run(フルマネージド)はVPCにアクセスできない SVNサーバーがVPC内にあるので、アクセスできないとリポジトリをチェックアウトで きない 解決策:開発管理サイトをCIのインターフェイスとしても使う 解決策:Cloud Run on GKEに変更
  44. Copyright 2019 DELiGHTWORKS. Log マスター更新 全体像(一部抜粋) 103 GitHub Enterprise デプロイ

    Cloud Build Container Registry Spinnaker Database SVN (マスタデータ) Slack Kubernetes cluster Cloud Run on GKE 開発管理サイト Cloud Run on GKE マスター更新 Cloud Run on GKE マスターコンバータ Stackdriver Cloud Spanner
  45. Copyright 2019 DELiGHTWORKS. 全体像(一部抜粋) 104 GitHub Enterprise Cloud Build Container

    Registry Spinnaker SVN (マスタデータ) Slack Kubernetes cluster Cloud Run on GKE 開発管理サイト Cloud Run on GKE マスター更新 Cloud Run on GKE マスターコンバータ 開発管理サイト経由でCloud Runのサー ビスを呼び出すことで、パラメータの 受け渡しが楽になり、企画職の操作簡 単になった マスター更新 デプロイ Database Log Stackdriver Cloud Spanner
  46. Copyright 2019 DELiGHTWORKS. 全体像(一部抜粋) GitHub Enterprise Cloud Build Container Registry

    Spinnaker Cloud Spanner SVN (マスタデータ) Slack Kubernetes cluster Cloud Run on GKE 開発管理サイト Cloud Run on GKE マスター更新 Cloud Run on GKE マスターコンバータ Cloud Run on GKEに移行したことによ り、VPCアクセスが可能になってSVNの リポジトリを無事チェックアウトできる ようになった マスター更新 デプロイ Database Log Stackdriver
  47. Copyright 2019 DELiGHTWORKS. 効率化への新しい取り組み ~まとめ~ 106 開発環境は多くなりがち、情報を整理して可視化することが大事 プロジェクトの規模、体制などに適していたツールを選ぶことが重要 ⚫ チーム全員に正しい情報が共有されていることが開発をよりスムーズにする

    ⚫ 一回数分だけの確認も、積もれば大きなコミュニケーションコストに繋がる ⚫ プロジェクトの事情は千種万様 ⚫ プロジェクトから困ったことや要望をしっかりヒアリングすることが重要 ⚫ 時には既存のツールを捨て、プロジェクトにあったツールを選ぶことも必要
  48. Copyright 2019 DELiGHTWORKS. まとめ ~後半~ 最適な技術を検討できるようになるためには、失敗を恐れず、新しい技 術は積極的に使っていくことが重要 チームメンバーがゲーム開発を集中できるように仕事効率化を常に考え て行動することが大事 ⚫

    .NET CoreもGCPもサーバーレスも、弊社としても自分としても初の挑戦 ⚫ やってみないと優劣わからないところもあるので、新しいものに対しての検証は 欠かさない ⚫ 仮に挑戦が失敗しても次に繋がる大きな一歩になる ⚫ ゲーム開発において一番重要なのはコンテンツのクオリティ ⚫ 人手不足なのはどのプロジェクトも同じ ⚫ コンテンツのクオリティと直接かかわらない部分の仕事をどれだけ自動化できる かが肝心