11

Tomcat を Web サーバーとコンテナーの両方として実行しても問題ないのでしょうか? 一方、webapp をスケーリングする正しい方法は、ポート 80 でリッスンする Apache HTTP を使用し、それを別のポートでリッスンする Tomcat に接続することですか? どちらの方法も受け入れられますか? 現在、何が使われていますか?主な違いは何ですか?ほとんどの主要なウェブサイトはこれについてどのように行っていますか?

ありがとう。

4

2 に答える 2

17

アプリケーション サーバー (Tomcat) の前に Apache (またはその他の Web サーバー) を配置することは、多くの理由から良いことです。

最初の考慮事項は、静的リソースとキャッシングです。

Tomcat はおそらく多くの静的コンテンツも提供するか、動的コンテンツでさえブラウザにキャッシング ディレクティブを送信します。ただし、Tomcat に初めてアクセスするブラウザーごとに、Tomcat は静的ファイルを送信します。リクエストの処理は、Apache よりも Tomcat の方が少しコストがかかるため (Apache は非常に最適化されており、Tomcat で常に利用できるとは限らない非常に低レベルのものを利用しているためです。Tomcat は、Apache が必要とするよりもはるかに多くの情報をリクエストから抽出するためです。 ..)、静的ファイルは Apache でサーバー化した方が良いかもしれません。

ただし、コンテンツの一部を提供するように Apache を構成し、残りまたは URL スペースを Tomcat で提供するように構成するのは困難な作業であるため、Tomcat がすべてを適切なキャッシュ ヘッダーで提供し、その前に Apache がコンテンツをキャプチャして提供する方が簡単です。必要なブラウザにそれをキャッシュし、Tomcat を妨害することなく、同じファイルをヒットする他のブラウザが Apache から直接提供されるようにします。

静的ファイル以外にも、多くの動的なものはミリ秒ごとに更新する必要がない場合があります。たとえば、ホームページによってロードされ、ユーザーにデータベース内のデータの量を伝える json は、ユーザーを怒らせることなく 1 時間ごとに安全に実行できる、何千回も実行される高価なクエリです。したがって、Tomcat は適切な 1 時間のキャッシュ ディレクティブを使用して json を提供できます。Apache は json フラグメントをキャッシュし、それを必要とするブラウザーに 1 時間提供します。それを実装する方法は明らかに他にもたくさんありますが (キャッシング フィルター、クエリをキャッシュする JPA キャッシュなど...)、適切なキャッシュ ヘッダーを送信し、リバース プロキシとして Apache を使用するのは非常に簡単で、REST に準拠し、適切に拡張できます。 .

もう 1 つの考慮事項は、負荷分散です。Apache には優れた負荷分散モジュールが付属しており、アプリケーションを水平方向にスケーリングしたり、クラスターで実行したりできると仮定して、多数の Tomcat インスタンスでアプリケーションをスケーリングするのに役立ちます。

3 番目の考慮事項は、ulrs、ヘッダーなどに関するものです。時々、一部の URL を変更したり、一部のヘッダーを削除または上書きしたりする必要がある場合があります。たとえば、メジャー アップデートの前に、ブラウザが古いデータを使用し続けるのを避けるために、ブラウザのキャッシュを数時間無効にしたり(サーバーを切り替える前に DNS TTL を下げるのと同じ)、古いアプリケーションを別の URL スペースに移動したり、古いアプリケーションを書き換えたりすることができます。可能であれば、新しい URL への URL。web.xml ファイル内のサーブレットを再構成することは可能であり、フィルターは驚くべきことを行うことができますが、URL を解釈するフレームワークを使用している場合は、サイトマップ ファイルまたは類似のものに対して多くの作業を行う必要がある場合があります。

Tomcat の前に Apache または別の Web サーバーを配置すると、mod_rewrite などのモジュールを使用して Apache 構成ファイルのみを変更するのに役立ちます。

そのため、Tomcat の前に Apache httpd を配置することを常にお勧めします。接続処理のわずかなオーバーヘッドは通常、リソースのキャッシュのおかげで回復され、追加の構成作業は、URL を移動したり、いくつかのヘッダーを処理したりする必要があるときに回復されます。

于 2012-09-09T22:16:28.303 に答える
1

それは、ネットワークと、どのようにセキュリティを設定したいかによって異なります。

2 ファイアウォールの DMZ があり、アプリケーションが 2 番目のファイアウォール内にデプロイされている場合、2 つのファイアウォールの間に Apache または IIS インスタンスを配置して、セキュリティを処理し、アプリケーション サーバーへのプロキシ呼び出しを行うことは理にかなっています。Tomcat インスタンスを DMZ に配置することが許容される場合は、自由に配置できます。唯一の欠点は、内部のデータベースにアクセスするには、2 番目のファイアウォールでポートを開く必要があることです。これにより、データベースが危険にさらされる可能性があります。

もう 1 つの考慮事項はトラフィックです。トラフィック、サーバーのサイジング、および可能な負荷分散とクラスタリングについては何も言いません。アプリ サーバーのクラスターの前にあるロード バランサーは、2 番目のファイアウォール内に保持される可能性が高くなります。Tomcat インスタンスはそれ自体でトラフィックを処理できますが、デプロイされているハードウェアとアプリケーションが各リクエストで何を行っているかによって、常にボリューム制限があります。より詳細なアプリケーション固有の情報がなければ、はいまたはいいえの答えを出すことはほとんど不可能です。

サイトで「Tomcat without apache」を検索してください - 以前にも尋ねられました。重複を見つける前に閉鎖することに投票しました。

于 2012-09-09T21:40:06.947 に答える