クラウド時代のソーシャルゲーム開発 〜キャパシティプランニング〜

みなさま初めまして。テクニカルコンサルティンググループの takahashi_ken です。

 

私達のチームは、DeNAプラットフォームで提供する社内外の全てゲーム開発において、横断的な技術コンサルティングをさせていただいております。こちらのブログでも既に登場いたしましたメンバーの monmayukihiro_koチョイホセtamaclaw と共に、技術的なベストプラクティスを日々蓄積し、社内外へ発信しております。

 

さて、ゲーム開発に当たって最初に考慮しなければならないことの一つにインフラ設計があります。名著「Mobageを支える技術」(!)が出版されたのはわずか2年前ですが、その時とは比べ物にならないくらいインフラ周辺の技術も変化しました。特にクラウド技術は、今のソーシャルゲーム開発・運用には無くてはならない物になっています。かつては開発前にデータセンターにサーバラックを借り、安定稼働に必要なサーバをエンジニアがキッティングするのが常でしたが、現在は僅かな手間と時間で運用に耐えられるサーバをクラウドで用意することが一般的になってきました。

 

今回は、ソーシャルゲームにおけるインフラ設計のうち、クラウド環境でのキャパシティプランニングについてご説明したいと思います。

 

1. プロトタイプ開発でキャパシティの基礎値を決定する

通常のゲーム開発では、企画・コンセプトがある程度固まってくると、プロトタイプの開発に入りますが、このところ主流の一つであるスマートフォンアプリのゲームでは、iOS / Android クライアント開発がメインとなるため、この時点で実際にインフラが必要になる場合はほとんどありません。

 

しかし、このタイミングは、インフラの基礎設計を行う上でも重要な時期となります。本格的に開発が始まる前に、ある程度の想定をもってキャパシティを設定しておきましょう。

 

・サービス運用開始時点のユーザ数はどれくらいか
・プロモーション開始時やイベント実施時でのユーザ数はどれくらいまで増えるか
・ユーザの操作はどのくらいの頻度で行われ、どのタイミングでサーバにアクセスがあるか
・サーバにはどのようなデータが格納されるべきか・その頻度はどれくらいか
・表示される画像や音声はどこに格納され、どのタイミングでどのくらいの量を送信する必要があるか
・キャッシュされるデータはどれか、どれくらいの量か

 

上記の項目を想定することで、キャパシティの基礎値が設定されます。

 

2. 本番環境を想定してサーバスペックを設定する

通常は本開発に入るタイミングで、本番環境に近いサンドボックス環境を用意することになります。クラウドであれば柔軟にシステム構成やサーバスペックは変更できるので、それほど神経質になることはありませんが、このタイミングでキャパシティの基礎値を元に、サーバ構成の基礎となるインスタンスのスペックを決めておきましょう。

 

まずは、想定したユーザ数、特にDAU(Daily Active User・一日あたりのアクティブユーザ数)とユーザ当たりのアクセス数から、システムの動作する上限となる最大同時接続数を求めます。

 

例えば、サービス開始後 n日で目標DAU=50000, 1ユーザ当たりのAPIリクエスト数=500 Call/UU(Unique User)per dayとした場合でピーク時に10% / h が集中するとすると、

50000(DAU) * 500(Call/UU per day) * 10% / 3600(sec) = 約700 (Call/sec)

この時、1つのインスタンスで100Call/secを賄えるように設計すれば、n日経過までは7台で運用できそうだ、と考えることが出来ます。

 

3. 本番環境で性能評価する

ゲームシステム開発が概ね終わったタイミングで、本番システム全体の性能評価を行います。重い処理・利用頻度の高い処理を適正に配分した、実際のゲームの操作に近いシナリオを作成して、負荷試験を行います。このタイミングでは、サーバ台数を調整することでキャパシティを調整しますが、あまりに重い処理についてはゲームそのもののチューニングや、インスタンスのスペックの見直しを行います。

 

性能評価は、サービスを開始した後もイベント設計で必要になります。可能であれば本番環境に近い環境を再現出来るようにしておき、イベント毎に都度性能評価を実施することが望ましいです。

 

4. 運用計画を立てる

とここまで書きましたが、リリース前に正確にキャパシティを予測するのは難しいです。ゲームが(嬉しい事ですが)予想以上にヒットしてしまうと、システム構成の急な見直しも必要となります。そのような事態に備えて、トラフィック量が日次、週次、月次でどこがピークになりそうか、イベントのスケジュールからどのあたりで突発的な対応が必要となりそうか、何を指標として構成の増強を行うかを見極めて、運用計画を立てておきましょう。

 

また可能であれば、オペレーションの手順までドキュメント化して共有しておくことを推奨します。
突発的なサーバオペレーションは、オペレーションミスを誘発します。クラウド構成を採用すると、柔軟に構成が変更できる分、本番サーバに対してのオペレーションが増えることになります。

 

できるエンジニアかどうかは「何をするかを設計し、何をしたかを記録する」が出来るかで決まります。

 

まとめ

クラウド環境でのキャパシティプランニングについて概要をご説明しました。

 

クラウドはうまく使えば不要なコストを押さえられ、不測の事態でも迅速かつ柔軟に対応できますが、一方で精度の高いキャパシティプランニングが求められます。しかし事前に適切な準備を行っておけば、何も難しいことはありません。

 

以上、皆様のソーシャルゲーム開発の一助となれば幸いです。

 

最後に、テクニカルコンサルティンググループでは、ソーシャルゲーム開発における技術コンサルティングを開発パートナー様に提供させていただいております。是非、お気軽にお問い合わせください。(パートナー様はこちらから)