7

現在 RAM に制限されているアプリケーションをスケールアップするために、Terracotta を評価しています。これは共同フィルターであり、ユーザーごとに約 2 キロバイトのデータを保存します。Amazon の EC2 を使用したいのですが、これは RAM が 14GB に制限されていることを意味します。これにより、約 700 万ユーザーというサーバーあたりの効果的な上限が得られます。これを超えてスケ​​ーリングできる必要があります。

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

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

4

1 に答える 1

4

答えは、これに対する資格のあるイエスだと思います。Terracotta では、単一の JVM のサイズよりも大きいクラスター化されたヒープを操作できますが、これは最も一般的なユース ケースではありません。

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

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

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

数字の観点から見ると、30 GB のデータのインデックス作成が可能であるため、これはハード リミットに近くありません。

于 2008-09-22T21:25:37.423 に答える