【トップゲート主催】ゲーム業界様向けGCP活用のポイント 〜GCP for Gaming編〜
- BigQuery
- ゲーム
- 活用事例
- 開発事例
弊社トップゲートではGoogle Cloudのプレミアパートナーとして、Google Cloudに関する様々なセミナーを開催しています。この記事では、ゲーム業界様向けにGCPの使い方を解説した「GGG Study」の内容についてご紹介します。
GGG Studyは全6回に分けてGCPの各スキルを習得していただくための勉強会です。第2回では、GCP for Gamingと題し、GCP上でゲーム環境を構築する際のリファレンスアーキテクチャをご紹介します。
目次
GCPの基礎的な概念
まずはGCPの中で基本となる用語や概念について解説します。
GCPプロジェクト
GCPプロジェクトとはリソースの管理に使用する単位のことです。全てのリソースはプロジェクトと紐付けられ、プロジェクト単位で各種権限設定を行います。そのため、個々のプロジェクトは権限的に分離されています。
例えば開発環境、ステージ環境、本番環境とアプリケーション環境ごとにプロジェクトを分けたり、Webサーバー、データベース、アナリティクスなどのサービスごとにプロジェクトを分離し、共有VPC(Virtual Private Cloud)を利用して複数のプロジェクト間でプライベート通信を行う、など様々な活用方式が考えられます。
組織とリソース階層
GCPの各階層は上図のように分類されています。GCPリソースのルートノードは組織と呼ばれる単位で、通常は会社単位で作成します。その下にフォルダを分け、組織の構造をグルーピングします。また、そのフォルダの中にプロジェクトを作り、リソースを割り当てます。IAMポリシーによる権限設定は下の階層に継承されるため、組織構造に基づいた権限設定を容易に実現することができます。
IAM
IAM(Identity and Access Management)とは、各ユーザーがリソースに対してどのような操作を行うことができるか、というユーザーの役割を制御する機能になります。ある程度事前定義された役割を選択することもできますが、個々のサービスに対する詳細なアクセス設定をすることが可能です。
IAMの役割はグループ単位で割り当てることも可能です。例えば同じ部署の人は同じグループに分類し、そのグループに対して権限設定を行うようにすることで、権限管理の負荷を削減することが可能となります。
また、通常のユーザーではなく、サービスアカウントに対しても役割を割り当てることが可能です。サービスアカウントとはアプリケーションや仮想マシンに付与するGoogleアカウントのことで、サービスへのAPIコールにおける認証を行う場合等に利用します。IAMにより権限設定を行うことで、サービス間のアクセス権限を適切に設定することができます。
リージョンとゾーン
GCPにおけるリージョンとは地域の概念であり、日本には東京リージョンと大阪リージョンの2つのリージョンが存在します。また、ゾーンはオンプレミスで例えるとデータセンターのようなイメージです。異なるゾーン間では電源装置やコントロールプレーンなどが互いに独立した設計となっており、ゾーンを跨いでシステムを構築することにより、冗長性を高める設計を行うことが可能となります。
ネットワーク
GCPのそれぞれのゾーン間はGoogleのファイバーケーブルにより接続されており、高速なネットワークを利用することができます。また、そのバックボーンを活用することでグローバルなプライベートネットワークを実現しています。
そのため、GCPにおけるVPC(Virtual Private Cloud)では従来型のVPCと異なり、リージョンを跨いで作成することが可能です。
APIサーバーとデータベース
ここからはシステムを構築する上で参考になるアーキテクチャのパターンをご紹介します。まずはAPIサーバーとデータベースを配置する基本的なシステム構成における考慮点を解説していきます。
サーバーレス環境での構成例
上図がサーバーレス環境におけるアーキテクチャの構成例です。左側の2つのサービスがAPIサーバーとして利用できるサーバーレスのサービス、右側の4つのサービスがデータベースとして利用できるサービスとなります。この中から要件に合致するサービスを選択し、環境を構築します。
Google App Engine
Google App EngineはPaaS型のWebアプリケーションプラットフォームサービスです。マネージドサービスであり、開発者はインフラ部分を気にすることなく環境を構築することが可能です。高速にオートスケールするため、需要予測を行う必要がありません。言語はPython、Java、Node.js、PHP、Ruby、Goをサポートしており、アプリケーションのバージョン管理によりアプリケーションのデプロイ方式を柔軟に変更することが可能です。
ユースケースとしてはステートレスアプリケーションやマイクロサービス等の実行環境として適しています。リクエストのタイムアウトは60秒であるため、バッチ処理などの処理時間が長いタスクには向いていません。
Cloud Run
Cloud Runはサーバーレスで運用できるコンテナ基盤です。Google App Engineとは異なり、コンテナを自分で作成するため、言語やライブラリの制約はありません。まだリリースステージがGAとなりSLAの対象となって間もないサービスであるため、利用できるインスタンスのスペックは限定的で、最大で1000インスタンスまでという制限があります。Beta提供の機能も多いため、利用前にドキュメントを読み、最新情報を確認する必要があります。
Cloud Firestore
Cloud Firestoreはフルマネージドでサーバーレスなドキュメント指向NoSQLデータベースです。ACIDトランザクションをサポートしているため、整合性のあるトランザクション処理を実行することができます。また、Client SDKが提供されているため、Google App EngineやCloud Runなどで作ったアプリケーションにインストールすることで簡単に操作することが可能です。マネージドサービスであるため、スケールやバージョンアップなどの運用も必要ありません。
Cloud Spanner
Cloud Spannerは強整合性と水平方向のスケールを両立させたフルマネージドサーバーレスRDB( リレーショナル データベース サービス )です。スキーマ、ACIDトランザクション、SQLをサポートしています。業界最高水準のSLAを提供しており、リージョナルでは99.99%、マルチリージョンでは99.999%のSLAを保証しています。
Cloud SQL
Cloud SQLはRDBのマネージドサービスです。MySQL、PostgreSQL、SQL Serverに対応しています。レプリケーションやバックアップを簡単に構成し、データベースの可用性を高めることができます。
Compute Engine
サーバーレスではありませんが、上記のデータベースが要件を満たさない場合、Compute Engineの仮想マシン上にDBサーバーを構築することも可能です。OS以上のレイヤーはお客様管理であり、マシンタイプを選択することで、柔軟にリソースのサイズを決定することができます。
ちなみに、Google App EngineやCloud Run上のアプリケーションからCloud SQLもしくはCompute Engineにプライベート経由でアクセスする際には、Serverless VPC Accessを利用しVPCを経由した形で繋ぐ方法を取ることで実現することが可能です。
IaaS環境での構成例
また、サーバーレスではなくIaaSベースで構成を組むことも可能です。
IaaSで構成を組む場合、APIサーバーとしては先ほどご紹介したCompute Engineや、Google Kubernetes Engineを利用する構成が考えられます。また、リクエストの増加に応じたスケールや複数拠点における分散配置に対応するためには負荷分散サービスを利用する必要があります。
Google Kubernetes Engine(GKE)
Google Kubernetes Engineは、Googleが提供しているKubernetesのマネージドサービスです。マスターの自動更新やノードの自動修復など、Kubernetesの運用管理を行う必要はなく、ユーザーはKubernetesの利用に専念することができます。GCPの各種サービスと連携が可能で、ネットワークサービスやCI/CD、運用監視のサービスを一元的に利用することができます。
Cloud Load Balancing(負荷分散)
Cloud Load Balancingは、グローバルスケールのロードバランサーです。Googleが検索エンジンなどのサービスを提供する際に利用しているインフラを使用しています。そのため、100万QPSのリクエストに準備期間なしで対応することができるほどのスケーラビリティを備えています。
Cloud Load Balancingではグローバルに分散配置されているサーバーに対してもリクエストを各サーバーに振り分けることが可能です。これによりAPIサーバーをゾーンを跨いで配置することができ、障害に強い設計を実装することができます。
監視
ここからはシステム監視のベストプラクティスをご紹介していきます。GCPではマネージドの統合監視プラットフォームを提供しており、豊富な機能を一括で提供しています。
ログの集計・分析
収集したログの解析を行う場合、上図のようなアーキテクチャで実現することが可能です。
リアルタイムにログ分析を行う場合は、Cloud Pub/SubとCloud Dataflowを活用してストリーミングパイプラインを作成して、BigQueryで分析するといったフローが考えられます。Cloud Loggingのシンク機能を利用してコーディングを行うことなくBigQueryにデータを格納することも可能です。
また、リアルタイムに分析を行うのではなく、1度Cloud Storageというオブジェクトストレージにログデータを格納し、Cloud Dataflowがバッチのパイプラインとして定期的に取得してBigQueryに転送するといった分析の方法を取ることもできます。データのライフサイクルとそのコストを考慮した場合、長期保存するデータはCloud Storageを活用することをお勧めします。
Cloud Pub/Sub
スケーラブルで信頼性の高いメッセージングサービスです。非同期のメッセージングミドルウェアとして、ストリーミングパイプラインにイベントの取り込みや配信を行うことができます。
Cloud Dataflow
ストリームおよびバッチの統合処理モデルで、Apache Beamがベースとなったサービスです。サーバーレスのフルマネージドサービスでありながら高速なストリーミングデータ分析を実現することができます。
Cloud BigQuery
エンタープライズ向けのフルマネージドデータウェアハウスサービスです。非常に高速なクエリを実行することが可能で、高い信頼性を保証しています。
バッチ処理
次はバッチ処理のリファレンスアーキテクチャパターンをご紹介します。
Google Compute Engine(GCE)を活用した定期実行
Cloud Schedulerを活用し、定期的に実行するジョブのスケジュールを定義します。キックする先をCloud Pub/SubにすることによってイベントとしてCloud Functionsを実行することができます。Cloud FunctionsからCompute Engineを起動し、バッチ処理を行います。また、ここではPreemptible VMを利用することでコストを削減することが可能です。
BigQueryのデータを定期的に集計する
BigQueryでは組み込みのスケジューラを利用することができます。この機能を利用することで、定期的にデータを抽出し、宛先テーブルへロードすることが可能です。
複数のバッチジョブを連携して実行する
複数のバッチジョブをシーケンシャルに連携して実行する場合、Cloud Composerというサービスを活用することで実現可能です。Cloud Composerはワークフローのオーケストレーションサービスです。GCP内の各サービスと統合されており、パイプライン全体を管理するできます。
GUIによるETLの構築
GCPでは、ETLパイプラインをGUIで作成することのできるCloud Data Fusionというサービスを提供しています。GUIによる操作でデータの収集、処理、整形、加工を実現することができるだけでなく、各GCPのサービスと容易に連携することができ、作成したパイプラインのスケジュール実行も可能です。
マスターデータの配信
静的コンテンツを配信するために利用できるサービスとして、GCPではCloud CDNというCDNを提供しています。Cloud Load Balancing(負荷分散)を配置し、オリジンとしてCloud StorageやCompute Engine、Google Kubernetes Engine等を指定することでCDN経由でのアクセスを提供することが可能です。
リーダーボード
上図はリーダーボードやユーザーセッション等の管理にキャッシュを作成する際の構成例となります。Cloud Memorystoreサービスを活用することで、RedisやMemchached(Beta版)といったインメモリのキャッシュサービスをマネージドサービスとして利用することが可能です。
ゲーム専用サーバー
これまで様々なアーキテクチャをご紹介してきましたが、最後にゲーム専用サーバーとしてGCP上で提供しているサービスをご紹介します。
ゲームサーバー運用時の課題
オンラインゲームなどで複数の人が同時にゲームをプレイする場合に欠かせないのがゲームサーバーです。PvPサーバーやマルチプレイサーバーと呼ばれることもありますが、その運用には様々な課題があります。
例えばインフラのスケールアウトやスケールインを行う際には、プレイ中のゲームサーバーを保護する必要があります。もし対戦中のゲームサーバーがスケールインの対象となった場合、ゲームが中断され、ユーザー体験が悪くなってしまいます。
また、コストの観点から1つのインスタンス内で複数のゲームサーバーを実行する場合、パフォーマンスやIPアドレスの考慮が必要です。その他にも運用面ではモニタリングやロギング、バージョンアップの方法などがあげられます。
Agones
上記でご紹介したゲームサーバー運用時の課題を解決するため、GoogleがUbisoftと共同で開発したオープンソースプロジェクトがAgonesです。Agonesはゲームサーバーを運用管理するためのプラットフォームで、Kubernetes上に構築することができます。オートスケールやライフサイクル管理が可能なSDKなどの機能を利用することができ、複数のゲームエンジンに対応しています。
Google Cloud Game Servers(GCGS)
さらにGoogle Cloudでは、Agonesを拡張したGoogle Cloud Game Servers(GCGS)というサービスを提供しています。GCGSではマネージドなコントロールプレーンを提供することで、マルチクラスターにおける管理をより簡単に実現することが可能となります。
まとめ
この記事ではGCP上でゲーム環境を構築する際のアーキテクチャのパターンをご紹介しました。GCPでは多くのサービスをマネージドサービスやサーバーレス基盤として提供しており、環境の運用管理の負荷を軽減することが可能です。また、インメモリキャッシュサービスやゲーム専用サーバーなど、ゲーム業界に特化したソリューションを提供している点もGCPの他社にない特徴の1つですので、ぜひ活用を検討ください。
弊社トップゲートでは、Google Cloud (GCP) 利用料3%OFFや支払代行手数料無料、請求書払い可能などGoogle Cloud (GCP)をお得に便利に利用できます。さらに専門的な知見を活かし、
- Google Cloud (GCP)支払い代行
- システム構築からアプリケーション開発
- Google Cloud (GCP)運用サポート
- Google Cloud (GCP)に関する技術サポート、コンサルティング
など幅広くあなたのビジネスを加速させるためにサポートをワンストップで対応することが可能です。
Google Workspace(旧G Suite)に関しても、実績に裏付けられた技術力やさまざまな導入支援実績があります。あなたの状況に最適な利用方法の提案から運用のサポートまでのあなたに寄り添ったサポートを実現します!
Google Cloud (GCP)、またはGoogle Workspace(旧G Suite)の導入をご検討をされている方はお気軽にお問い合わせください。
お問合せはこちら
メール登録者数3万件!TOPGATE MAGAZINE大好評配信中!
Google Cloud(GCP)、Google Workspace(旧G Suite) 、TOPGATEの最新情報が満載!
ゲーム業界様向けGCP活用のポイントの他の記事
ゲーム業界様向けにGCPの使い方を解説した「GGG Study」は、全6回に分けてGCPの各スキルを習得していただくための勉強会です。全6回の内容とスケジュールを公開しますので、ぜひお楽しみにしてください。
第1回目
【トップゲート主催】ゲーム業界様向けGCP活用のポイント 〜Google App Engine編〜
第3回目
【トップゲート主催】ゲーム業界様向けGCP活用のポイント〜Google Kubernetes Engine編〜
第4回目
【トップゲート主催】ゲーム業界様向けGCP活用のポイント〜BigQuery編〜