アプリレベルのクラスタリングにはどのようなテクノロジーが存在しますか?
-
27-09-2019 - |
質問
最適化後でも1つのサーバーを圧倒することが保証されているアプリケーションがあるとしましょう。状態を維持しながら、複数のサーバーにWebアプリケーションを分割できるようにするテクノロジーはありますか?
たとえば、複数のプレーヤーのオンラインゲームを考えてみましょう。通常、World of Warクラフトには、それぞれが独自のゲーム状態を持つ複数のサーバーがあります。私が探しているのは、このゲーム状態を複数のサーバー間で共有できるようにするものです。
編集:これはWebアプリケーション用であるため、プラットフォームは実際には重要ではありません。したがって、バックエンドはそれほど重要ではありません。ただし、RailsとJavaは可能性があります。
また、WoWは単なる例でした。私はそのようなテクノロジーに興味があります。大規模なゲームはそれに適したアプリケーションになるでしょう。
解決
少なくとも任意のミドルウェアとしてではなく、リアルタイムのオンラインゲームのような低レイテンシ、高スループットのインメモリアプリケーションのために実際には何もありません。
プロジェクトダークスター 使いやすさと複雑さの側面でこれを見事に試みましたが、(当然のことながら)スケーリングではないことがわかりました。
最終的には、普遍的に適用可能であることに近い解決策がない場合、それは難しい(扱いにくいわけではありませんが)問題です。特に、一方では、共有データを絶えず交換する必要があることに対して、古いゲームデータに基づいて行動する必要があるかどうかのトレードオフがある可能性があります。正確性の欠如と複雑さの指数関数的な成長...あなたの毒を選んでください。
特にアプリケーションドメインがリアルタイムゲームでない場合は、すぐに正しいものになる限り、古いデータを操作しているかどうかを気にしないことがよくあります。そのような場合、Memcacheのような単純なキャッシュシステムは素晴らしいです。同様に、より多くの正しさが必要であるが、スループットをそれほど心配する必要がない場合、ヘーゼルキャストのようなもの(別の答えで言及)は素晴らしいかもしれませんが、ロードバランスを必要とするほど大きいほとんどのオンラインゲームでは、何千もの操作/ SEC」は十分ではありません。
一部のMMOテクノロジーは、地理的に分割することでアプリケーションを配布しようとする試みを行います。つまり、実際にはあまり共有された状態がありません。ゲームの世界とフィクションで意味をなさないためにこのスキームが必要です。
別のアプローチは、サービスごとに分割し、お気に入りの既製のRPCアプローチでほとんどのサービスを実装することです。これにより、サービスが独立している場合は非常に簡単にスケーリングできますが、サービス間の依存関係により、正方形に戻ります。
他のヒント
見て ヘーゼルキャスト. 。これは、Javaのオープンソース、非常にスケーラブルなデータ配布プラットフォームです。 Hazelcastは、クラスターメンバー間で共有される分散マップを提供します。データを簡単に保存できます。非常に使いやすいです。 ClassPathにHazelcast.jarを追加するだけです。サーバーをインストールする必要はありません。
私が使う Microsoft HPC, 、ゲーム用ではありません。セットアップと使用が非常に簡単です。
あなたはあなたのプラットフォームについて言及していません。 Javaにはあります テラコッタ