Facebookアプリケーションとクラウドコンピューティングの時代に、大規模なマルチプレイヤーゲームについて少し考え直しています。
既存のオープンプロトコルの上に何かを構築することになっていて、問題の範囲を特定するために、1,000,000人の同時プレーヤーにサービスを提供したいとします。
各プレーヤーに着信メッセージキュー(チャットなど)があり、平均してもう1つの着信メッセージキュー(ギルド、ゾーン、インスタンス、オークションなど)があるとすると、2,000,000のキューがあります。プレーヤーは一度に1〜10個のキューをリッスンします。各キューには、平均して1秒あたり1つのメッセージが含まれますが、特定のキューでは、レートがはるかに高く、リスナーの数が多くなります(たとえば、レベルインスタンスの「エンティティロケーション」キュー)。システムキューの待ち時間が100ミリ秒以下であると仮定しましょう。これは、軽度のアクション指向のゲームでは問題ありません(ただし、QuakeやUnreal Tournamentなどのゲームでは問題ありません)。
他のシステムから、単一の1Uまたはブレードボックスで10,000人のユーザーにサービスを提供することは、合理的な期待であることがわかっています(物理シミュレーションなど、他に費用のかかるものがないことを前提としています)。
したがって、クライアントが接続ゲートウェイに接続し、接続ゲートウェイがメッセージキューサーバーに接続するクロスバークラスターシステムでは、100個のゲートウェイマシンでゲートウェイごとに10,000ユーザーを取得し、100個のキューマシンでキューサーバーごとに20,000個のメッセージキューを取得します。繰り返しますが、一般的なスコーピングのためだけです。各MQマシンの接続数はごくわずかで、各ゲートウェイと通信するには約100です。ゲートウェイの接続数はかなり多くなります。クライアントの場合は10,100+すべてのキューサーバーへの接続です。(これに加えて、ゲームワールドシミュレーションサーバーなどの接続をいくつか追加しますが、今はそれを分離しておくようにしています)
これを最初から構築したくない場合は、既存のメッセージングおよび/またはキューイングインフラストラクチャを使用する必要があります。私が見つけることができる2つのオープンプロトコルはAMQPとXMPPです。XMPPの使用目的は、このゲームシステムに必要なものに少し似ていますが、オーバーヘッドは非常に顕著です(XML、詳細なプレゼンスデータ、およびその上に構築する必要のある他のさまざまなチャネル)。AMQPの実際のデータモデルは上記で説明したものに近いですが、すべてのユーザーは大規模なエンタープライズタイプの企業のようであり、ワークロードはリアルタイムのゲーム更新ではなくワークフローに関連しているようです。
誰かがこれらのテクノロジーまたはその実装について、あなたが共有できる日中の経験を持っていますか?