web-dev-qa-db-ja.com

組み込みコンテナーを使用したwarファイルと実行可能jarのデプロイに関するアドバイス

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

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

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

81
Brice Roncace

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

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


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

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

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

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

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