20

私は、独自の JVM で顧客ごとに Java アプリケーションを実行するシステムを扱っています。現在、合計で 100 近くの JVM を実行している約 6 台の専用サーバーと、これらの JVM を管理するための一連のカスタム スクリプトがあります。この設定は、この時点で本当に古くなっています。多くの JVM を管理することは監視/管理の悪夢になりつつあり、私たちは常にヒープ サイズの問題に対処しています。より最新のアプローチに移行し、物理マシンごとに 1 つのアプリ サーバーで多数のアプリケーションを実行したいと考えています。ただし、アプリケーションを分離することには、分離という点で明確な利点があります (たとえば、メモリ不足エラーは 1 人の顧客にのみ影響します)。各顧客のソフトウェア スタックには、大きく異なるメモリ要件があります。

私の質問: ここで両方の長所を生かし、複数のアプリケーションを 1 つの JVM (アプリケーション サーバー) で実行しながら、ある程度の分離を維持する方法はありますか? それとも、最近では一連のアプリケーションのメモリ要件を管理する必要があるというのは、単なる現代の現実なのでしょうか? アプリサーバーや Java EE コンテナー (Wildfly や Spring など) 以外に、ここにないソリューションはありますか? このシステムは別の時代からのホールドアウトのようです!

4

4 に答える 4

6

どちらのアプローチにも長所と短所があります。

共有 JVM

  • オーバーヘッドの削減 - JVM のメモリ フットプリント (コア ライブラリなど) を一度だけロードする必要があります。
  • より良いメモリ使用量。Java プロセスは、現在使用されていない可能性のあるヒープ領域のために OS メモリを消費します。

個別の JVM

  • 「貪欲」または「漏れやすい」アプリケーションからの絶縁。
  • 悪意のあるコードからのセキュリティの向上。
  • 更新がより簡単になり、他のアプリをダウンさせることなく 1 つのアプリを更新できます。

全体として、私は包括的なポリシーを設定しません。最初に共有し、そこから拡張するのに適した候補となる小規模/マイクロサービスまたはその他の使用率の低いアプリを探します。

于 2014-10-01T16:10:24.390 に答える