Slide 1

Slide 1 text

©MIXI ©MIXI ソーシャルゲームの長期運用
 を目指すための SRE の取り組み - 10 周年を⽬指すコトダマンの場合 - ⼤野⼀樹 @i2tsuki

Slide 2

Slide 2 text

22 ©MIXI 自己紹介
 - 大野一樹(@i2tsuki_)
 - 2024 年 株式会社 MIXI 中途入社
 - 開発本部 CTO 室 SRE グループ
 - いろんな案件に SRE 支援する部署
 - 普段は関西でリモートで働いています
 - 最近は Go の Otel 実装などやってます
 - ソーシャルゲームを担当するのは新卒以来


Slide 3

Slide 3 text

©MIXI 今⽇のおはなし ソーシャルゲーム に SRE は必要か?

Slide 4

Slide 4 text

©MIXI ソーシャルゲーム の歴史は SRE より古い ソーシャルゲーム に SRE は必要か?

Slide 5

Slide 5 text

5 ©MIXI ソーシャルゲームと SRE - ソーシャルゲームの歴史は SRE よりも古い
 - 会社のプロダクトを振り返っても SRE 本の登場以前にある
 2013 2009 mixi アプリ
 (サンシャイン牧場 など..)
 2016

Slide 6

Slide 6 text

6 ©MIXI ソーシャルゲームと SRE - ソーシャルゲームのライフサイクルは一般的な Web サービスより短い
 - 初期開発コストや運営コストが高い(3D モデル、エフェクト、ライセンス)
 - ヒットしなければ回収できないので継続が厳しい (信頼性 <<<< 収益性)
 - (ただし)ヒットさせること自体が難しくなっている..
 - 負荷対策
 - Web サービスと違ってローンチ時の負荷が一番高いことが多い
 - キャンペーンや新機能で負荷が増えることがある
 => 信頼性は初期やその後の負荷に対して、重点が置かれることが多い
 7 年前にソーシャルゲームに関わった時は念入りに負荷試験を担当していた


Slide 7

Slide 7 text

©MIXI 負荷対策以外の信頼性について考える時の要素は? ソーシャルゲームのサービス構成振り返り

Slide 8

Slide 8 text

8 ©MIXI ソーシャルゲームのサービス構成振り返り - リスマホアプリ(クライアント)とサーバが API 通信する
 - クライアントとサーバが API 通信する
 - サーバ障害が発生するとデータが取得できず遊べない
 - ソーシャル要素がある(ランキング、ギルド、レイドバトル etc..)
 - 協力プレイ、同時プレイの機能がある、早いレスポンス性が求められる
 - スタミナ、ガチャ、キャラ育成、課金アイテムの要素がある
 - 定期購入、アイテム配布、通知の機能がある


Slide 9

Slide 9 text

©MIXI 信頼性の損失があってもユーザ補填で対応できる..? 有料アイテムがもらえるならユーザさんもうれしい..?? ソーシャルゲームのサービス特徴

Slide 10

Slide 10 text

©MIXI そんなことはない!! 遊べないことはユーザさんの機会損失になる 信頼性の損失があってもユーザ補填でなんとかできる..?

Slide 11

Slide 11 text

©MIXI 信頼性について考える時の要素 ソーシャルゲームのライフサイクルと信頼性⽬標

Slide 12

Slide 12 text

12 ©MIXI ソーシャルゲームのライフサイクルと SRE の導⼊フェーズ ベータ ローンチ時 運用期 (撤退期) SLO (リクエストの信 頼性目標) 90 % 95 % 99 % ?? % SRE の範囲 安定して デプロイ できる 負荷調整 障害対応 - 障害対応 - コスト最適化 - ミドルウェアのアップデート - 脆弱性対応 - 新機能のためのサーバ構築 - 増え続けるデータへの対応 - データ分析のためのデータ収 集、漏れを防ぐ - パフォーマンスリグレッションの 検知 - 遅いクエリの最適化 - アプリケーション通知の監視 データの 保全 制作物の 保管 ドメイン の保持

Slide 13

Slide 13 text

©MIXI 運⽤期のソーシャルゲームにとっての信頼性

Slide 14

Slide 14 text

14 ©MIXI 運⽤期のソーシャルゲームにとっての信頼性 - ユーザさんにサービスを提供し続ける
 - プレイの機会損失を回避する
 - サービスを終了せざるを得ない状況を回避する
 (経営健全化、データロストを防ぐ etc..)
 - ユーザさんの資産(キャラ、アイテム etc..)を外部から守る
 - 不具合による不公平感を与えない
 - 遊び続けられる安心感がある


Slide 15

Slide 15 text

©MIXI サービス実例

Slide 16

Slide 16 text

©MIXI

Slide 17

Slide 17 text

©MIXI 『コトダマン』6周年記念プロデューサー&ディレクターインタビュー|10周年を迎えるための基盤改修と原点回帰 | ファミ通App【スマホゲーム情報サ イト】https://app.famitsu.com/20240527_2235977/

Slide 18

Slide 18 text

©MIXI 1 年前に SRE チームが発⾜!! (SRE チームがない以前はローンチ時の状態だったと⾔える) 10 周年を迎えるために..

Slide 19

Slide 19 text

19 ©MIXI 10 周年を迎えるための SRE チーム - 1 年前の SRE チームが発足当時
 - 現状の問題把握から着手
 - システム構成&デプロイの仕組みがわからない、 IaC できていない
 - ステージングと本番環境以外の環境がない(変更を試せる場所がない)
 - 解決するためにやったこと
 - システム構成のドキュメント化、 IaC 、アラートの整理やっていく
 - IaC を整理した後にインフラをお試しできる開発環境を構築
 目の前の問題を解決するまでチーム発足当時は信頼性に注目できなかった!!


Slide 20

Slide 20 text

20 ©MIXI 10 周年を迎えたサービス信頼性への注⽬ - サービス障害、不具合と改善への取り組み
 - サーバが過負荷になって、リクエストの処理が滞留する
 => 計測ができていない => 信頼性の計測と改善が必要
 - アイテムを受け取ることができない、特定の処理でフリーズする
 => エンジニアによる原因の調査 => 可観測性を向上させる
 - キャラクターの名前や属性が意図しているものと異なっている
 => マスターデータ作成時の人為的なミス => デプロイフローの改善が必要
 


Slide 21

Slide 21 text

©MIXI 最近の SRE チームの活動 10 周年を迎えるため、信頼性に貢献する

Slide 22

Slide 22 text

22 ©MIXI 10 周年を迎えるための SRE チームの活動 - リクエストに対する SLI の定義と計測
 - 別のモニタリングサービスを利用していたが、有効に活用できていなかった
 - New Relic APM を導入して SLI を定義して簡単に計測できるようになった
 
 
 
 
 
 
 => 処理時間を特定のパスの処理時間を対象に SLI を計測できる
 レイテンシの目標設定

Slide 23

Slide 23 text

23 ©MIXI 10 周年を迎えるための SRE チームの活動 アラートのルールの管理
 - HCP Terraform で一元管理
 - PullRequest でアラートの変更 の意思決定が記録できる
 - SLO に応じた閾値の見直し


Slide 24

Slide 24 text

24 ©MIXI - 可観測性の向上
 - New Relic APM の利用(アプリケーションのトレーシング)
 
 
 
 
 
 
 
 
 10 周年を迎えるための SRE チームの活動

Slide 25

Slide 25 text

25 ©MIXI - 可観測性の向上
 - 構造化ログの実装
 - サーバエンジニアに実装してもらって New Relic に集約
 
 
 
 10 周年を迎えるための SRE チームの活動

Slide 26

Slide 26 text

26 ©MIXI - マスターデータのデプロイフローの改善
 - マスターデータは大量の .xlsx で管理している
 - 手元で SQL に変換して Git リポジトリにコミットしてデプロイしていた
 
 
 
 10 周年を迎えるための SRE チームの活動 変換する .xlsx ファイルを選べる..

Slide 27

Slide 27 text

27 ©MIXI - マスターデータのローカルビルドで発生していたこと
 - 一部の .xlsx だけコンバートしてプッシュ
 - .sql ファイルを直接編集してプッシュ(.xlsx と整合性が取れなくなる)
 
 
 10 周年を迎えるための SRE チームの活動

Slide 28

Slide 28 text

28 ©MIXI - マスターデータのデプロイフローの改善
 - 人がローカルでツールを動かして変換するプロセスをやめる
 - GitHub Actions 化することで人間が介入する余地をなくす
 10 周年を迎えるための SRE チームの活動

Slide 29

Slide 29 text

29 ©MIXI - その他の SRE 活動
 - IaC の改善
 => Ansible の冪等性の確保、 HCP Terraform の導入
 冪等性がないと、意図した変更かどうかがわからない
 冪等性がないサードパーティの Ansible モジュールの冪等性を保証する
 
 
 
 - アラートの整理: 本当に必要なアラートだけにする
 - Amazon Aurora MySQL クラスターのアップデート
 10 周年を迎えるための SRE チームの活動 $ ansible-playbook -t setup ./setup.yml --ssh-common-args='xxx' -e @./group_vars/test.yml --diff --check (snip) 10.xxx.xxx.xxx : ok=176 changed=9 unreachable=0 failed=0 skipped=56 rescued=0 ignored=1 10.xxx.xxx.xxx : ok=177 changed=12 unreachable=0 failed=0 skipped=55 rescued=0 ignored=1 10.xxx.xxx.xxx : ok=177 changed=12 unreachable=0 failed=0 skipped=55 rescued=0 ignored=1 


Slide 30

Slide 30 text

30 ©MIXI - 最初は動くだけで良かったが長期運用を目指すと変化しないといけない
 - SLI, SLO
 - リリース時はリリースして顧客反応を見ることが大事
 => 長期運用では信頼性の観点で、顧客満足度に繋がる
 - Observability
 - リリース時は機能がすくないし、生のログだけで追えていた
 => 機能が増えるとログだけではわからない、再現ができない
 - マスターデータ
 - リリースから年月を経てデータ数が多くなっていく
 => 決まったリリースフローを踏ませたり、高速化する
 10 周年を迎えるための SRE チームの活動振り返り

Slide 31

Slide 31 text

31 ©MIXI - 更なる改善を目指した SRE 活動
 - SLI だけで計測できない信頼性の計測
 - バグやマスターデータの不具合の信頼性への影響は計測が難しい
 - 不利益を受けたユーザ数、機会損失の計測をしないといけない
 => エンジニア: ログから影響範囲を調査、必要であれば補填対応をする
 => SRE: 定性的なデータとしてチケットにまとめて振り返られるようにする
 (例: 全体の n % のユーザが影響を受けた、時間の範囲など定量化する)
 - 信頼性に寄与している要素を観測する
 => リファクタリング、機能の改善(廃止)の検討&提案
 - クライアントサイドモニタリングの検討
 10 周年を迎えるための SRE チームの活動振り返り

Slide 32

Slide 32 text

32 ©MIXI まとめ今後の課題 - ソーシャルゲームに SRE は必要か?
 - 信頼性はすべての事業にとって必要 => ソーシャルゲームも例外でない
 - サービスのフェーズによって必要な信頼性指標や SRE 目標は異なる
 - ローンチ時は SRE の必要性は低いかもしれないが、長期運用には必須!!
 - それぞれのサービスにあった信頼性指標の設計が必要なので設計する
 - 信頼性にコミットできる組織づくり
 - 現状では信頼性の範囲をいくらでも広くできてしまう
 - SRE チームがなんでも運用部隊になってしまう
 - SRE チームは信頼性に対するエンジニアリングの専門家集団!!
 => 信頼性に対するエンジニアリングについて広報活動をする