Minecraft Earth と Azure Cosmos DB パート 2: ターンキー型の地理的分散機能の提供

2020年5月6日 に投稿済み

Azure Cosmos DB

こちらの記事は、Azure Cosmos DB を使用して現実世界のニーズを満たす方法と Azure Cosmos DB がもたらす効果について解説する 2 部構成シリーズのパート 2 です。パート 1 では、Minecraft Earth サービス開発者が Azure Cosmos DB を選択する要因となった課題、およびこれらの開発者が Azure Cosmos DB を使用して、非常に短い待機時間で、世界中の全プレイヤーのほぼすべてのアクションをキャプチャする方法について考察しました。パート 2 では、ソリューションのワークロード、および Minecraft Earth サービス開発者が Azure Cosmos DB をベースにしてこれを構築することでどのようなメリットがあったかについて考察します。

地理的分散機能とマルチリージョン書き込み

Minecraft Earth サービス開発者は、Azure Cosmos DB のターンキー型の地理的分散機能を使用して、フォールト トレランス、ディザスター リカバリー、待機時間の最小化の 3 つの目標を達成しました。また、待機時間の最小化を達成するために、Azure Cosmos DB のマルチマスター機能も併せて使用し、マルチリージョン書き込みを実現しました。サポート対象地域には、それぞれ 2 つ以上のサービス インスタンスが存在します。たとえば、北米では、Minecraft Earth サービスが米国西部と米国東部の Azure リージョンで実行されますが、Azure の他のコンポーネントを使用して、ユーザーに近い方を判別し、それに基づいてトラフィックを転送します。

Minecraft Earth サービス開発チームのシニア ソフトウェア エンジニアである Nathan Sosnovske は次のように説明しています。

「非常に多くのグローバル リージョンで提供されている Azure で世界規模の展開を容易に実現できました。これを活かして、待機時間の短いゲーム体験をグローバル規模で実現しています。とはいえ、大半の人々の移動範囲は 1 つの地域内に限られるため、各地域の全サービス インスタンス間のマルチマスター書き込みの設定を用意しています。サンフランシスコ在住のプレイヤーがヨーロッパに行き、そこで Minecraft Earth をプレイできないということではありません。このような場合は、単に異なるメカニズムを使用して、ラウンドトリップ待ち時間を最小化します」

1 秒あたりの要求ユニット (RU/秒) の使用

Azure Cosmos DB では、保証されたデータベースのスループットを予約するための "通貨" として 1 秒あたりの要求ユニット (RU/秒) が使用されます。Minecraft Earth では、通常の書き込みで約 10 RU/秒が必要となり、Azure Service Bus による追加専用イベント ログのバックグラウンド処理でさらに 2 ~ 3 RU/秒を使用します。

Sosnovske は次のように述べています。「RU/秒の使用量はほぼ直線的に増加することがわかっているので、1 秒あたりの書き込み要求が増えた際にこれに応じた容量を増やすだけで済みます。当初は、スループットがもっと必要だと考えていましたが、最適化すべきことがたくさんあることがわかりました。元の設計では、要求の量や複雑さに比較的うまく対処できていましたが、システムがゲーム サーバー化するケース、つまり、システムが内部で自身を物理的に再パーティション分割するケースには対処できませんでした。理由は全体的なデータの量です」

この理由は、割り当てられた RU/秒が複数の物理パーティション間で等しく分散され、最新データが含まれる物理パーティションが他のパーティションよりもはるかに実行負荷が高くなるためです。

Sosnovske は次のように説明しています。「幸いなことに、私たちのシステムは、お客様向けのビューに具体化される追加専用ログとしてモデル化されているため、Azure Cosmos DB から直接古いデータを読み取ることは非常にまれです。私たちのデータ モデルは、イベントをビューに処理した後、コールド ストレージにそれらをアーカイブし、Time to Live 機能を使用して Azure Cosmos DB からそれらを削除できる程の柔軟性を備えていました」

現在、サービスの最新アーキテクチャにより、Sosnovske はスケーラビリティについてまったく心配していません。

Sosnovske は次のように述べています。「開発中に Azure Cosmos DB が 100 万 RU/秒まで拡張できることをテストし、問題なくそのスループットが実現されました」

Minecraft Earth の初リリース

2019 年 10 月、Minecraft Earth が 1 つの地域で正式にリリースされました。リリースから数週間後にその他の地域へのグローバル展開が完了しました。Minecraft Earth は、多くのファンを魅了するお馴染みの Minecraft を拡張現実の世界でプレイできるまったく新しいゲームです。

Minecraft Earth の実現に貢献した Sosnovske とその他の開発者は、史上最大の人気を誇るゲームの 1 つを拡張現実の世界に拡張できたことで、 一様に満足感を味わっていました。

Sosnovske は次のように当時を振り返っています。「私たちも多くがゲーマーなので、Minecraft Earth に関わるチャンスにすぐ飛びつきました。当時を振り返ると、すべてがうまくいきました。結果にはとても満足しています」

Azure Cosmos DB を使用するメリット

Azure Cosmos DB は、Minecraft Earth をサポートする複数の Azure サービスの 1 つに過ぎませんが、極めて重要な役割を果たしています。

Sosnovske は次のように述べています。「非常に複雑なものを完全に一から構築することなしに私たちが成し遂げたことを、他の方法では実現できなかったでしょう。Azure Cosmos DB は、低待機時間、グローバル分散、マルチマスター書き込みなど、必要な機能をすべて備えていました。私たちがすべきことは、これを適切に利用することだけでした」

Azure Cosmos DB を使用して Minecraft Earth サービスを構築する具体的なメリットとして、以下のようなものがあります。

簡単な導入と実装: Sosnovske は次のように語っています。

「Azure Cosmos DB は導入が簡単で、特に .NET エコシステムのコンテキストにおいて、信じられないくらい簡単に使用を開始できました。Nuget パッケージをインストールし、適切なエンドポイントにポイントするだけで済みました。サービスのドキュメントがとても詳しく、SDK の仕組みの誤解によって大きな問題が生じることは一切ありませんでした」

メンテナンス不要: Microsoft Azure の一部である Azure Cosmos DB は、完全に管理されたサービスです。つまり、Minecraft Earth サービス チームのメンバーは、サーバーへの修正プログラムの適用、バックアップの維持管理、データ センターの障害などを気にする必要がありません。

Sosnovske は次のように述べています。「日常的な運用に対処せずに済むのが大きなメリットですが、しかし、これは Azure での構築のごく一般的なメリットです」

低待機時間を保証: 開発者が Azure Cosmos DB を選択する大きな理由は、世界中の場所および規模を問わず、99 パーセンタイルの読み取りと書き込みにおいて、1 桁台 (10 ミリ秒未満) の待機時間の SLA が保証されているからです。Table Storage の待機時間はこれよりも長くなり、上限も保証されていません。

Sosnovske は次のように述べています。「Azure Cosmos DB の読み取りの平均待機時間は 7 ミリ秒で、公約どおりの待機時間を実現しています」

柔軟なスケーラビリティ: Azure Cosmos DB の柔軟なスケーラビリティのおかげで、ゲームをスムーズにリリースできました。

Sosnovske は次のように述べています。「Azure Cosmos DB がサービス拡張のボトルネックになることは一切ありませんでした。初リリース以降、パフォーマンスを最適化する取り組みを数多く実施してきましたが、その取り組みの際にスケーラビリティに限界がないことがわかったのは大きな収穫でした。スループットを実現するために支払ったコストが当初の必要コストを少し上回ったかもしれませんが、ユーザーの需要の増大に対応できないサービスを構築するよりもはるかにましです」

ターンキー型の地理的分散機能: Azure Cosmos DB を利用することで、地理的分散が Minecraft Earth サービス開発者にとって取るに足らないタスクとなりました。プロビジョンされたスループット (RU/秒) の調整も同様に簡単です。Azure Cosmos DB によってすべてのリージョンで必要な内部運用が透過的に行われ、単一のシステム イメージが継続的に提供されるからです。

Sosnovske は次のように述べています。「ターンキー型の地理的分散機能は大きなメリットでした。マルチマスター サポートの有効化の際に、システムをモデル化する方法について、従来よりも少し慎重に検討する必要がありましたが、自分達で問題を解決する労力に比べればはるかに楽でした」

コンプライアンス: 開発者は、Azure Cosmos DB 内で Tme-to-Live を使用することで、ヨーロッパの一般データ保護規則 (GDPR) のようなコンプライアンス義務の違反について心配することなく、ロケーション ベースのゲームプレイ データを短期間安全に保管できます。

Sosnovske は次のように説明しています。「これにより、"このプレイヤーは、一定期間中、このロケーションを一度だけ利用できる" といったワークフローを促進できます。一定期間がすぎれば、Azure Cosmos DB が設定された TTL 内でデータを自動的に削除します」

Sosnovske は、Azure Cosmos DB の経験のまとめとして、「とても有意義でした」と述べています。

「Azure Cosmos DB は、基本的な概念について時間をかけて理解すれば、非常に信頼性が高く、使いやすいソリューションです。そして何よりも、コードを記述する際の妨げになりません。経験の浅いチームの開発者が機能の開発に取り組む際、データベースやデータの保管方法について考える必要はありません。特定のドメイン向けにコードを記述し、それを動かすだけで済みます」

Azure Cosmos DB の使用開始

  • Azure Cosmos DB にアクセスしましょう。
  • ゲーム用 Azure の詳細については、こちらをご覧ください。