ゲーム向けマネージドサービス「Amazon GameLift 」とは何か? 開発・運用コストを削減する、便利な使い方

AWSでゲームサーバーを最大90%安く利用する方法 #2/2 >> 1はこちら

Amazon GameLiftとはなにか?

吉田英世氏(以下、吉田):続いて、GameLiftのご紹介をしたいと思います。

GameLiftはマルチプレイヤーのオンラインゲームをホスティングするサービスです。それ以外のゲームには、ユースケースとしては当たらないケースが多いです。

プレイヤーがたくさん集まってマッチメイキングして、そのあとにルームに振り分けられて、そこでプレイする、最近よくあるゲームですね。こうしたタイプのゲームに非常に相性が良く、そのために作られたマネジメントサービスです。

このようにオンラインゲームのいろいろな構成の中で、マッチメイキングとそのあとのゲームサーバーを、マネージドサービスとして提供しています。

実際の図がこちらになります。

この紫のところがGameLiftのコンポーネントです。真ん中がGameLiftのサービスエンドポイントになっております。そのサービスのエンドポイントに、ユーザーのセッションのリクエスト、「ゲームに参加したい」というリクエストを送っていただきます。そのあとにキューというものがございまして、キューにユーザーをリクエストをどんどん振り分けて入れていきます。

キューに入れたあとは、どのサーバーに振り分けるかという処理を行います。その後ろには、実際にゲームが動く「フリート」と言われるコンポーネントがございます。ここでお客様が作ったゲームのプロセスが動くサーバーの集まりになります。

そのサーバーの集まりを、例えばノースバージニアやフランクフルト、あとはシンガポールなどの国に分かれて、マルチリージョンでゲームのセッションを振り分けることができます。振り分けられたあとは、ユーザーがフリートに直接接続します。

FleetIQの機能

今回の話は、フリートについてです。フリートがゲームサーバーというかたちで実際にインスタンスが立ち上がるものなんですが、そのEC2インスタンスのフリートの価格をどうやって下げるか、ということをご紹介したいと思います。

ユーザーさんが実際に作ったビルドという単位でゲームのプロセスを作っていただいて、それをサーバーに乗せて、サーバーが何台必要なのか、ゲームのセッションの数によってどれだけ増やすかをマネジメントする機能になっております。

こちらはインスタンスタイプやリージョン、どのようにサーバーを増やすかというポリシーなど、いろいろなパラメータを設定できます。

そのフリートの中では、スポットフリート使うことができます。こちらも先ほどご説明したとおり、EC2のフリートと同じように、スポットインスタンスをどのように組み合わせるかという設定ができます。その機能を提供しているのが、FleetIQという機能です。こちらが1つ、専用のポイントになっているのですが、非常に賢い機能です。

例えばオンデマンドのフリートが1つとスポットのフリートが2つあったとします。こちらがc4のx largeのスポットフリートで、こちらはc4のlargeのフリートですね。値段は若干x largeが高いんですが、4つのゲームサーバーが立ち上がります。ということは、ゲームサーバーあたりのコストが一番低いのはこれですよね。

あと、もう1つポイントがありまして、「frequency of interaction」というパラメータがあるんですが、こちらはGameLift自身が、どのインスタンスタイプが落ちやすいかをずっと裏でトラッキングしています。そのトラッキングした結果をデータベースの中で持っていて、2つの指標、インスタンス単位、ゲームサーバー単位のプロセスあたりの間隔が一番低くて、かつインタラクションのレートが一番低いものに対して、ゲームセッションを優先的に振り分けることができるサービスになっています。

こちらがフリートのご説明でした。

GameLiftリアルタイムサーバーの仕組み

コストとはあまり関係ないところなんですが、最近GameLiftのリアルタイムサーバーが発表されました。

これまでGameLiftを使うにあたって、GameLift上でゲームサーバーを立てるときはゲームサーバーのプロセス自体はお客様にC++であるとかC#で書いていただく必要がありました。

それをマネージドというかたちでNode.jsでAWSでサーバーを用意して、お客様はJavaScriptを書くだけでゲームサーバーを立ち上げることができる、という機能ができました。

こちらに書いてあるとおりNode.jsベースで、ステートフルとステートレスの両方に対応しております。TCP/UDP対応ということで、比較的自由にすることができます。こちらを少しご紹介させていただきます。まず大切なことなんですが、リアルタイムサーバーにおすすめのゲームのジャンルがございます。

こちらに挙げさせていただいたのは、カードゲームやモバイルマッチ、ターンベースですね。こちらのゲームで使っていただくのがおすすめです。事前にソリューションアーキテクトにご相談いただければ、検証にもご協力させていただきます。

スクリプトはこのようになっています。

ユースケースとしては、簡単なゲームサーバーロジックができるということと、プレイヤーの確認やチート検出、あとはペアメッセージということで、接続されたプレイヤーに対してメッセージングをやり取りすることができます。こちらはぼやけていて申し訳ないんですが、こうしたJavaScriptで定義していただくかたちになります。

実際にJavaScriptをローカルで書いていただいて、それをzipで固めて、GameLiftに置いていただく。それ自体がゲームサーバーのプロセスになりますので、それを先ほどご紹介したフリートにどんどん立ち上げていく、という手順になります。

クライアントのSDKも出させていただいておりまして。現在C#をサポートしておりまして、こちらはUnityを想定しているんですが、Unityでロードすることができます。

デモで見るGameLift

実際の画面もご覧いただければと思うのですが、これがGameLiftの画面です。トップページでメトリクスを見ることができるんですが、ダッシュボードではフリートの状況を見ることができます。

スポットインスタンスを薦めておきながらオンデマンドでフリートを立ち上げているのですが、1つのEC2のサーバーが立ち上がっている状況です。その中で、現在メトリクスで1つのゲームが立ち上がっています。

GameLiftの用法ですが、ゲームセッション=ユーザーが遊ぶゲームのルーム、みたいな感じですね。あとはプレイヤーセッションといって、プレイヤーが実際にゲームセッションにつながるセッションという2つの手法があります。こちらはゲームセッションということで、フリートの中にルームというか、ゲームセッションができているかも見ることができます。

こちらはサンプルコードのNode.jsになります。コメントが入ってるので行数が長いですが、非常にシンプルですね。サンプルコード自体はWebに上がってるので、見ていただければと思います。

こちらをローカルのエディタで書いていただいて、それをzipで上げていただいて、先ほどのフリートに入れて立ち上げるように設定するかたちになります。

こちらがGameLiftのご紹介になります。GameLiftはやっぱりスポットインスタンスも使えるので、そちらを使っていただいてゲームサーバーのコストを下げていただければと考えております。

EC2をチューニングする

最後に、EC2のチューニングをさらっとご紹介させていただきます。

ご存知のとおり1つのサーバーあたりで処理できる数が多ければ、単位あたりのコストが下がって、全体的なコストが下がります。

AWSは実は、ゲーム向けのパフォーマンスチューニングの資料を出していますので、参照いただければと思います。インスタンスのタイプが古めなんですが、OSやネットワーク周りのチューニングなど、ゲームに沿って非常に参考になることが多く書かれているので、こちらを見ていただきたいと思います。

あとは参考になるのが、re:Invent2018にEC2のパフォーマンスチューニングのセッションがあり、最新のNitroシステムのチューニングの話もしております。

こちらの基本だけご紹介したいと思います。

EC2にはいろいろなインスタンスタイプがありますが、ここで強調したいのは先ほど申し上げた、最新のハイパーバイザであるNitroを使っていただくことをおすすめしております。

理由は、非常にパフォーマンスがいいからです。C4とC5を比べて倍のパフォーマンスが出た実績もございます。例えばC4を2台でやっていたことをC5を1台でまなかえるケースもあるので、結果的にコストが下がるということをお客様に体感していただいています。

私のお客様でも、C4でゲームサーバー立ち上げてそれをC5にリプレイスすることで台数が7割ぐらいになって、コストがかなり下がった事例もありますので、ぜひ新しいインスタンスタイプを試していただければと思います。

あとは新しいインスタンスタイプを試すのは当然ですが、カーネルを新しいものにしていただくことも必要だと思っております。こちらで40パーセント以上のパフォーマンスのインプルーブメントがあります。

また、NVMeと言われるディスクのドライバーというかテクノロジーなんですが、これが搭載されているOSやインスタンスタイプがあるので、それを使っていただくだけで非常に高いパフォーマンス性能を出すことができます。

あとはCPU、メモリ、ネットワーク、ディスクといった観点でいくつか非常に細かい内容を掲載させていただいておりますので、のちほど見ていただければと思います。

1つだけ申し上げたいのが、クロックソースについてです。クロックソースとは、時間を取得するコンポーネントというか機構です。この設定を、もし古いインスタンスタイプを全台で使っていただいているのであれば、そちらをtscというタイプに変えていただくだけでパフォーマンスがよくなった事例が多く出ておりますので、こちらもチェックしていただければと思います。

3つのポイントでゲームサーバーのコストを安くする

まとめに入らせていただきます。今回、ゲームサーバーのコストをいかに安く使っていただくかということで、3つご紹介しました。

まずはスポットインスタンスをご活用いただき、どのように使えばいいかはソリューションアーキテクトにご相談いただければ、ワークロードに応じていろいろなご提案ができますので、まずご相談いただければと思います。

次にGameLiftは、マルチプレイオンラインゲームをお考えのときにはご検討いただければと思います。本当に便利なサービスで、コストもかなり落ちるので、ぜひここをやっていただければと思います。EC2チューニングも、ぜひやっていただければと思います。

最後に告知です。Amazonでは「Game Tech Night」というゲームのイベントも開催しておりまして、8月21日に機械学習のイベントも開催しますので、ぜひご参加いただければと思います。9月にはお客様を集めてLT大会を開催するので、登壇されたいという方はお声がけいただければと思います。

では、以上になります。どうもご清聴ありがとうございました。

(会場拍手)

GameLiftは他の言語に対応するか?

司会者:吉田様、どうもありがとうございました。ここでご質問をお受けしていきたいと思いますので、ご質問のある方は挙手をお願いします。

(会場挙手)

質問者2:GameLiftでスポットインスタンスが使えるって話がありましたが、GameLiftを介してクライアントから接続して、クライアントに対して最終的にはDSRみたいなかたちで返すんですよね?

吉田:そうです。おっしゃるとおりです。

質問者2:そのときはスポットインスタンスなので……クライアントからのレスポンスを返すほうはスポットインスタンスの対象になってるんですか?

吉田:仕組みとしては、マッチメイキングしたあとに「このサーバーに入りなさい」っていうのをゲームクライアントに返して、そのゲームクライアントが直接刺さりに来るのがスポットインスタンスです。そのスポットインスタンスがどうか、っていうことですね。

質問者2:スポットインスタンスはその前段のところかなと思ったんですけど。

吉田:それはもうAWSのマネージドサービスなので、お客様が触っていただく必要はなくて、管理していただくのは、クライアントが直接接続するサーバーだけになってます。

質問者2:わかりました、ありがとうございます。

質問者3:GameLiftで、ロジックをNode.jsで書けるとおっしゃられていましたが、ほかの言語の対応予定やそういった声は聞いたりしますか?

吉田:あります。例えばどんな言語がいいですか?

質問者3:個人的にはコンパイル言語ですね。型がちゃんとしてるものが好きで。

吉田:今だとC++は書けるんですけど。

質問者3:あっ、C++は書けるんですね。

吉田:C++とC#はあります。やはりライトに使いたいというお客様はけっこうおられて、例えば本当に設定だけで、リレーだけしかしないので設定だけでいい、みたいなお客様もわりといらっしゃいます。そういう方向けに出させていただいた、というかたちになります。

質問者3:わかりました。

吉田:ほかの言語も一応、考えているみたいでして、どんな言語がいいかいただければ、のちのち回収いたします(笑)。

(会場笑)

司会者:これはチャンスですね(笑)。

吉田:チャンスです、はい(笑)。

司会者:以上で懇親会に移りたいと思います。吉田様、ありがとうございました。

(会場拍手)