Glassfish / JBoss / TomcatのフロントエンドとしてApacheを実行することは本当に必要ですか?


14

私は主にJava開発者であり、開発者とシステム管理者の格差にまたがる質問があります。

数年前、Tomcatをアプリサーバーとして実行するのが斬新だったとき、Apacheを使用するのが慣習でした。私が理解しているように、これは次の理由で行われました。

  1. Javaは「遅い」と見なされており、Apacheが静的コンテンツを直接提供することは役に立ちました。
  2. Tomcatは、ルートとして実行しない限り、ポート80/443をリッスンできませんでした。これは危険でした。

Javaはもはや遅いとは見なされず、Apacheをミックスに追加することが実際にスピードアップに役立つとは思わない。

ポートの問題に関しては、最近ではアプリサーバーをポート80/443に接続するより簡単な方法がおそらくあります。

私の質問は、最近、ApacheでJava Webappsを開発することには本当に利点があるのでしょうか?もしそうなら、Apacheはまだ行く方法ですか?Nginxを見る必要がありますか?必要であれば、Tomcatの代わりにGlassfishを使用しています。

回答:


8

ほとんどの人は、静的ファイルが原因で、前もって何かが必要だと言うでしょう。

これは、次の理由でやや馬鹿げています。

  • APRでApacheと同じIOを使用するようにTomcatを構成できます
  • とにかくCDN(コンテンツ配信ネットワーク)を使用する必要があります。

負荷分散とフェイルオーバーの処理にtomcat / jetty / jbossの前に何かが必要な本当の理由。

... Tomcatエンジンは生態圏全体のアキレス腱です...」という言葉を聞かないことをお勧めします。


Adam、StackOverflowからServerfaultにストーカーしてくれますか?:-)私はあなたの応答に同意します。振り返ってみると、実際の状況を反映するために質問をより適切に表現する必要がありました。DBはほとんどすべてのページヒットに関与しているため、静的コンテンツはほとんどありません。現時点(非常に初期のスタートアップの調査)では、ロードバランシングは必要ありませんが、幸運なことに、今後は必要になります。
カフェイン

@Caffeine Coma私は同じ船に乗っており、私たちは同じ技術を使用しているようです。ところで、Nginx + Tomcatを使用しています。
アダム・ゲント

4

アプリのエコシステムに依存します。イントラネット環境では、おそらくTomcatの前には何も必要ありません。

公共サービスとしてインターネット上で単独である場合、それは依存します。Apacheはmod_securityのようなモジュールを提供するので便利です。しかし、Apache(またはngix)の構成に精通していない場合は、構成ミスによるさらなる攻撃や障害点にさらされる可能性があります。

前のApacheは、webappをアップグレードして再起動を待つ必要がある場合に、停止ページを提供するのに役立ちます。しかし、再起動がまれであるか、タイミングが正しく設定されている場合は、Tomcatをスタンドアロンにするもう1つの理由です。

Tomcat FAQも、これに関するいくつかの追加のポイントに対処しています:http : //wiki.apache.org/tomcat/FAQ/Connectors#Q3


1

Apacheは、マルチプロセスの性質上、静的コンテンツを提供するのに適した候補ではありません。Nginxは、非同期I / Oを使用して要求を処理するため、より適しています。最新のTomcatでは、非同期I / O(Java用語ではNIO)も使用できます。たとえば、tomcat-nativeTomcatで非同期I / Oを使用するには、パッケージをFedoraにインストールする必要があります。


とにかく、私はあまり静的なコンテンツを提供していません。私の質問は本当にです:Apache / Nginxのフロントエンドに煩わされる必要がありますか、それともGlassfishをそのまま使用する必要がありますか?ありがとう。
カフェイン

実際、サーバーが静的I / Oクライアントを使用しない場合、接続が遅い非同期I / Oクライアントがコンテンツを完全に取得するまでサーバーの実行スレッドをブロックするため、問題は単なる静的コンテンツの提供よりも広範です。そのため、AIOを搭載したフロントエンドを使用することは、いずれの場合でも利点です。しかし、すでに述べたように、TomcatにはAIO機能があります。在庫のGlassfishパッケージにはすでにAIOライブラリが含まれていると思うので、おそらく気にする必要はありません。
アレックス

apacheは必ずしもマルチプロセスではありません。mpm workerはしばらくの間httpd.apache.org/docs/2.2/mod/worker.htmlからリリースされており、マルチスレッドWebサーバーの運用環境で使用しています。
-dialt0ne

まあ、マルチスレッドApacheはまだ同期I / Oを使用しています。プロセスではないスレッドが遅いクライアントによってソケットでブロックされる場合、大きな違いは見られません。Nginxは、シングルスレッドシングルプロセスの有限状態マシンとして設計されています(シングルプロセスである必要はありませんが、プロセスの数はマルチコアシステムのCPUコアの数に設定する必要があります)。
アレックス

1

驚くべき、これらの答えのいくつか-あなたの人の誰もが実際に高性能の多層およびマルチサーバーTomcatでバックアップされたウェブサイトを実行していますか?OP、Tomcatが「遅い」わけではないという元々の仮定...わあ。Tomcatエンジンは、エコ圏全体のアキレス腱です。

はい、Apacheを前面に配置する必要があります。まず、mod_rewrite(TomcatにUrlRewriteFilterを既に実装していますか?)、およびWebサーバーの保護を非常に重要にするhtaccessファイルを提供します。Apacheはその背後にあるノードTomcatの負荷バランスにあなたを有効にすることができ、サーブあなたの静的コンテンツもはるかに迅速かつ取得、より良いあなたは、Java以外でそれの要求パイプをオーバーロードしていないので、Tomcatの外のパフォーマンスを(JS / CSS / HTML / JPGは/ etc。)もの。(ハードウェアLBでオフロードしない場合)ApacheでSSLを簡単にオフロードでき、Javaキーストアと呼ばれるそのようなトラブルに対処する必要さえありません。非常に多くの勝利があります-通常、平均的なJavaコーダーでは大量のトラフィックを処理できないため、Javaの貧弱な小さな脳を過剰に実行しないようにmod_jkをバックエンドノードに調整できます。

Apache(またはnginxなど-しかし、ApacheのパフォーマンスはとにかくTomcatを凌willするので、それは問題ではない)をTomcatの前で言うことは誰にも注意してください。


4
あなたは非常に腹を立てます。
カフェイン

人々がServerFaultに対してこのような悪いアドバイスを提供することにうんざりしているだけです。
トロイエンゲル

そのような主張を裏付けるために、数字なしで暴言する人には注意してください。サイトの大部分が動的な場合、直接Tomcatはより高速になります。最近のトラフィックの多いサイトのほとんどは、静的コンテンツにCDN(コンテンツ配信ネットワーク)を使用しているため、Apacheを使用して静的コンテンツを提供する理由はありません。とは言っても、負荷分散/ SSLにはまだ何か前のものがあるはずです。
アダム・ゲント

0

Tomcatを使用しているときにrootにならずに特権ポートをバインドするだけの場合は、Apache httpdを使用する必要はありません。Tomcatはデフォルトでjsvcコンパイルする必要があります。

jsvcTomcatをサービスとして起動するJavaサービスラッパーです。このサービスはルートとして起動しますが、Tomcatは通常のユーザーとして起動します。そのため、Tomcatを特権ポートにバインドできます。

Glassfishについては知りませんが、解決策が存在することを確認してください。存在しない場合は、確実にポート転送技術(iptablesなど)を使用できます。

アプリケーションサーバーの前にWebサーバー(Apache httpdなど)を配置する選択は、負荷分散、クラスタリング、またはWebサーバーのみで静的リソースを提供し、アプリケーションサーバーで動的リソースを提供するための選択だと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.