Slide 1

Slide 1 text

基盤チームとしての挑戦と 社内コミュニティで得た学び 海老沼 健一

Slide 2

Slide 2 text

自己紹介 海老沼 健一 - 2020年新卒 - ゲーム事業本部ディベロップメント統括部技術部第6グループ - 趣味はテニスと映画 - 学生時代 - 創業期のスタートアップ数社で幅広く経験を積む - 現在 - サーバーサイドエンジニア - 社内ゲームサーバー基盤 Takasho の開発/運用 @ebkn
 @ebkn12


Slide 3

Slide 3 text

今日話すこと - ゲームサーバー基盤チームでの経験 - 社内の技術コミュニティの運営など横断的活動

Slide 4

Slide 4 text

ゲームサーバー基盤 Takasho とは

Slide 5

Slide 5 text

ゲームサーバー基盤 Takasho とは - DeNA 内製のゲームサーバー基盤 - Web サーバーフレームワーク - 複数タイトル共通で必要な機能セット - コード自動生成ツール - インフラ構築ツール - などを提供 - 内製 MBaaS (Mobile Backend as a Service) と連携 - アカウント管理、課金、Push通知など

Slide 6

Slide 6 text

Takasho を支える技術 - Go - Protocol Buffers + gRPC - Kubernetes (GKE) - Cloud Spanner - Terraform - CircleCI, ArgoCD ※This slide is not affiliated with or otherwise sponsored by CNCF

Slide 7

Slide 7 text

Takasho を支える技術 - 詳しく知りたい方は是非こちらも御覧ください - Google INSIDE Games & Apps - https://cloudonair.withgoogle.com/events/inside-games-and-a pps?talk=20211005-1 - DeNA Engineer’s Blog - https://engineer.dena.com/posts/2021.10/takasho-overview/

Slide 8

Slide 8 text

Takasho ができた経緯

Slide 9

Slide 9 text

Takasho ができた経緯 - 前の基盤が抱えていた課題 - 全タイトルで共通のコード → 仕様変更が難しい - 全タイトルで1つのサーバー群 → 障害の影響が全タイトルに - 安定稼働しており、一定成功は収めている - Takasho でのアプローチ - web サーバーフレームワークを提供し、     共通機能を利用しつつ独自機能追加も容易に - マネージドサービスを駆使してコストを最適化

Slide 10

Slide 10 text

Takasho ができた経緯 - 前の基盤が抱えていた課題 - 全タイトルで共通のコード → 仕様変更が難しい - 全タイトルで1つのサーバー群 → 障害の影響が全タイトルに - 安定稼働しており、一定成功は収めている - Takasho でのアプローチ - web サーバーフレームワークを提供し、     共通機能を利用しつつ独自機能追加も容易に - マネージドサービスを駆使してコストを最適化

Slide 11

Slide 11 text

Takasho チームが やっていること

Slide 12

Slide 12 text

Takasho チームがやっていること - フレームワークや各種ツールの開発 - 複数タイトルのゲームサーバー開発/運用 - フレームワークを利用しているタイトルのサポート

Slide 13

Slide 13 text

Takasho チームがやっていること - フレームワークや各種ツールの開発 - 運用に入っている各タイトルの知見を反映 - 開発の効率化や品質向上 - 複数タイトルのゲームサーバー開発/運用 - フレームワークを利用しているタイトルのサポート

Slide 14

Slide 14 text

Takasho チームがやっていること - フレームワークや各種ツールの開発 - 運用に入っている各タイトルの知見を反映 - 開発の効率化や品質向上 - 複数タイトルのゲームサーバー開発/運用 - 各タイトルに数人ずつ担当者をつける - 外部のクライアントエンジニアさんやQAなどとやり取り - 機能開発、バグ修正、障害対応 - フレームワークを利用しているタイトルのサポート

Slide 15

Slide 15 text

Takasho チームがやっていること - フレームワークや各種ツールの開発 - 運用に入っている各タイトルの知見を反映 - 開発の効率化や品質向上 - 複数タイトルのゲームサーバー開発/運用 - 各タイトルに数人ずつ担当がつく - 外部のクライアントエンジニアさんやQAなどとやり取り - 機能開発、バグ修正、障害対応 - フレームワークを利用しているタイトルのサポート - 開発/運用の知見を共有 - フレームワークの導入/更新

Slide 16

Slide 16 text

Takasho チームに求められること - タイトルチームがゲームの面白さを作る部分に集中できるようにする - より多くの人に継続的にゲームを遊んでもらえるようにする - 開発/運用のコストを下げる

Slide 17

Slide 17 text

Takasho チームに求められること - タイトルチームがゲームの面白さを作る部分に集中できるようにする - どのタイトルでも必要な機能を集約して開発 - クライアント側の開発をできるだけサーバー側に依存させない - より多くの人に継続的にゲームを遊んでもらえるようにする - 開発/運用のコストを下げる

Slide 18

Slide 18 text

Takasho チームに求められること - タイトルチームがゲームの面白さを作る部分に集中できるようにする - どのタイトルでも必要な機能を集約して開発 - クライアント側の開発をできるだけサーバー側に依存させない - より多くの人に継続的にゲームを遊んでもらえるようにする - 大規模リクエストを難なく捌けるように - 高い可用性と安定した運用 - 開発/運用のコストを下げる

Slide 19

Slide 19 text

Takasho チームに求められること - タイトルチームがゲームの面白さを作る部分に集中できるようにする - どのタイトルでも必要な機能を集約して開発 - クライアント側の開発をできるだけサーバー側に依存させない - より多くの人に継続的にゲームを遊んでもらえるようにする - 大規模リクエストを難なく捌けるように - 高い可用性と安定した運用 - 開発/運用のコストを下げる - サーバー,インフラのアーキテクチャを最適化 - クライアントチームの工数削減 - Takasho チームの工数削減

Slide 20

Slide 20 text

Takasho チームで これまでやってきたこと

Slide 21

Slide 21 text

Takasho チームでこれまでやってきたこと - 機能開発 - デプロイフローの整備 - 負荷試験 - タイトル大臣

Slide 22

Slide 22 text

機能開発 - 配属された1ヶ月半後くらい - あるタイトルで大きめの機能開発を任せてもらった

Slide 23

Slide 23 text

機能開発 - ゲームサーバー独自の設計 - サーバーコードレスアーキテクチャ - https://engineer.dena.com/posts/2019.12/server-code-less-a rchitecture-in-mobile-game-client/ - 大規模トラフィックに耐えうる設計 - DBのロック競合 - 適切なクエリ、インデックス - 非同期処理 - バッチ

Slide 24

Slide 24 text

機能開発 - 機能実装を進めていく中で発生した問題 - 不十分な動作検証による不具合 - 改善の取り組み - PRに検証結果を決まったフォーマットで書いてもらうように - 静的解析ツールを導入し、機械的に問題を検知するように

Slide 25

Slide 25 text

デプロイフローの整備 - 要件整理、Kubernetes のデプロイ周りのエコシステムの調査から、 CDツールの導入まで - 自分にとって技術的にチャレンジングなタスク - 元々興味があり、自分の成長に繋がると思ったので手を挙げた ※This slide is not affiliated with or otherwise sponsored by CNCF

Slide 26

Slide 26 text

デプロイフローの整備 - やってよかったこと - 調査/検討を進めている段階で他のチームの事例を聞きに行ったことで、 考慮漏れや違う視点が得られた - 社内 TechTalk でアウトプット - 知識の整理 - さらにFBをもらう

Slide 27

Slide 27 text

負荷試験 - 目的 - リリース時、運用時のトラフィック量、必要なリソース量を予測 - アプリケーション、インフラ双方で発生する問題をリリースまでに潰す - 負荷をかける → ボトルネックを見つける → 修正 の繰り返し

Slide 28

Slide 28 text

負荷試験で実際に見つかった問題 - DBに適切な index が貼られていないことでレイテンシ悪化 - DBのロック競合によるタイムアウト - MBaaSのレイテンシ悪化によるサービス影響 - キャッシュの実装漏れによるレイテンシ悪化 - Google Cloud の Quota に引っかかる

Slide 29

Slide 29 text

タイトル大臣 - タイトル側 (PMや外部のクライアントエンジニア、QAなど) とのやりとりをする窓口 - Takasho チームからタイトルごとに専任でつく

Slide 30

Slide 30 text

タイトル大臣の仕事 - API設計 + すり合わせ - 機能提供スケジュールの相談 - 実装、テスト - サーバー、SDK提供 - 実装のサポート - 適切なクライアント実装になっているか確認 - 不具合対応

Slide 31

Slide 31 text

タイトル大臣の仕事 - Takasho チームのスケジュール、タスク管理 - 進捗管理、実装のサポート - 時期によって必要な工数が結構変動する

Slide 32

Slide 32 text

Takasho チームで学んだこと - 大規模ゲームサーバーの設計、実装 - ゲーム独自のAPI設計 - DBロック、競合 - ソフトスキル - 多くの関係者とのやり取り - チーム内のタスク、スケジュール管理

Slide 33

Slide 33 text

社内技術コミュニティの 運営/参加

Slide 34

Slide 34 text

社内技術コミュニティの運営/参加 - 社内技術コミュニティの運営/参加 - 20卒輪読会 - GCloud Monday - GE TechTalk - Go言語委員会 - Go Friday - ...

Slide 35

Slide 35 text

社内技術コミュニティの運営/参加 - 社内技術コミュニティの運営/参加 - 20卒輪読会 ← 今日話す - GCloud Monday ← 今日話す - GE TechTalk - Go言語委員会 - Go Friday - ...

Slide 36

Slide 36 text

20卒輪読会 - 20卒エンジニアの有志(3~8人)で開催している - 毎週業務終わりに1~2h - ゆるくご飯食べながら、雑談しながら - 興味ありそうな人に声をかけて始まり、1年以上続いている - これまで読んだ/読んでいる本 - データ指向アプリケーションデザイン - 入門監視 - Fundamentals of Software Architecture

Slide 37

Slide 37 text

20卒輪読会をなぜ始めたのか - リモートで同期と関わる機会が少なかった - 議論することでより学びを得る - モチベーションの維持 (ピア・プレッシャー)

Slide 38

Slide 38 text

20卒輪読会をなぜ始めたのか - リモートで同期と関わる機会が少なかった - 同期の近況や社内の状況を色々知れる - 議論することでより学びを得る - モチベーションの維持

Slide 39

Slide 39 text

20卒輪読会をなぜ始めたのか - リモートで同期と関わる機会が少なかった - 同期の近況や社内の状況を色々知れる - 議論することでより学びを得る - 他の事業部での事例や知見をたくさん得られそう - モチベーションの維持

Slide 40

Slide 40 text

20卒輪読会をなぜ始めたのか - リモートで同期と関わる機会が少なかった - 同期の近況や社内の状況を色々知れる - 議論することでより学びを得る - 他の事業部での事例や知見をたくさん得られそう - モチベーションの維持 - ピア・プレッシャー - 一人ではハードルの高い、分厚かったり、英語の本も

Slide 41

Slide 41 text

輪読会の進め方 - Scrapbox に毎週担当者がまとめてくる - 当日は zoom に画面共有してまとめを読む - 気になった所があればコメント+議論

Slide 42

Slide 42 text

20卒輪読会

Slide 43

Slide 43 text

コメントでわいわい https://www.oreilly.co.jp/books/9784873118703/ https://www.oreilly.co.jp/books/9784873118642/ https://www.oreilly.com/library/view/fundamentals-of-software/9781492043447/

Slide 44

Slide 44 text

たまにハンズオンやデモも

Slide 45

Slide 45 text

輪読会を継続するコツ - 一人はそのトピックに詳しい状態 - 事前に読んでまとめてくる - ゆるい雰囲気、雑談多めで気軽に参加しやすく - 担当者の負担が大きすぎない - 一月半に1回くらい回ってくる

Slide 46

Slide 46 text

GCloud Monday - Google Cloud に関する勉強会 - 各チームの知見共有、Google Cloud のアップデート情報 - Google Cloud の方にも参加していただいている

Slide 47

Slide 47 text

その他の社内技術コミュニティ - 各言語の勉強会 - Android Tuesday, Swift Wednesday, Ruby Thursday, Go Friday, Web Frontend 勉強会 - 社内テックトーク - Tech Talk - GE TechTalk (ゲーム事業本部、ソリューション事業本部) - 社内XR事業情報共有会 - その他チームや事業部ごとなど、 多くの勉強会/コミュニティが運営されている

Slide 48

Slide 48 text

まとめ

Slide 49

Slide 49 text

まとめ - Takasho チームでは技術的な学び/経験はもちろん、様々な方とのコミュニ ケーションやマネジメントを経験できた - 成果を出していればやりたいことは手を上げれば、難しいものでも どんどん若手でも任せてもらえる環境 - 社内コミュニティでのインプットも多く、業務に活かせている - 同期とのつながり、知見共有を頻繁にしている

Slide 50

Slide 50 text

引用 各種アイコン、ロゴ、イメージ画像 - https://cncf-branding.netlify.app/projects/grpc/ - https://cncf-branding.netlify.app/projects/argo/ - https://go.dev/blog/go-brand - https://cloud.google.com/icons - https://www.hashicorp.com/brand#terraform - https://www.irasutoya.com/p/faq.html 書籍 - https://www.oreilly.co.jp/books/9784873118703/ - https://www.oreilly.co.jp/books/9784873118642/ - https://www.oreilly.com/library/view/ fundamentals-of-software/9781492043447/

Slide 51

Slide 51 text

No content