Windows Azure の詳細

Windows Azure で最新ゲームのニーズを満たす

Bruno Terkaly
Ricardo Villalobos

このコラムでは、プレビュー版の Windows Azure キャッシュ サービスについて説明しています。情報は変更される場合があります。オンライン ゲーム、モバイル ゲーム、およびソーシャル ゲームが世界中を席巻しており、プレイヤー数、プレイ時間、およびダウンロードされたアプリケーション数は驚くべき数値に達しています。つい最近、Facebook では、デスクトップ サイトとモバイル サイトでゲームを積極的にプレイしているユーザー数が世界全体のユーザー数の 3 分の 1 (7.5 億人中の 2.6 億人) に達しました。これは、ゲーム開発者やゲーム制作会社が直面する特有の課題を示す指標の 1 つにすぎません。つまり、複数のプラットフォームで同じゲームをプレイするユーザー、時間制ゲームのステータスが変更されたときにすぐに通知を受けることを望むプレイヤー、公開開始からわずか数日でウイルスに感染してしまうゲーム、世界中のさまざまな場所にいるユーザーへの訴求などの課題です。

さいわい、パブリック クラウドにはこれらの状況に対処するさまざまな代替手段が備わっているため、開発者は、ゲーム アプリケーションの開発に専念でき、認証、コンピューティング、データ、メディアなどの要件をサポートするインフラストラクチャの用意に注意を払う必要がなくなっています。今回のコラムでは、最新の Windows Azure サービスとコンポーネントを使用してこれらの課題を解決する方法やその他の一般的なシナリオについて紹介します。

図 1に、ターン制シナリオまたはリアルタイム シナリオによるモバイル クライアント向けクラウド マルチプレイヤー ゲームをサポートする、典型的なアーキテクチャを示します。ゲームのバックエンド構築に必要なごく一般的なタスクにさまざまなコンポーネントを割り当てることで、オーケストレーター/プロキシの概念を導入しています。オーケストレーター/プロキシは、複数のサービスとクライアントの対話すべてに対するゲートウェイまたはトラフィック コントローラーとして機能します。


図 1 モバイル クライアント向けリアルタイム マルチプレイヤー ゲームのソフトウェア アーキテクチャ

以降の段落では、これらの各コンポーネントについて詳細に説明します。

マルチプレイヤー ゲーム サーバー (サービスとしてのインフラストラクチャ仮想マシン)

マルチプレイヤー ゲーム サーバーは通常、オープン ソースまたはライセンス付きフレームワークに基づいています。サーバーに接続しているクライアントに対して信頼できるイベント ソースとして機能し、待機時間の短い呼び出しを使用して、同じサーバーに参加している他のプレイヤーの情報を提供します。このようなフレームワークにはクライアントとのステートフルな対話とローカル ストレージへのアクセスが必要なため、Windows Azure の仮想マシン (VM) はこのコンポーネントに最適な選択肢です。このようなゲーム サーバー フレームワークの例としては、pomelo (bit.ly/1i9heBe、英語)、Marauroa (bit.ly/am9MOi、英語)、Photon Server (exitgames.com、英語) などがあります。

これらのフレームワークを VM に配置するには、管理ポータルの Windows Azure イメージ ギャラリーからインスタンスを作成したり (bit.ly/197eXED)、カスタム VM イメージを VHD (Hyper-V) ファイルとして直接作成したり (bit.ly/PQso1a) することができます。

ゲーム サーバーの実装は、クライアントとの通信を最適化するためにネットワーク遅延の補正ソリューションや通信プロトコル (TCP、UDP など) の適正使用ソリューションの考案が必要な、複雑な作業になる場合があります。

ゲーム オーケストレーター/プロキシ (サービスとしてのプラットフォーム クラウド サービス)

ソリューションの核心は、以下に示す複数のサービスを提供する、ゲーム オーケストレーターまたはプロキシです。

  1. 認証: プレイヤーがゲーム サーバーに接続する前に、クライアントから送信された資格情報を検証します。
  2. マッチメイキング: 好みが類似しているプレイヤーを同じゲーム サーバーに割り当てます。遅延を最小限に抑えるために、所在地を基準にすることもあります。
  3. データ プロキシ: ゲーム サーバーやクライアントによるゲーム内要求に対応したり、外部ストレージを操作したりします。また、履歴スコア、プロファイル情報、好み、クレジット残高などのデータを返します。
  4. プロビジョニング: 接続中のプレイヤー数に応じたスケールアウト アプローチを利用して、VM 数を増減します。
  5. 通知: 通知サービスと対話して、プレイヤーがオフラインのときにゲームのステータスを通知します。通知は複数のプラットフォーム (Windows、Android、iOS など) とデバイスの種類をサポートしている必要があります。
  6. 委任: 電子メール メッセージの送信、支払い処理、ゲーム情報の記録など、外部サービスとの対話を調整します。

Windows Azure のクラウド サービスはゲーム オーケストレーターの候補として最適です。ゲーム オーケストレーターは、ステートレスな要求処理にも、クライアントとゲーム サーバーからの要求数に応じた容易なスケールアウトにも対処できる必要があるためです。さらに、クラウド サービスでは Windows Azure の仮想ネットワークのメリットを活用できるので、VM にホストしているゲーム サーバーと直接通信できます。このため外部エンドポイントを利用する必要がなく、アーキテクチャのセキュリティが強化されます。クラウド サービスは .NET 開発用の Visual Studio や Java 開発用の Eclipse など、さまざまな IDE で作成して配置できます。クラウド サービス作成の詳細については、bit.ly/19MYq5Aを参照してください。仮想ネットワークを使用して VM とクラウド サービスを接続する場合は、bit.ly/GYcG5tのチュートリアルが役立ちます。

先ほど説明した役割は、ユーザー数やオンライン ゲームの複雑さに応じて、1 つの Web クラスターや Worker ロールで処理することも、複数のクラウド サービスに分割することもできます。Windows Azure のメリットの 1 つは、サービスとしてのインフラストラクチャ (IaaS)、サービスとしてのプラットフォーム (PaaS) など、複数の配置モデルがあることです。主な選択基準は、クラウド ベンダー (この場合はマイクロソフト) に委任するソフトウェア層の数です。適切なクラウド配置モデルと実行モデルの選択の詳細については、bit.ly/153kRXMを参照してください。

ここからは、オーケストレーターで Windows Azure プラットフォームの他のコンポーネントを使用して、これらの役割を実行する方法を説明します。

認証 (Windows Azure Active Directory アクセス制御サービス)

モバイル クライアントがマルチプレイヤー プラットフォームにアクセスする際の最初の手順は、一連の資格情報を使用してサーバーへの認証を試みることです。最新のゲームでは、ユーザーにはオンライン セキュリティに関してさまざまな好みがあることを念頭に置いて、複数の ID プロバイダーによる認証をサポートすることが重要です。Facebook、Yahoo!、Twitter などのソーシャル ネットワークの資格情報を使用する方が好みのユーザーもいれば、Active Directory などのフレームワークに基づいたゲーム自体が提供する認証を好むユーザーもいます。

Windows Azure アクセス制御サービス (ACS) を使用すると、このような認証を簡単に実行できます。ACS は Windows Identity Foundation との統合をサポートし、既定で Windows Live ID (Microsoft アカウント)、Google、Yahoo!、および Facebook と互換性があり、OAuth 2.0、WS-Trust、および WS-Federation プロトコルに基づくシナリオを実現して、JSON Web Token (JWT)、SAML 1.1、SAML 2.0、および Simple Web Token (SWT) トークン形式を認識します。

この場合、ゲーム クライアントはゲーム プロキシを介してゲーム サーバーにログオンするために、ACS から発行されたセキュリティ トークンを取得します。このトークンには、ユーザー ID に関する一連のクレームが含まれています。ACS がトークンを発行するのは、ユーザーを認証済みの、他の信頼された発行者または ID プロバイダーからのセキュリティ トークンを提示して、ユーザーの身元の正当性を証明した場合のみです。図 2 に、このプロセスを示します。


図 2 Windows Azure アクセス制御サービスを使用した認証プロセス

マッチメイキング

マルチプレイヤー テレビ ゲームでは、プレイヤーを各自のの好みや所在地に応じて適切なゲーム サーバーに割り当てるプロセスを、マッチメイキングと呼びます。ゲーム クライアントが認証されると、IP アドレスに基づいてゲーム プロキシから、プレイヤーの好みに適したゲーム サーバーのリストと、ゲーム サーバーで必要な場合の追加のセキュリティ資格情報が返されます。通常、割り当ての根拠となるロジックは、ある種のキャッシュ メカニズムに保存されている、各データセンターにおける推奨サーバーのリストに基づいています。マッチメイキングにキャッシュをお勧めする理由は、パフォーマンスです。プライマリ ストレージへのラウンドトリップを避けると、プレイヤーのエクスペリエンスが大幅に向上します。Windows Azure には、複数のサービスとクライアントから利用できる新しいキャッシュ サービス (現在はプレビュー版) が用意されています。この新しいサービスは、データへの超高速アクセスを提供することで応答性の高いアプリケーションを実現する、スケーラブルな分散型インメモリ ソリューションです。対応する SDK を使用すると、.NET アプリケーションから非常に簡単にアクセスできます。詳しい手順については、bit.ly/15IltBt(英語) を参照してください。マッチメイキング プロセスの結果、ゲーム クライアントの接続先となるゲーム サーバーの適切な IP アドレスが返されます。

ゲーム セッションが (マッチング、対戦、または単なるプレイヤーのログアウトによって) 終了すると、プレイヤーは同じサーバーに留まることも、好みが変化した場合には別のサーバーを見つけるためにマッチメイキング プロセスにリダイレクトされることもあります。

データ プロキシ (Windows Azure のストレージ)

各自の好みに応じた適切なゲーム サーバーに接続済みのプレイヤーについては、ゲーム構成、ストア残高など、ユーザーに関するデータの要求がゲーム オーケストレーター/プロキシを通じてルーティングされ、通常、このオーケストレーター/プロキシで、データ リポジトリに対する最も一般的な操作を行う API が公開されます。この処理について、ユーザー情報やゲーム情報のストレージ メカニズムと、ゲーム サーバーからアクセス可能なサービスを公開するフレームワークの、2 点を決定する必要があります。

Windows Azure では、前回のコラムで説明したように、情報の保存方法が複数提供されています。クエリの数と複雑さ、データ構造、および必要なカスタマイズのレベルに応じて、Windows Azure SQL データベースのような従来型のリレーショナル リポジトリ、または Windows Azure テーブル ストレージのような NoSQL アプローチ (bit.ly/YrYcQP、英語) を選択できます。

選択するリポジトリにかかわらず、このような情報の前面で機能するサービスは、Windows Communication Foundation (WCF) や最近リリースされた ASP.NET Web API (asp.net/web-api、英語) などのフレームワークを利用して、RESTful 方式で公開されます。これらのフレームワークは、クラウド サービスや VM に配置できます。

Windows Azure では、クラウド上のリレーショナル データベースの機能と堅牢で柔軟性な REST API を組み合わせた、手軽なサービスも提供しています。これは Window Azure のモバイル サービスと呼ばれます。わかりやすいウィザードと自動スケーリング機能が備わっているので、このようなゲーム アーキテクチャの開発を簡単に加速できます。このサービスの詳細については、2012 年 11 月号のコラム「Windows Azure モバイル サービス: デバイス アプリケーションのための強固なバックエンド」(msdn.microsoft.com/magazine/jj721590、英語) または Windows Azure 公式ページ (bit.ly/188Llcg) を参照してください。

プロビジョニング

ゲーム オーケストレーター/プロキシは、必要に応じてゲーム サーバーを追加または削除する、プロビジョニング エンジンや自動スケーリング エンジンとしても機能できます。ただし、現在の Windows Azure では、VM、クラウド サービス、Web サイトなどのさまざまな開発モデルすべてに対して自動スケーリング機能が提供されています。

通知

モバイル デバイスを使用しているプレイヤーは、オフライン時、特にターン制や時間制で仮想財産やアイテムを最新の状態に保つ必要があるゲームを行っている場合に、通知を受け取る必要があります (これは FarmVille などのゲームによって非常に一般的になった概念です)。モバイル プレイヤーに通知を送信する開発者は、さまざまなモバイル デバイス プラットフォームを使用しているプレイヤーへの対応と、何百万人ものユーザーが利用できるインフラストラクチャの構築と保守という、2 つの大きな問題に直面します。さいわい、Windows Azure では通知ハブというサービスを通じて、Windows ストア、Windows Phone、iOS、Android など、さまざまなプラットフォームにプッシュ通知を送信する共通 API を提供しています。しかも、プッシュ通知を数百万人のユーザーに送信する際の所要時間が、数時間ではなく数分で済みます。図 3 に、複数のカテゴリを使用して Windows ストア アプリと iOS アプリケーションの両方に単純な通知を送信する C# のコード スニペットを示します。

図 3 Windows Azure 通知ハブを使用した Windows ストア アプリと iOS アプリケーションへの通知の送信

private static async void SendNotificationAsync()
 {
   NotificationHubClient hub =
     NotificationHubClient.CreateClientFromConnectionString(
       "", "");
   var categories = new string[] { "World", "Politics", "Business",
      "Technology", "Science", "Sports"};
   foreach (var category in categories) {
     var toast = @"" + "Breaking " +
       category + " News!" + 
       "";
     await hub.SendWindowsNativeNotificationAsync(toast, category);
     var alert = "{\"aps\":{\"alert\":\"Breaking "+ 
       category +" News!\"}}";
     await hub.SendAppleNativeNotificationAsync(alert, category);
   }
 }

他のサービス (SMTP、商取引) への役割の委任

ゲーム オーケストレーター/プロキシは、SMTP 経由で大量の電子メール メッセージを送信したりゲーム画像をリアルタイムで処理したりするエンジンなど、他のサービスにアクセスするためのゲートウェイとして機能する必要もあります。Windows Azure ストアでは、他のマイクロソフト パートナーが作成したアプリケーションをすばやく検索、購入、およびプロビジョニングできます。これらのサービスを Windows Azure コンポーネントと組み合わせると、複雑なゲームを構築したり、クラウド プラットフォームでネイティブにはサポートされていない機能を追加したりすることができます。Windows Azure ストアの詳細と開発者サービスのカタログについては、bit.ly/1carBrdを参照してください。

ゲーム分析とビッグ データ

ゲーム サーバーから採取したデータの収集、分析、およびレポートは、ボトルネックを発見し、ゲーム内パフォーマンスを向上して、プレイヤーが時間を費やしている領域を (収益化と広告のために) 特定するうえで重要です。Windows Azure では、Hadoop クラスターをわかりやすい簡単な方法でインストールできる、HDInsight と呼ばれる MapReduce アプローチをサービスとして利用できます。Hive はもちろん Microsoft Office などの使い慣れたツールを使用して、強力なレポートとグラフを作成できます。このコンポーネントの詳細については、2013 年 9 月号のコラム「Hadoop と HDInsight: Windows Azure のビッグ データ」(msdn.microsoft.com/magazine/dn385705) を参照してください。

まとめ

この記事では、Windows Azure プラットフォームのさまざまなコンポーネントを組み合わせてモバイル ゲーム業界向けのリッチでスケーラブルなソリューションを作成し、ソーシャル ネットワークが、またソーシャル ネットワークのアプリケーションに魅了された数多くのプレイヤーが生み出す需要と要件を満たす方法について、一端を紹介したにすぎません。パブリック クラウドは柔軟な従量課金制モデルで提供されるため、あらゆる規模の企業がこの分野で競争できます。

Bruno Terkaly は、マイクロソフトの開発者エバンジェリストです。彼の深い知識は、多数のプラットフォーム、言語、フレームワーク、SDK、ライブラリ、および API を使用してコードを作成し、現場で長年の経験を積むことで得られたものです。コードの作成、ブログ、クラウド ベースのアプリケーション構築 (特に、Windows Azure プラットフォームの使用) に関するライブ プレゼンテーションに携わっています。ブログは、blogs.msdn.com/b/brunoterkaly(英語) で公開されています。

Ricardo Villalobos は、経験豊かなソフトウェア アーキテクトとして、多くの業界の企業用アプリケーションを 15 年以上にわたって設計および作成しています。さまざまな技術認定資格の保持者であり、ダラス大学で経営管理の修士号を取得しています。彼はマイクロソフトの DPE Globally Engaged Partners チームのクラウド アーキテクトを務め、世界中の企業の Windows Azure ソリューション実装を支援しています。ブログは blog.ricardovillalobos.com(英語) で公開されています。

Terkaly と Villalobos は、大規模な業界カンファレンスで共同講演を行っています。彼らは、Windows Azure の詳細に取り組む読者の皆さんに、可用性に関する問い合わせを奨励しています。Terkaly の連絡先は bterkaly@microsoft.com(英語のみ) で、Villalobos の連絡先は Ricardo.Villalobos@microsoft.com(英語のみ) です。

この記事のレビューに協力してくれた技術スタッフの Kevin Ashley (マイクロソフト) に心より感謝いたします。
Kevin Ashley はマイクロソフトでアーキテクトおよびテクニカル エバンジェリストを務めています。『Professional Windows 8 Programming: Application Development with C# and XAML』の著者であり、Windows および Windows Phone 用の人気アプリの作者でもあります。Kevin は新興企業やパートナーと連携し、ソフトウェア設計、ビジネス、およびテクノロジ戦略に関するアドバイスを行っています。マイクロソフトに入社する前は、早期クラウドおよびビジネス インテリジェンス ソフトウェア関連新興企業の創設者を務めていました。上級ソフトウェア開発者およびアーキテクト時代に、Kevin は Fortune 500 社および米国、英国、ヨーロッパ、アジアなど世界中のヘッジ ファンド向けに、グリッド、データ ウェアハウジング、およびリアルタイム取引ソリューションを開発しました。Kevin は数学とコンピューター サイエンスの学位に加え、財政学の MBA を取得しています。Kevin のブログは kevinashley.com(英語) で Twitter は @kashleytwit(英語) です。