アーキテクチャ (IT)システムアーキテクト

惑星規模の低遅延マルチプレイヤーゲーム状態同期ファブリックを設計し、地理的に分散したシャード間で権威あるサーバー状態を維持し、1,000万人の同時プレイヤーのためにクライアント側の予測とサーバー権威の物理学を調整し、非同期の悪用に耐える決定論的シミュレーションを保証し、ライブゲームプレイ中に無感知の遅延スパイクや状態損失なしにシームレスなシャード引き渡しを実装してください。

Hintsage AIアシスタントで面接を突破

質問への回答。

質問の歴史。

大規模マルチプレイヤーオンラインゲーム(MMO)やバトルロワイヤルタイトルは、従来のリクエスト-レスポンスアーキテクチャを超える独自の分散システムの課題に直面しています。初期のゲームインフラストラクチャは、単一の権威あるサーバーに依存しており、遠くのプレイヤーに対して耐えがたい遅延を引き起こし、単一障害点を表していました。クライアント側の予測とサーバーの調整モデルへの進化は、決定論と不正防止に関する複雑さをもたらしました。現代のクラウドネイティブゲームプラットフォームは、異種デバイス全体で1,000万の同時セッションをサポートしながらも、50ミリ秒未満の遅延と競技の整合性のための厳格な一貫性を維持する必要があります。

問題。

基本的なアーキテクチャの緊張は、スケーラビリティのための最終的な一貫性とゲームプレイの公平性のための強い一貫性のバランスを取ることにあります。プレイヤーはネットワーク遅延を隠すために即時のローカルフィードバックを必要としますが、サーバーはスピードハッキングやテレポーテーションの悪用を防ぐために権威的に競合を解決する必要があります。地理的なシャーディングは、地域サーバー間を移動するプレイヤーが状態損失やラバーバンディングのリスクを負う境界横断の問題を引き起こします。さらに、分散ノード間での決定論的物理シミュレーションは、ゲーム状態を破損させる非同期エラーを防ぐために同期された乱数生成と浮動小数点演算基準が必要です。

解決策。

クライアント予測の検証のためのエッジコンピューティングノードと永続的な状態管理のための地域権威クラスターを利用したハイブリッド権威システムを実装します。クロスプラットフォーム計算の一貫性を確保するために決定論的ロックステップシミュレーションフレームワークと固定小数点演算を展開します。トポロジーの変更中に再割り当てを最小限に抑えるために、プレイヤーセッションをシャードにマッピングするために一貫したハッシュとランデブーハッシュアルゴリズムを利用します。帯域幅を削減するためにQUICプロトコルを介した状態デルタ圧縮を実装します。シャード引き渡し中の一時的なプレイヤー位置のためにCRDT-lite構造を使用し、在庫取引のために二段階コミットプロトコルを組み合わせます。

生活からの状況

問題の説明を含む詳細な例。

エーペックスストライカーズのバックエンドを設計していると仮定しましょう。競争的な5対5のヒーローシューターが北米、欧州、アジア太平洋で同時に発表されます。クローズドベータ中に、プレイヤーはゴーストヒットを報告しました—クライアントがローカルでヘッドショットを登録したがサーバーがそれを拒否したため、コミュニティからの反発を引き起こしました。テレメトリにより、TCPのヘッドオブラインブロッキングがピーク時の遅延スパイクを悪化させていることが明らかになり、既存のモノリシックな物理エンジンは可用性ゾーン間で水平方向にシャーディングできませんでした。チームは、20Hzのサーバーチックレートと20ミリ秒未満の入力検証遅延を維持しながら、発表週に100,000の同時マッチをサポートする必要がありました。

解決策A:クライアント補間を使用した中央集権的権威サーバー。

このアプローチは、1つの中央地域でゲーム状態のために単一のRedisキャッシュを維持し、クライアントはスナップショット間を補間します。利点には、一貫性の管理の容易さと簡単な不正検出が含まれます。欠点には、海を越えたプレイヤーに対して受け入れられない遅延(150 ms以上)と地域の障害時の壊滅的な単一障害点が含まれます。

解決策B:ホストマイグレーションを用いた完全分散型P2Pメッシュ。

WebRTCデータチャネルを利用して、この設計は1人のプレイヤーを権威あるホストとして選出し、状態検証のためのブロックチェーンベースの合意を使用します。利点には、最小限のインフラストラクチャコストとデータセンターの障害に対する回復力が含まれます。欠点には、ホスト操作不正の脆弱性、プレイヤーのインターネット品質に基づく予測不可能な遅延、モバイルキャリア間でのNAT横断の信頼性が不可能であることが含まれます。

解決策C:地域権限シャーディングを用いたエッジ検証入力。

この解決策は、ローカルLuaスクリプトに対する移動プライマリを検証するために200以上のエッジロケーションにEnvoyプロキシを実装し、合法なコマンドのみを決定論的なUnityまたはUnreal Engine専用サーバーを実行する地域Kubernetesクラスターにフォワードします。利点には、入力検証のための地理的近接性、水平スケーラビリティに対する水平ポッドオートスケーリング、サーバー権限による不正耐性が含まれます。欠点には、地域間での同期されたDockerイメージの維持における運用の複雑さと、ゾーン間プレイヤー移動中の潜在的な一貫性のエッジケースが含まれます。

どの解決策が選ばれ、なぜですか。

解決策Cが選ばれたのは、ゲームに特有のCAP定理の制約を満たしており、プレイ中の持続可能性のために可用性と分割耐性を優先し、非重要なコスメティックスの最終的一貫性のためにCRDTsを使用し、在庫管理のために分散ロックを使用したからです。このアーキテクチャにより、エーペックスストライカーズは競技の整合性を損なうことなく、発表週末中に99.99%の稼働時間を達成できました。

結果。

実装後のメトリクスは、ゴーストヒット報告が94%減少し、95パーセンタイルユーザーの平均入力遅延が15ミリ秒未満であることを示しました。シャード引き渡しプロトコルは、プレイヤーの切断なしにGCPのus-east1の障害中に50,000のアクティブセッションを正常に移行しました。ただし、チームは、12のクラスター全体でIstioサービスメッシュの構成を管理するために、3人の追加のサイト信頼性エンジニアを必要とする大きなTerraformメンテナンスコストを被りました。

候補者が見落としがちな点


決定論的シミュレーションにおいて、異なるCPUアーキテクチャ(x86対ARM)間で浮動小数点非同期をどのように防ぎますか?

ほとんどの候補者は、すべての場所で倍精度を使用することを提案しますが、ARM NEONとx86 SSEユニットが丸め処理を異なる方法で処理すると、これが失敗することがあります。正しいアプローチは、サブミリメートルの位置データを表すために64ビット整数を使用した固定小数点演算を義務付けることです。さらに、物理エンジンは、すべてのノードで同一にシードされた決定論的擬似乱数生成器(DRNG)を使用する必要があり、オペレーティングシステムによって異なるlibcの実装は避ける必要があります。同期や全体の状態リセットではなく、スナップショット補間を介して状態の調整をトリガーするために、非同期を早期に検出するためのチェックサム検証を固定インターバルで実装します。


すべてのプレイヤーの移動更新に標準データベーストランザクション(ACID)を単純に使用できないのはなぜですか?そのパターンはこれに何が置き換わりますか?

候補者は、多くの場合、ポジショナル更新のたびにPostgreSQLの行レベルロックを提案しますが、これはスケールで書き込み増幅とロック競合災害を引き起こします。正しいパターンは、コマンドパターンを使用し、イベントソーシングを実装することです:クライアントは絶対的な状態ではなく、意図(例:前方に移動する)を送信します。これらの意図は、各シャードのApache Kafkaパーティションに追加され、無状態のゲームサーバーによって冪等性が処理されます。権威ある状態は、不変ログから導出され、タイムトラベルデバッグや完全再生機能を活用できます。Redisにおける物質化されたビューは、プライマリストアのトランザクションオーバーヘッドなしでリードヘビークエリを処理します。


人気のあるシャード(例:有名なプレイヤーのマッチ)が突然1,000倍のトラフィックスパイクを受けたとき、どのようにサンダリングハード問題を対処しますか?

多くの人は、ロードバランサーでのレート制限を提案しますが、これはインフラを保護しますが、ユーザーエクスペリエンスを悪化させます。洗練された解決策は、Cloudflare WorkersやAWS Lambda@Edgeを使用してエッジでトークンバケットアルゴリズムを実装し、ネットワーク更新をフィルターする興味管理アルゴリズムを組み合わせます。プレイヤーの興味のあるエリア(AoI)内にいるプレイヤーのみが状態更新を受け取り、帯域幅を90%削減します。観客モードには、Amazon CloudFrontなどのCDNエッジストリーミングを介したUDPマルチキャストと、シャードCPU負荷なしの放送品質リレーのためのRTMPまたはSRTプロトコルを利用します。クライアントが切断されるのではなく、混雑時にシミュレーションの忠実度を低下させるようにクライアントに信号を送るために、gRPCフロー制御を使用してバックプレッシャー機構を実装します。