\積極的に技術発信を行なっております/
▽ Twitter/COLOPL_Tech https://twitter.com/colopl_tech
▽ connpassページ http://colopl.connpass.com
▽ COLOPL Tech Blog http://blog.colopl.dev
大型イベントにおけるゲームサーバのキャパシティプランニング野中 智矢
View Slide
氏名 :部署 :自己紹介2019年に新卒入社してから現在まで白猫プロジェクト NEW WORLD'S(以降白猫)の運用、開発を担当野中 智矢技術基盤本部 第1バックエンドエンジニア部第1グループ 第1チーム2
イベント開催時に起こる問題周年やコラボなどの大型イベントリリース時には通常の何倍ものアクセスが来る(スパイクアクセス)なんかいい感じの画像オートスケールだとスケールが間に合わないので事前に大量のゲームサーバを構えることでリリースに耐える必要がある3イベントリリース! →
今回の話題周年、コラボイベントなどの大型イベントのリリース時にどのような方法でゲームサーバの台数を決めるのか?→DAU(Daily Active User)・過去の記録・CPU効率 を元に見積もっています4
実際の計算式① 目標DAU ✖ DAUに対するピーク時のユーザー割合 = 想定ピークUU② 想定ピークUU ✖ 1ユーザーあたりの想定RPM = 想定ピークRPM③ 想定ピークRPM ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!5
実際の計算式① 目標DAU ✖ DAUに対するピーク時のユーザー割合 = 想定ピークUU② 想定ピークUU ✖ 1ユーザーあたりの想定RPM = 想定ピークRPM③ 想定ピークRPM ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!6🤔
過去の記録として今回は以下の数値を仮で用意しましたこれらの数値を参考に式を1個づつ紐解いていきます7数値を当てはめながら紐解いていく台数 DAUリリース時(ピーク)RPM UU CPU使用率60台 80万 100万 10万 80%
1個づつ紐解いていく目標DAU ✖ DAUに対するピーク時のユーザー割合 = 想定ピークUU想定ピークUU ✖ 1ユーザーあたりの想定RPM = 想定ピークRPM想定ピークRPM ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!8
1個づつ紐解いていく目標DAU ✖ DAUに対するピーク時のユーザー割合 = 想定ピークUU想定ピークUU ✖ 1ユーザーあたりの想定RPM = 想定ピークRPM想定ピークRPM ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!9
目標DAU目標DAUとはイベントリリース当日にくるDAUのことこの目標DAUを元にリリース時の台数を決めていきますDAUという分かりやすい指標を元とすることによって他セクションとの認識のすり合わせが円滑になる利点があります10
目標DAUイベント当日にくるDAUを主に以下から予測する● 内容への期待値、熱量といった定性的な要素を加味してプランナーが算出したDAU● 過去実績を元にデータサイエンティストが機械的に算出したDAU11
目標DAU今回は例として...各セクションとすり合わせた結果、今回のDAUは最高で100万人はきそうだぞ→目標DAUが決まった12
1個づつ紐解いていく100万人(目標DAU) ✖ DAUに対するピーク時のユーザー割合 = 想定ピークUU想定ピークUU ✖ 1ユーザーあたりの想定RPM = 想定ピークRPM想定ピークRPM ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!13
1個づつ紐解いていく100万人(目標DAU) ✖ DAUに対するピーク時のユーザー割合 = 想定ピークUU想定ピークUU ✖ 1ユーザーあたりの想定RPM = 想定ピークRPM想定ピークRPM ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!14
DAUに対するピーク時のユーザー割合この割合が分かると目標DAUからリリース時にくるUUを予想することができるので、重要な指標となる今回は先程あげた過去の記録を参考にします15台数 DAUリリース時(ピーク)RPM UU CPU使用率60台 80万 100万 10万 80%
DAUに対するピーク時のユーザー割合過去の記録は....DAUは80万人でピーク時には10万人がきていました!80万人(DAU) ÷ 10万人(UU) = 8%→DAUに対するピーク時のユーザー割合が決まった16
あとは式に当てはめるこれで想定ピークUUを求められるようになりました!100万人(目標DAU) ✖ 8%(DAUに対するピーク時のユーザー割合) = 8万人(想定ピークUU)!!おおよそ8万人がピーク時にくると予想できた17
さらに紐解いていく100万人(目標DAU) ✖ 8%(DAUに対するピーク時のユーザー割合) = 8万人(想定ピークUU)!!8万人(想定ピークUU) ✖ 1ユーザーあたりの想定RPM = 想定ピークRPM想定ピークRPM ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!18
さらに紐解いていく100万人(目標DAU) ✖ 8%(DAUに対するピーク時のユーザー割合) = 8万人(想定ピークUU)!!8万人(想定ピークUU) ✖ 1ユーザーあたりの想定RPM = 想定ピークRPM想定ピークRPM ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!19
1ユーザーあたりの想定RPMこの値を見積もることによって想定ピークUUから想定ピークRPMを導き出すことができるこれも過去の記録を参考にします20台数 DAUリリース時(ピーク)RPM UU CPU使用率60台 80万 100万 10万 80%
1ユーザーあたりの想定RPM過去の記録は....ピーク時のDAUは10万人で1分間に100万件のリクエストが送られてきていました!100万rpm ÷ 10万人 = 10rpm→1ユーザーから送られる想定RPMが分かった21
式に当ていくこれで想定ピークRPMを求められるようになりました!8万人(想定ピークUU) ✖ 10rpm(1ユーザーあたりの想定RPM) = 80万rpm(想定ピークRPM)!!おおよそ80万rpmがピーク時にくると予想できた22
最後の式を紐解いていく100万人(目標DAU) ✖ 8%(DAUに対するピーク時のユーザー割合) = 8万人(想定ピークUU)!!8万人(想定ピークUU) ✖ 10rpm(1ユーザーあたりの想定RPM) = 80万rpm(想定ピークRPM)!!80万rpm(想定ピークRPM) ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!23
最後の式を紐解いていく100万人(目標DAU) ✖ 8%(DAUに対するピーク時のユーザー割合) = 8万人(想定ピークUU)!!8万人(想定ピークUU) ✖ 10rpm(1ユーザーあたりの想定RPM) = 80万rpm(想定ピークRPM)!!80万rpm(想定ピークRPM) ÷ CPU効率 ÷ 目標CPU使用率 = イベントリリース時の台数!!24
CPU効率ここではCPU1%辺りに捌けるRPM数をCPU効率としていますCPU効率は以下の計算式で求めることができますRPM ÷ ゲームサーバー台数 ÷ 平均CPU使用率 = CPU効率1台あたりのRPM25
CPU効率過去の記録は....サーバー60台で100万件のリクエストを捌きました!平均のCPU使用率は80%です!100万rpm ÷ 60台 = 1.7万rpm(1台あたりのRPM)1.7万rpm ÷ 80%(平均CPU使用率) = 212rpm(CPU効率)→CPU効率が分かった26
最後の式を紐解いていく100万人(目標DAU) ✖ 8%(DAUに対するピーク時のユーザー割合) = 8万人(想定ピークUU)!!8万人(想定ピークUU) ✖ 10rpm(1ユーザーあたりの想定RPM) = 80万rpm(想定ピークRPM)!!80万rpm(想定ピークRPM) ÷ 212rpm(CPU効率) ÷ 目標CPU使用率 = イベントリリース時の台数!!27
100万人(目標DAU) ✖ 8%(DAUに対するピーク時のユーザー割合) = 8万人(想定ピークUU)!!8万人(想定ピークUU) ✖ 10rpm(1ユーザーあたりの想定RPM) = 80万rpm(想定ピークRPM)!!80万rpm(想定ピークRPM) ÷ 212rpm(CPU効率) ÷ 目標CPU使用率 = イベントリリース時の台数!!最後の式を紐解いていく28
目標CPU使用率ピーク時の想定RPMとCPU効率から合計のCPU使用率が予想できる80万rpm(想定ピークRPM) ÷ 212rpm(CPU効率) = 3773%(合計CPU使用率)合計で3773%のCPUが使用される事が分かっているので目標のCPU使用率で割れば台数が求められる例として今回は50%を目標とする29
今回のイベントは75台と想定できた!100万人(目標DAU) ✖ 8%(DAUに対するピーク時のユーザー割合) = 8万人(想定ピークUU)!!8万人(想定ピークUU) ✖ 10rpm(1ユーザーあたりの想定RPM) = 80万rpm(想定ピークRPM)!!80万rpm(想定ピークRPM)÷212rpm(CPU効率)÷50%(目標CPU使用率) = 75台(イベントリリース時の台数)!!30
ちなみに、、、通常のイベントなどでは想定ピークRPMをDAUではなく前回のイベントなどのピークRPM前日比などで決めています前回のイベントのピークRPM前日比がわかれば当日のピークRPM ÷ 前日のピークRPM = ピークRPM前日比今回のイベントの当日のピーク時の想定RPMが予想できる前日のピークRPM ✖ ピークRPM前日比 = 当日のピークRPM31
最後に大型イベントのリリースではDAU・過去の記録・CPU効率を元にキャパシティプランニングを行なっているただし、この見積もり方は大まかな指標です● CPU1%で捌けるRPM数や1ユーザーから送られてくるRPM数などは変わり続けている● 負荷に関わる外的要因は他にもたくさんある(各APIのレイテンシ、ユーザーが持つデータ量、etc…)イベントの内容や蓄積された過去の記録を元に考察して精度の高いキャパシティプランニングをすることが重要32