コンテナーが埋め込まれたwarファイルと実行可能jarのデプロイに関するアドバイス


89

Javaスペースでは、現在、Java Webアプリケーションをwarファイル(またはearファイル)の形式でJavaサーブレットコンテナ(またはアプリケーションサーバー)にデプロイするのではなく、アプリケーションを実行可能なjarとしてパッケージ化する傾向があるようです。 jettyのような組み込みサーブレット/ HTTPサーバー。つまり、新しいフレームワークが、アプリケーションをエンドユーザーに配信する方法ではなく、新しいアプリケーションの開発と展開の方法に影響を与えているということです(たとえば、Jenkinsが組み込みコンテナーを使用する理由がわかり、非常に簡単に入手できます。 )。実行可能jarオプションを採用するフレームワークの例: DropwizardSpring Boot、およびPlay (サーブレットコンテナーでは実行されませんが、HTTPサーバーは組み込まれています)。

私の質問は、(この時点まではほとんどStruts2)アプリケーションを単一のTomcatアプリケーションサーバーにデプロイした環境から来ています。組み込みコンテナアプローチの使用を計画している場合、どのような変更、ベストプラクティス、または考慮事項を行う必要がありますか。 ?現在、単一のTomcatサーバーで約10個の自家製アプリケーションが実行されています。これらの小さなアプリケーションの場合、リソースを共有し、1台のサーバーで管理できるのは素晴らしいことです。当社のアプリケーションは、エンドユーザーが環境内で実行できるように配布することを目的としたものではありません。ただし、新しいJavaフレームワークを活用することにした場合、このアプローチを変更する必要がありますか?クラウドデプロイメント(Herokuなど)の使用の増加によって、実行可能jarへの移行が促進されていますか?

Playスタイルのデプロイメントと単一のアプリケーションサーバーでの従来のwarファイルデプロイメントで複数のアプリケーションを管理した経験がある場合は、洞察を共有してください。

回答:


81

興味深い質問です。これはこのトピックに関する私の見解にすぎないので、すべてを一粒の塩で取ってください。サーブレットコンテナと組み込みサーバーの両方を使用して、アプリケーションを展開および管理することがあります。サーブレットコンテナを使用する理由はまだたくさんあると思いますが、今日では人気が低い理由に焦点を当てます。

短いバージョン:サーブレットコンテナは、単一のホストで複数のアプリケーションを管理するのに最適ですが、単一のアプリケーションだけを管理するのにはあまり便利ではないようです。クラウド環境では、仮想マシンごとに1つのアプリケーションが望ましく、より一般的であるように思われます。最新のフレームワークはクラウド互換性を望んでいるため、組み込みサーバーに移行しています。


ですから、サーブレットコンテナを放棄する主な理由はクラウドサービスだと思います。サーブレットコンテナでアプリケーションを管理できるように、クラウドサービスでは仮想マシン、インスタンス、データストレージなどを管理できます。これはもっと複雑に聞こえますが、クラウド環境では、単一のアプリマシンに移行しています。これは、それがあるようにあなたは、多くの場合、全体のマシンを扱うことができることを意味したアプリケーション。各アプリケーションは、適切なサイズのマシンで実行されます。クラウドインスタンスはいつでもポップアップして消えることがあり、スケーリングに最適です。アプリケーションがより多くのリソースを必要とする場合は、より多くのインスタンスを作成します。

一方、専用サーバーは通常強力ですが、サイズが固定されているため、1台のマシンで複数のアプリケーションを実行して、リソースを最大限に活用します。それぞれ独自の構成、Webサーバー、ルート、接続などを備えた数十のアプリケーションを管理するのは楽しいことではないため、サーブレットコンテナーを使用すると、すべてを管理しやすく、正気を保つことができます。ただし、スケーリングは困難です。クラウド内のサーブレットコンテナはあまり役に立たないようです。これらは単一のアプリケーションしか管理しないため、多くの価値を提供することなく、小さなインスタンスごとに設定する必要があります。

また、クラウドはクールで、クラウド以外のものは退屈です(まだ誇大広告を信じている場合)。多くのフレームワークは、デフォルトでスケーラブルにしようとしているため、クラウドに簡単にデプロイできます。組み込みサーバーは展開と実行が高速であるため、合理的なソリューションのように思われます。サーブレットコンテナは通常もサポートされていますが、より複雑な設定が必要です。

他のいくつかのポイント:

  • 組み込みサーバー、フレームワーク用に最適化することも、フレームワークツール(たとえば、プレイコンソールなど)とより適切に統合することできます。
  • すべてのクラウド環境にカスタマイズ可能なマシンイメージが付属しているわけではありません。サーブレットコンテナをダウンロードしてセットアップするための初期化スクリプトを作成する代わりに、クラウドアプリケーションのデプロイ専用のソフトウェアを使用する方がはるかに簡単です。
  • アプリを数回再デプロイするたびにpermgenspaceエラーが表示されないTomcatセットアップをまだ見つけていません。ダウンタイムなしでステージングインスタンスと本番インスタンスをほぼ瞬時に切り替えることができる場合は、組み込みサーバーの(再)起動に少し時間がかかることは問題ありません。
  • 質問ですでに述べたように、エンドユーザーがアプリケーションを実行するだけで非常に便利です。
  • 組み込みサーバーはポータブルで、開発に便利です。今日、すべてが迅速であり、プロトタイプとMVPをできるだけ早く作成し、配信する必要があります。すべての開発者のための環境のセットアップに多くの時間を費やしたいと思う人は誰もいません。

1
答えてくれてありがとう、あなたはいくつかの良い点を作ります。クラウドが推進要因です!私たちの状況では、Google App Engine(Platform as a Service)でアプリケーションだけをデプロイするよりも、Amazon Web Servicesモデル(Infrastructure as a Service)でクラウドサーバーを所有する方が快適だと思いますが、これは古い考え方。つまり、要点:サービスとしてプラットフォームでクラウドを活用することを計画していない限り、単一のサーバーで複数のスタンドアロンJava Webアプリケーションを管理するのではなく、戦争展開が進むべき道です。ご意見ありがとうございます。
Brice Roncace 2014年

3
わずか2cc:プロキシとしていくつかの軽いHTTPサーバーを使用して単一のマシンで複数のjarアプリを実行できます。つまり、nginx、カスタムCDN、ロードバランサー、ファイアウォールなどの一般的なWebトラフィックに追加で使用できます。したがって、検討するのが妥当です大規模なトラフィックを計画するときに使用します(パフォーマンスが向上し、メインアプリを介した静的リソースの場合でもすべてのリクエストを処理します)。
biesior 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.