Terracotta を使用して RAM を大量に使用するアプリケーションを拡張できますか?

StackOverflow https://stackoverflow.com/questions/117455

質問

現在 RAM に制限されているアプリケーションをスケールアップするのに役立つ Terracotta を評価しています。これは協調的なフィルターであり、ユーザーごとに約 2 キロバイトのデータを保存します。Amazon の EC2 を使用したいのですが、RAM は 14GB に制限されており、サーバーあたりの実質的なユーザー数の上限は約 700 万人になります。これを超えてスケ​​ールできる必要があります。

これまでの私の読書に基づいて、Terracotta は各サーバーで利用可能な RAM よりも大きなクラスター化ヒープを持つことができると考えられます。各サーバーが 14 GB しかサポートしない場合、30 GB 以上の効果的なクラスター化ヒープを持つことは可能でしょうか?

ユーザーごとのデータ (大部分は浮動小数点数の配列) は非常に頻繁に変更され、場合によっては 1 分間に数十万回も変更されます。これらの変更が発生した瞬間に、すべての変更をクラスター内の他のノードに同期する必要はありません。一部のオブジェクトフィールドのみを定期的に同期することは可能ですか?

役に立ちましたか?

解決

これに関しては、答えは完全に「はい」だと思います。Terracotta を使用すると、単一の JVM のサイズより大きいクラスター化ヒープを操作できますが、これは最も一般的な使用例ではありません。

ただし、a) ワーキング セットのサイズと b) データ トラフィックの量に留意する必要があります。a) の場合、作業を実行するために常にメモリ内に存在しなければならないデータ セットがあり、その作業セット サイズ > ヒープ サイズの場合、明らかにパフォーマンスが低下します。b) の場合、クラスター化ヒープに​​追加/更新された各データをサーバーに送信する必要があります。Terracotta は、pojo グラフの細かいフィールドを変更する場合に最適です。大きな配列を操作すると、Terracotta の機能を最大限に活用できません (これは、人々が時々そのように使用しないということではありません)。

大量のガベージを作成している場合は、Terracotta メモリ マネージャーと分散ガベージ コレクターがそれに対応できる必要があります。データ量がそこで利用可能な帯域幅を超えているかどうかは、試してみないとわかりません。

複数のサーバーを実行し、データがサーバーごとにパーティション化されているか、ある程度の参照の局所性がある場合、アプリケーションは非常に大きなメリットを得ることができます。この場合、ヒープ内の 1 つのサーバーのパーティションのデータのみが必要で、残りのデータはメモリにフォールトされる必要はありません。もちろん、他のサーバーがダウンした場合、フェイルオーバー/可用性のために必要な場合は障害が発生します。これが意味するのは、パーティション化されたデータの場合、すべてのノードにブロードキャストするのではなく、トランザクションをサーバーに送信するだけであるということです。

数字の観点から見ると、30GB のデータにインデックスを付けることができるため、これはハードリミットに近いものではありません。

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