読者のリクエストに応じて、クラウドテクノロジを使用したサーバーソリューションのトランスポート部分のテストについて説明します。これについては、前の記事で説明しました。 最初に、それが何であるかと、それをテストする理由を少し説明します。 負荷の高いMMOプロジェクト用のサーバーソリューションをリアルタイムで構築することから開発を開始した後、彼は可能な限り多くのクライアントを維持するために、完全に分散したシステムを使用する必要があるという結論に徐々に達しました。 以下に、現在私たちがサーバーソリューションを開発していることに基づいて、これらの論文を示します。
- プロジェクトのトランスポート部分を論理部分とデータから完全に分離
- 特定のプロジェクトに最適なソリューションを作成するための最大のモジュール性
- ソリューションサービスの統合(これを目的とするサービスのいずれかによってコマンドを実行できます)
- 非同期タスク実行
- SQLは永続ストレージ専用です
- NoSQLを使用してライブデータを保存する
- プールシステムの使用(オブジェクトの再利用可能なグループ)
- 処理サービスへのデータバインドなし
今日の既存のソリューションはこれらの原則を部分的にしか使用しておらず、それらに基づいて真にクラウドベースのシステムを構築することは非常に問題が多い。 少なくとも「BigWorld」エンジンを使用してください。これは、システムオブジェクトに関連付けられた動的な浮動ロケーションのシステムを非常に興味深い、私の意見では使用しています。 これは、変化の少ない大きなシームレスな世界に適しています。 しかし、実際には、ペースの速いリアルタイムゲームではうまくいかないことが示されています。 以前に同様のテクノロジーを使用し、それを放棄し、実際のスケーリングに必要であることを確認しました。
- ロジック、トランスポート、およびデータの完全な分離
- 1つのタイプのサービスの統合(動的プール)
そして今、最終的に、クラウドシステムの主要なモジュールの開発が完了したので、これまで1つのチェーンを実際にテストすることにしました。
トランスポート-処理-データ。
輸送サービス
a)顧客を接続する
b)開梱/梱包チーム
c)コマンド転送
仕事サービス
a)論理モジュール(DLL)の接続
b)論理モジュールへのコマンドの転送
c)論理モジュール内のコマンドの処理
d)クエリをSQLおよびNoSQLに送信する
SQLサービス
a)コマンドの受信
b)SQLデータベースクエリの最適化
c)返信を送信する
NoSQLサービス(オブジェクト)
a)NoSQLの要求に応じてオブジェクトを読み取る
b)NoSQLオブジェクトの作成
c)結果を送信する
最初に、テストクライアントはサーバーへの1000の同時接続を開始します。これは、動的スレッドプールによって処理されます。 次に、クライアントごとに異なるランダムな時間間隔で、コマンドがサーバーに送信されます。 サーバーは、トランスポートサービスを介してコマンドを受信し、アンパックして認識し、処理のためにワークサービスに渡します。 ワークサービスは、目的のロジックモジュールにコマンドを送信し、そこで処理されます。 クエリがNoSQLデータベースに送信され、目的のオブジェクトが取得され、そのデータが読み取られ、小さな計算が実行されます。 次に、結果がトランスポートサーバーに返され、クライアントに送信されます。 クライアントからのすべてのクエリの約¼のSQLデータベースアカウントへのクエリ。 したがって、すべての運用データはNoSQLデータベースに保存され、SQLはデータウェアハウスとしてのみ機能します。
コンピューターの機能:
OS-Windows 2008サーバー
RAM-8GB
CPU-i7(8コア)
SQL-MSSQL
すべてのサービスは1台のPCで開始されました。 負荷を増やします。
1つのサービスのテスト結果:
同時接続が行われ
ました-5,000〜10,000個の個別クライアント(各クライアントがパラレルストリームで非同期に1,000クライアントのテストプログラムを10個実行)
NoSQL遅延時間が1ミリ秒を超えない処理要求
の数-1秒
あたり1200
SQL遅延時間が1ミリ秒を超えない処理要求
の数-1秒
あたり500
トランスポートサービス(1インスタンス)の場合、最適な接続数は
10,000です
テスト結果によると、システムが安定して動作し、負荷が増加しても障害がなく、データ処理時間のみが増加することがわかります。 実際の状況では、サービスは個別のPC(分散システム)で起動され、ロードバランサーはリクエストの遅延時間が1ミリ秒を超えないことを監視します。 このテストは総合的なものであり、動的MMOゲームの本格的なクライアント1万台が1台のサーバーでサポートされることを保証するものではありません。 この技術は分散されており、ローカルの高速ネットワークに統合された個々のPCで構成されるコンピューティングクラウドの作成を伴います。 システムは、垂直および水平スケーリングを提供します。
推定によると、
10,000のリアルタイムクライアントを持つMMOゲームの場合、約
10台のサーバーが必要になります
- トランスポート:1-2サーバー
- 計算:3-5サーバー
- NoSQLストレージ:1-2サーバー
- SQLリポジトリ:1サーバー
ですから、キーポイントはゲームオブジェクトのロジックを計算する速度です。
非常に重要です! 高速なデータ処理ロジックを作成します。 私たちは長い間、最適な論理構造を探し、独自のモデルを開発しました。これを
「ゲームオブジェクトの分離計算」と呼び
ます 。 このモデルを使用すると、論理的な衝突を回避し、1つのオブジェクトのロジックの計算を可能な限り簡素化できます。 完全に非同期のプログラミングと遅延プロシージャを使用します。
NDAに署名した後、「直接会う」ことに興味がある人のために、テストおよび管理クライアントを提供できます。
独自のテスト用。
MMOプロジェクトに分散サーバーソリューションを作成して使用します。これにより、将来のサーバークラッシュを回避できます。 すべての質問について-常に助けてください。