2010-12-31 10 views
14

良い理由があると思いますが、同じ物理サーバー上に同じWebアプリケーションを持つインスタンスを5つ置くことがあるのはなぜか分かりません。なぜ同じサーバー上に複数のアプリケーションサーバーインスタンスを使用するのですか

マルチプロセッサアーキテクチャの最適化とは関係がありますか? JVMなどの最大許容ラム制限はありますか?

+3

「私たち」は誰ですか?私は前にそれを見たことがない、それは意味をなさない。 – skaffman

+1

月と99あたり1000万人のユニーク訪問者と有名な電子商取引のウェブサイト。89%の可用性、そして私が見た他のもの –

+0

別のアプリケーションサーバー(したがってJVM)上で実行されているWebアプリケーションが全く同じ5つのインスタンスがあるとしますか?これらはすべて仮想マシンで実行されていますか? –

答えて

17

うーん...長い時間の後、私は再びこの質問を見ています:)

まあ、複数のJVMインスタンスを単一のマシンには、問題の多くを解決します。 JDK 1.7が登場しましたが、JDK 1.3または1.4または1.5を使用して多くのレガシーアプリケーションが開発されました。それでもなお、JDKの大部分はそれらの間で分かれています。あなたの質問に今

  1. Garbage collection inefficiencies:ヒープサイズが成長するにつれ、ガベージコレクションサイクル:

    歴史的に、システムアーキテクトは、単一のボックスで複数のJVMを展開することで対処してきた三つの主要問題があります特にメジャーなコレクションの場合、シングルスレッドGCのおかげで、処理に大幅な遅延が発生する傾向がありました。複数のJVMは、一般的にヒープサイズを小さくし、GCサイクル中にある程度の並行処理を可能にすることでこれと戦っています(例えば、4つのノード、GCに入るとき、

  2. Resource utilization:古いJVMは4つのCPUを超えて効率的に拡張できませんでした。答え?ボックス内の2つのCPUごとに別々のJVMを実行します(もちろん、アプリケーションによっては走行距離が異なる場合があります)。

  3. 古いJVMは、32ビットの最大値を超えてヒープサイズを割り当てることができませんでした。繰り返しになりますが、複数のJVMを使用すると、リソース使用率を最大限に高めることができます。

  4. Availability: 1つのボックスで複数のJVMを実行することがある最終的な理由の1つは、可用性のためです。この習慣がハードウェアの障害に対処していないのは事実ですが、アプリケーションサーバーの単一インスタンスでの障害に対処しています。 (http://www.theserverside.com/discussions/thread.tss?thread_id=20044

    から撮影

私はほとんどのWebLogicを見てきました。これはあなたを助ける

http://download.oracle.com/docs/cd/E13222_01/wls/docs92/perform/WLSTuning.html#wp1104298

希望:ここでは、さらに読書のためのリンクです。

+0

ありがとう。私の例ではweblogicだった;) –

6

あなたはアプリケーションのクラスタリングを指していると思います。

AFAIK、JVMのガベージコレクションには大きな問題がありますが、私は確かにplaying around with the GC algorithm and parametersでダメージを最小限に抑えることができます。さらに、クラスタ化されたアプリケーションには単一障害点がありません。 1つのノードがダウンすると、残りのノードはクライアントにサービスを提供し続けることができます。これは、「メッセージベースのアーキテクチャ」がスケーラビリティに適している理由の1つです。各要求はメッセージにマップされ、メッセージはクラスタ内の任意のノードによって取得されます。

あなたのアプリケーションが残念なことにsynchronizedキーワードを賢明に使用する場合、もう1つの点は複数の要求を同時に処理することです。現在、多くの共有状態(残念なことに)を持つレガシーアプリケーションがあるため、すべてのディスパッチ作業を行う中央ディスパッチユニットを使用して約20個のJVMプロセスを生成することによって、同時リクエスト処理が行われます。 ;-)

2

NUMA地域ごとに少なくともJVMを使用することをお勧めします。単一のJVMが複数のNUMA領域(多くの場合単一のCPU)を使用すると、別のCPUのメインメモリにアクセスするコストが大幅に増加するため、パフォーマンスが大幅に低下する可能性があります。

また、複数のサーバーを使用すると、Javaまたはお使いのアプリケーションサーバーの異なるバージョンを使用し

  • にあなたを許可することができます。
  • 干渉する可能性のあるさまざまなアプリケーションを隔離します(可能性はありません)。
  • サービス間のGC休止時間を制限します。

編集:これは歴史的な可能性があります。過去に別々のJVMを使用する理由はいくつもあるかもしれませんが、それらが何であるか分からないので、それらがまだ適用されているかどうか分からず、そのまま残す方が簡単かもしれません。

1

複数のインスタンスを使用する追加の理由は、保守性です。例えば

あなたはリリース時にアプリケーションサーバーの再起動を行う必要があるときに、各アプリケーションのためのアプリケーションサーバーの別々のインスタンスを持つ複数の顧客のためのあなたの複数の異なるアプリケーションは、生活が少し楽にできるかどうか。

0

平均的な構成ホストがあり、Web /アプリケーションサーバーの単一インスタンスがインストールされているとします。今度はアプリケーションが普及し、ヒット数が2倍に増えます。あなたは今何をしていますか?

同じ構成の物理サーバーをもう1台追加し、アプリケーションをインストールしてこれら2つのホストの負荷分散を行います。

これはアプリケーションの寿命を延ばすものではありません。あなたのアプリケーションはより普及し続け、それゆえそれをスケールアップする必要があります。あなたの戦略は何でしょうか?同じ構成

  • の複数のホストを追加する

    • キープは、あなたがより論理的なアプリケーションサーバあなたは遠くに行くオプション

  • を作成することができ、より強力なマシンを購入しますか?それがあること来るどうやら

    あなたは、実際のハードウェアコストlike-要因が関与しますコスト分析、これらのサーバーを管理するコスト(データセンターに占める電力コスト、スペース)を行いますなど

    、決定はあまり簡単ではありません。また、ほとんどの場合、より強力なマシンを使用する方がコスト効果が高くなります。

    関連する問題