*本資料の内容 (添付文書、リンク先などを含む) は de:code 2020 における公開日時点のものであり、予告なく変更される場合があります。
#decode20 #
2020 年も最高のゲームをつくろう!
Game Stack でゲーム開発をしよう!
~ マルチプレイサーバー編 ~
A12
増渕大輔
マイクロソフトコーポレーション
本セッションについて
対象者
課題
ゴール
• オンラインゲームの開発や運営に携わっている開発者の方
• これからオンラインゲーム開発をはじめる開発者の方
• ゲーム業界は技術の変化が激しい業界
• ゲーム開発に忙しくてサーバーやデータベースの技術習得の時間がない
• 最新の LiveOps の考え方を習得したい
• 短い時間で Microsoft Game Stack の最新情報をキャッチアップ
• マルチサーバーに最適な技術を選定できるようになる
• データ分析に最適な技術を選定できるようになる
セッションアジェンダ
1. Game Stack
2. オンラインゲームはどう作るの?
3. PlayFab vs Azure
1年でここまで進化した! Azure Game Stack
Azure や PlayFab が使われているゲームタイトル
PlayFab or Azure?
そもそもオンラインゲームはどう作るの?
超単純・シンプルゲームサーバーの例
Minecraft のサーバーの例
• 専用サーバー(仮想マシン)である
• 1台だけのサーバーである
メリット
• 構築が簡単
ディメリット
• ユーザーをあまり収容できない
• 他のサーバーとデータ共有できない
• 小規模
Java Edition Bedrock Edition
ソース 任意 任意
ソース ポートの範囲 * *
ターゲット 任意 任意
ターゲット ポートの範囲 25565 19132
プロトコル TCP UDP
アクション 許可 許可
優先順位 100 100
名前 MinecraftJava_Port MinecraftBedrock_Port
https://docs.microsoft.com/ja-jp/gaming/azure/reference-
architectures/multiplayer-basic-game-server-hosting
オンラインゲームビジネスに求められる機能
プラットフォームやゲームの種類により細かなところは異なりますが、大まかにはどこも同じ仕組みが必要です。
•ユーザー管理と認証
•スコアボードと対戦履歴
•マッチメイキング
•ギルドなど
•リアルタイムシミュレーション
•FPS、MOBA型対戦ゲームロジック
•オンライン ロビー
•MMORPGロジック
•非同期型Webサーバー、ソーシャルゲーム
•マスターデータ
•ゲーム状態 (Title/Player State)
•大量データ処理(バッチ・ストリーミング)
•複雑なETL(抽出・変換・読込)
•データウェアハウジング
•可視化
•サーバーの割当
•監視
•スケーリング
☜ これらは Xbox や Steam などのプラットフォーム企業
が提供する場合もある
PaaS vs IaaS
Service Fabric
マイクロサービス開発
Reliable Actor などの
モデルを利用したい
Azure
Functions
Durable Functions によ
る開発効率化
非同期マルチプレイヤー
多くのXboxタイトルでの実
績がある
日本のゲーム業界での
実績が少ない
HTTPを含む イベント
ベースの処理の記述
シンプルな処理に切り分ける
前提
App Service
Web Apps
Web/モバイル向けゲー
ムを短期間で作成
インフラ知識が最も不
要な運用
日本のゲームでの実績
は多い
超大規模のインフラの
場合は ASE のクォー
ター上限が合わない可
能性がある
PlayFab
マルチプレイヤー
高度に統合されたゲー
ム向けバックエンド
サービス
+
マルチプレイヤーサー
バーの利用
インフラの運用知識は
ほとんどいらない
EA契約は可能だが、
Azure CSP の利用は
未対応
AKS
(Kubernetes)
コンテナインスタンス
Kubernetes のデプロイ、
管理、運用を簡略化する
ACIを用いたバースト運
用への対応
Kubernetesの知識習得と
運用は必要
仮想マシン
仮想マシンスケールセット
ブラウンフィールドに
おけるゲームシステム
の移設
大規模MMO
10秒・10000コアの
展開
大規模MMO利用では
Dedicated Host 設定は
必須
PlayFab を利用する場合は?
MULTIPLAYER
クロスプラットフォーム
マルチプレイヤー
サーバー
PLAYERS
プレイヤーの管理
COMMERCE
グッズ、仮想通貨
の管理
ANALYTICS
ゲーム内の計測と
リアクション実行
CONTENT
コンテンツの管理
COMMUNITY
コミュニティ管理
AUTOMATION
サーバー上の処理実行
環境
• リーダーボード
• トーナメント
• Prize tables
• マッチメイキング
• オーケストレーション
• ギルド・クラン
• ギフト・トレーディング
PLAYERS
• プレイヤーの認証
• プレイヤーのデータ管理
• プレイヤーのBAN管理
• セグメンテーション
• ロール
• パーミッション
• Facebook Instant
Games
• Virtual currencies
• Item catalog
• Stores
• Promotions
• Inventory
• Receipt validation
• Drop tables
• Subscriptions
• リモートコンフィグ
• データ保存
• ニュース
• UGC(ユーザー生成コンテ
ンツ)
• 多言語コンテンツ
• 翻訳
• 音声チャット
• メッセージ
• Serverless scripting
• アクション
• ルール設定
• スケジュールタスク
• Webhook
• PubSub
• Dashboards / Reports
• A/B Testing
• Event search
• Data warehousing
• Import 3rd party
data
• Crash reporting
Azure で実装する場合は?
Container
Network
Game Server
Data Warehouse
PaaS/Serverless Managed DB
Realtime
Analytics
System OperationVirtual MachineQueue
Message/Event
Game のための Azure Reference Architecture
https://aka.ms/AA8e1j1
Azure for Game を考える上での指針
Azure for “大規模” Game を考える上での指針
サーバーレス化しやすい例 ①
1. プレイヤーをキューに追加する - プレイヤーが、セッションを希望すると、検索要求がキューに入ります
2. キューからプレイヤーを削除する - プレイヤーがキャンセルをするとキューのデータを削除します
3. プレイヤーにマッチ結果を提供する - ポーリング メカニズムによって呼び出される。ゲーム サーバーの接続情報またはタイムアウトエラーを応答
4. サーバーを追加する - 新しいサーバーが作成されると、データベースに関連するサーバーの情報 (IP:Port) を書き込む。
5. 高レベル マネージャー - 開始できるゲーム セッションを探し、それぞれに対するサーバーを検索します。
• *Azure のサーバーレスアーキテクチャーが、十分な数のゲームサーバーがないことが検出されたらゲームサーバーをスケールアウト
サーバーレスを使う理由
•イベントをトリガーにして起動
•負荷に応じて、ほぼ無限にスケールアウト
•セキュリティアップデートなどのメンテナンスが不要
•Durable Functions を使うことで、サーバーレスの処
理間で呼び出し簡単にを行うことができる
Reference Architecture
https://aka.ms/AA8dwhc
サーバーレス化しやすい例 ②
完全に非同期ではありませんが
(20 秒のタイマーで実行されます)
永続的関数と Azure SignalR
Service で構築された雑学ゲームの
実装を、こちらのGitHubリンクで確
認いただけます。
Sample Code
https://aka.ms/AA8dwhp
Reference Architecture
https://aka.ms/AA8dpe9
非同期マルチプレイは Web アーキテクチャーでもOK
Azure 設計のポイント:Azure Database for MySQLを検討 Azure App Service での ASP.NET Core および
SQL Database アプリの作成
Web front end
Content Delivery
Network (CDN)
App Service
plan
Web App
Azure SQL
Database
Azure
Search
Logs Queue Static
content
Blob
App Service
plan
API App
Redis cache
Cosmos DB
WebJob
Storage Accounts Resource group
Internet
Azure Active
Directory
Azure DNS
Data storage
https://aka.ms/AA8dpfa https://aka.ms/AA8dpfh
同期系の処理が必要なときはどうする??
• クライアント側でゲームを実行
• クライアントチート対策に懸念がある
Azure Solution の選択
•仮想マシン
- ゲーム開発者の自由度が大きい
•Azure Container Instances (ACI)
- コンテナベース
•Virtual Machine Scale Sets
- スケーリング管理
•Service Fabric
- Microsoftコンテナオーケストレーション
•Azure Kubernetes Service (AKS)
- マネージドKubernetes
•PlayFab マルチプレイヤー サーバー
- ゲームサーバー専用のオーケストレーション
大規模ゲームインフラの設計で留意すべきこと
性能に関する意思決定プロセス
•性能テスト
•ゲームで必要なスレッド数
•ゲーム セッションに必要な RAMサイズ
•ネットワーク帯域幅
•1つのゲーム セッションに含まれるユーザーの数
•Option:ハイパースレッディング
•メモリとコアの比率
+
*Accelerated Networking が必要な場合
• 以下の汎用・または計算最適化VM(2vCPU以上)
• D / DSv2およびF / F シリーズ
• 以下のハイパースレッディングサポートVMの場合
(4vCPU以上)
• D / Dsv3、D / Dsv4、E / Esv3、Ea / Easv4、
Fsv2、Lsv2、Ms / MmsおよびMs / Mmsv2
スケーラビリティ、コンテナ、などソフト・機能面の意思決定プロセス
想定されるスケールアウトの要件
•1000 VMs in VMSS
•ローリングアップデート
•Dedicated Host
インフラチームの経験値は?
•K8S
•仮想マシン
•PlayFab マルチプレイヤー
PlayFab:ゲーム専用に作られた サーバー機能
Entities & Groups Statistics Matchmaking Party Servers
#1
#2
Demo
Demo
Multiplayers: Servers
Game Stack おすすめコンテンツ
https://aka.ms/AA8laa3
https://aka.ms/AA8l7ov
https://aka.ms/AA8l7oq
https://aka.ms/AA8dwhc
https://aka.ms/AA8l04s
https://aka.ms/AA8kicb
https://aka.ms/AA8doyp
https://blog.playfab.com/blog
https://github.com/PlayFab
https://aka.ms/AA8jrmg
https://aka.ms/AA8l0bi
https://aka.ms/AA8kmx9
マルチプレイサーバー編 のまとめ
Azure IaaS, PaaS, Serverless, Container, PlayFab Multiplayer などの特徴
を把握し、経験値や、要件、開発方針にあった技術を選びましょう
マルチプレイサーバの仕組みを理解したら、
PlayFab と Azure でマルチサーバーを Deploy してみよう
Microsoft Game Stack の世界はまだまだ広大だぞ!
ご清聴ありがとうございます。
https://developer.microsoft.com/en-us/games/
© 2018 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
© 2020 Microsoft Corporation. All rights reserved.
本情報の内容 (添付文書、リンク先などを含む) は、公開日時点のものであり、予告なく変更される場合があります。
本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。

2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ マルチプレイサーバー編 ~