GS2-Freeze

GS2 マイクロサービスのバージョンを固定するエンタープライズ向け機能

GS2-Freeze は、ゲームから利用する GS2 のマイクロサービスのバージョンを任意のタイミングで固定 (freeze) し、運営側が管理するタイミングでバージョンを更新できるようにするための機能です。

通常、GS2 のマイクロサービスは継続的にバージョンアップが行われ、ゲームは常に最新のバージョンの API を利用することになります。 多くのタイトルではこの運用で問題ありませんが、リリース直後の大規模タイトルや、長期にわたって安定性を最優先したい局面では、サービス側の更新タイミングをゲーム運営側でコントロールしたいというニーズが存在します。 GS2-Freeze はこのようなニーズに応えるための、エンタープライズ向けの機能です。

ステージ

GS2-Freeze の中心となる概念が「ステージ (Stage)」です。 ステージは「特定の時点で固定された GS2 マイクロサービスのバージョンの集合」を表します。

各ステージには以下の情報が紐付きます。

  • ステージ名 (name): ステージを一意に識別する名前
  • ソースステージ名 (sourceStageName): バージョン情報の取得元となるステージの名前
  • ソート順 (sortNumber): 開発・検証・本番といったステージの並び順を表す番号
  • ステータス (status): ステージの状態 (プロモート中、ロールバック中など)

ゲームのクライアント・サーバーは、利用したいステージを指定してGS2のAPIを呼び出すことで、そのステージに固定されたバージョンのマイクロサービスを利用できます。

graph LR
  Latest["最新の GS2 マイクロサービス"] -- Promote --> StageDev["Stage: dev"]
  StageDev -- Promote --> StageStg["Stage: staging"]
  StageStg -- Promote --> StageProd["Stage: production"]
  Game["ゲームクライアント"] -- API リクエスト --> StageProd

プロモート / ロールバック

ステージのバージョンを更新する操作を「プロモート (Promote)」と呼びます。 プロモートを実行すると、ソースステージに固定されているバージョンが、対象のステージにコピーされます。 たとえば「staging ステージのバージョンを production ステージへプロモートする」ことで、検証済みのバージョンを本番に反映できます。

プロモート後に問題が発覚した場合は、「ロールバック (Rollback)」を実行して直前のバージョンに戻すことが可能です。

プロモート・ロールバックは時間のかかる処理になることがあり、内部的には非同期処理として実行されます。 処理の途中経過は Output として記録され、状態を後から確認できます。

ステージのソート順

sortNumber を利用することで、複数のステージを「開発」「ステージング」「本番」のような階層として並べることができます。 ソート順はマネージメントコンソール上の表示順や、プロモート対象を選択する際の参考情報として用いられます。

トランザクションアクション

GS2-Freeze ではトランザクションアクションを提供していません。

マスターデータ管理

GS2-Freeze はステージ自体が運用上の構成情報であり、一般的なマイクロサービスにあるような「マスターデータのインポート / エクスポート」は提供していません。 ステージの作成・更新・削除はマネージメントコンソールや GS2-Deploy から行います。

実装例

GS2-Freeze は管理API中心のマイクロサービスです。ゲームエンジン用 SDK (Unity/Unreal Engine) には専用の Domain クラスが提供されていません。

ステージの作成・プロモート・ロールバックといった操作は、ゲームクライアントから直接呼び出すのではなく、以下のいずれかの手段で操作することを推奨します。

  • マネジメントコンソール
  • GS2 CLI
  • 各種言語向け一般SDK (C# / Go / Python / TypeScript / PHP / Java)
  • GS2-Deploy によるテンプレート管理

各種SDKの詳細は対応するリファレンスページを参照してください。

より実践的な情報

開発・検証・本番の3段ステージ運用

代表的な利用パターンは、開発用・検証用・本番用の3つのステージを用意し、左から右へ順番にプロモートしていく運用です。

  • 開発ステージ (dev): 最新のGS2マイクロサービスを利用し、新機能の動作確認を行う
  • 検証ステージ (staging): 開発ステージで検証が済んだバージョンをプロモートし、QAやリハーサルを行う
  • 本番ステージ (production): 検証ステージで品質を確認したのちにプロモートし、ゲームプレイヤーに提供する

この運用により、GS2 側で新しいリリースが行われても、ゲーム運営側が望むタイミングでのみ本番反映を行うことができます。

問題発生時の即時ロールバック

本番ステージにプロモートしたあとに不具合が見つかった場合は、ロールバックを実行することで直前のバージョンに即座に戻すことができます。 ゲーム側に変更を加えずにサービス側のバージョンだけを差し戻せるため、緊急対応の選択肢として有用です。

詳細なリファレンス