質問

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

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

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

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

役に立ちましたか?

解決

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

プロジェクトダークスター 使いやすさと複雑さの側面でこれを見事に試みましたが、(当然のことながら)スケーリングではないことがわかりました。

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

特にアプリケーションドメインがリアルタイムゲームでない場合は、すぐに正しいものになる限り、古いデータを操作しているかどうかを気にしないことがよくあります。そのような場合、Memcacheのような単純なキャッシュシステムは素晴らしいです。同様に、より多くの正しさが必要であるが、スループットをそれほど心配する必要がない場合、ヘーゼルキャストのようなもの(別の答えで言及)は素晴らしいかもしれませんが、ロードバランスを必要とするほど大きいほとんどのオンラインゲームでは、何千もの操作/ SEC」は十分ではありません。

一部のMMOテクノロジーは、地理的に分割することでアプリケーションを配布しようとする試みを行います。つまり、実際にはあまり共有された状態がありません。ゲームの世界とフィクションで意味をなさないためにこのスキームが必要です。

別のアプローチは、サービスごとに分割し、お気に入りの既製のRPCアプローチでほとんどのサービスを実装することです。これにより、サービスが独立している場合は非常に簡単にスケーリングできますが、サービス間の依存関係により、正方形に戻ります。

他のヒント

見て ヘーゼルキャスト. 。これは、Javaのオープンソース、非常にスケーラブルなデータ配布プラットフォームです。 Hazelcastは、クラスターメンバー間で共有される分散マップを提供します。データを簡単に保存できます。非常に使いやすいです。 ClassPathにHazelcast.jarを追加するだけです。サーバーをインストールする必要はありません。

私が使う Microsoft HPC, 、ゲーム用ではありません。セットアップと使用が非常に簡単です。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top