4

最適化した後でも1台のサーバーを圧倒することが保証されているアプリケーションがあるとしましょう。状態を維持しながら、Webアプリケーションを複数のサーバーに分割できるようにするテクノロジーはありますか?

たとえば、複数のプレーヤーがいるオンラインゲームを考えてみましょう。通常、World of Warクラフトには複数のサーバーがあり、それぞれに独自のゲーム状態があります。私が探しているのは、このゲームの状態を複数のサーバー間で共有できるようにするものです。

編集:これはWebアプリケーション用であるため、プラットフォームは実際には重要ではありません。したがって、バックエンドはそれほど重要ではありません。ただし、RailsとJavaは可能性があります。

また、WoWはほんの一例であり、私はそのようなテクノロジーに興味があります。大規模なゲームはそれに適したアプリケーションになります。

4

4 に答える 4

2

リアルタイムオンラインゲームのような低遅延、高スループットのインメモリアプリケーションには、少なくとも任意のミドルウェアの一部としては、実際には何もありません。

Project Darkstarは、使いやすさと複雑さの面でこれに見事な試みをしましたが、(当然のことながら)スケーリングしていないことがわかりました。

最終的には、普遍的に適用できる解決策がない場合、それは難しい(手に負えないわけではありませんが)問題です。特に、古いゲームデータに基づいて行動する必要があることと、共有データを絶えず交換する必要があることとの間には、トレードオフが生じる可能性があります。正確性の欠如と複雑さの指数関数的成長...あなたの毒を選んでください。

特にアプリケーションドメインがリアルタイムゲームでない場合は、データがすぐに正しくなる限り、古いデータを使用していてもかまわないことがよくあります。このような場合、memcacheのような単純なキャッシュシステムが最適です。同様に、より正確にする必要があるがスループットについてそれほど心配する必要がない場合は、Hazelcast(別の回答で言及)のようなものは素晴らしいかもしれませんが、負荷分散を必要とするほど大きいほとんどのオンラインゲームでは「数千の操作/秒」は十分ではありません。

一部のMMOテクノロジーは、アプリケーションを地理的に分割して分散しようとします。つまり、共有状態はほとんどなく、ゲームの世界やフィクションでこのスキームを理解する必要があります。

もう1つのアプローチは、サービスごとにパーティションを作成し、ほとんどのサービスをお気に入りの既製のRPCアプローチで実装することです。これにより、サービスが独立している場合は非常に簡単に拡張できますが、サービス間の依存関係があると、すぐに元に戻ります。

于 2010-06-28T10:50:18.540 に答える
1

Hazelcastをご覧ください。これは、Java用のオープンソースで拡張性の高いデータ配布プラットフォームです。Hazelcastは、クラスターメンバー間で共有される分散マップを提供します。データを簡単に保存できます。とても使いやすいです。クラスパスにhazelcast.jarを追加するだけです。サーバーをインストールする必要はありません。

于 2010-06-17T13:41:02.963 に答える
0

私はMicrosoftHPCを使用していますが、ゲームには使用していません。セットアップと使用は非常に簡単です。

于 2010-06-15T13:36:44.093 に答える
0

あなたはあなたのプラットフォームについて言及していません。Javaの場合はテラコッタがあります

于 2010-06-15T13:37:06.387 に答える