JAVA APサーバで構築する堅牢なWebシステム基盤:構成と主要コンポーネントを解説する②。Webサーバについて。
2. Webサーバとは
Webサーバは、インターネットを通じてクライアント(Webブラウザなど)からの要求に応じて、Webコンテンツ(HTMLファイル、画像ファイル、CSSファイルなど)を配信する役割を担います。Webサーバは、クライアントとAPサーバ(アプリケーションサーバ)の間に位置し、様々な機能を提供することでWebシステムの安定性と効率性を向上させます。
2-1.Webサーバの定義と主な機能
静的コンテンツ配信
Webサーバは、HTMLファイル、画像ファイル、CSSファイルなどの静的なコンテンツをクライアントに直接配信する機能があります。静的コンテンツは、Webアプリケーションの見た目や構造を定義するものであり、Webサーバはこれらのファイルを高速かつ効率的に配信します。
クライアントからのリクエスト処理
クライアント(Webブラウザ)からのHTTPリクエストを受け付け、そのリクエストの内容に応じて適切な処理を行います。リクエストの種類(GET, POSTなど)、URL、HTTPヘッダなどを解析し、APサーバに処理を委譲するか、自身でコンテンツを配信するかを判断します。
HTTPプロトコルによる通信
HTTP(Hypertext Transfer Protocol)は、Webサーバとクライアント間の通信で使用されるプロトコルです。Webサーバは、HTTPプロトコルに従ってクライアントからのリクエストを解析し、レスポンスを生成してクライアントに送信します。
2-2.Webサーバ→APサーバへのリクエスト転送
Webサーバは、クライアントからのリクエストを処理する際に、動的なコンテンツ(Webアプリケーションの結果など)の生成が必要な場合、その処理をAPサーバに委譲します。具体的には、以下の手順でリクエストが転送されます。
クライアントからWebサーバにHTTPリクエストが送信される。
Webサーバは、リクエストの内容を解析し、動的なコンテンツの生成が必要であると判断する。
Webサーバは、リクエストをAPサーバに転送する。この際、リクエストの内容やクライアントの情報をAPサーバに伝える。
APサーバは、Webサーバから受け取ったリクエストを処理し、動的なコンテンツを生成する。
APサーバは、生成したコンテンツをWebサーバに返す。
Webサーバは、APサーバから受け取ったコンテンツをクライアントに送信する。
2-3.Webサーバの代表的な製品
Webサーバとして代表的な製品には、ApacheとNginxがあります。
Apache: オープンソースのWebサーバソフトウェアであり、高い安定性と豊富な機能を備えています。
Nginx: オープンソースのWebサーバソフトウェアであり、高いパフォーマンスと柔軟な設定が可能です。
どちらのWebサーバを選択するかは、Webシステムの要件や規模によって異なります。
上記で、Webサーバの定義と主な機能、Webサーバ→APサーバへのリクエスト転送について解説しました。」
『Webサーバのリクエスト処理の流れ、
ちょっと詳細』
Webサーバは、クライアント (Webブラウザなど) からのリクエストを受け取り、以下の工程で処理を行います。
リクエストの受信: クライアントからHTTPリクエストを受信します。
リクエストの解析: リクエスト行、ヘッダー、ボディを解析し、リクエストの種類 (GET, POSTなど)、要求されたリソースなどを特定します。
コンテンツの取得: リクエストされたリソース (HTMLファイル、画像ファイルなど) を取得します。
静的コンテンツ: Webサーバ自身が保持しているコンテンツをそのまま返します。
動的コンテンツ: Webコンテナにリクエストを転送し、処理結果を受け取ります。
レスポンスの生成: HTTPレスポンスを生成します。レスポンスには、ステータスコード、ヘッダー、ボディが含まれます。
レスポンスの送信: 生成したレスポンスをクライアントに送信します。
Webサーバのステータス
Webサーバは、リクエストの処理状況に応じて、様々なステータスを持ちます。主なステータスコードは以下の通りです。
100番台 (情報): リクエストを受け付け、処理を継続中であることを示します。
200番台 (成功): リクエストが正常に処理されたことを示します。
300番台 (リダイレクト): リクエストされたリソースが別のURIに移動していることを示します。
400番台 (クライアントエラー): クライアントのリクエストに誤りがあることを示します。
500番台 (サーバエラー): サーバ内部でエラーが発生したことを示します。
Webサーバのスレッド/ワーカー
Webサーバは、複数の子プロセスまたはスレッドを使用して、複数のリクエストを同時に処理します。
プロセス/スレッド: ApacheなどのWebサーバは、prefork, worker, event などのマルチプロセッシングモジュール (MPM) を使用して、リクエストを処理する方法を決定します。 prefork はプロセスベース、worker と event はスレッドベースです。
ワーカー: worker MPM では、各子プロセスが複数のワーカースレッドを持ち、各スレッドが1つのリクエストを処理します。
ステータス: 各スレッド/ワーカーは、アイドル状態、リクエスト処理中、待機中などのステータスを持ちます。
ThreadsPerChild (Windows): 子プロセスが生成するスレッド数。
MaxClients (Unix): 同時に処理できるリクエストの最大数。
StartServers: サーバ起動時に生成する子プロセスの数。
MinSpareServers/MaxSpareServers: アイドル状態の子プロセスの最小/最大数
WebサーバとWebコンテナの関連
Webサーバは、静的コンテンツを直接処理できますが、動的コンテンツ (サーブレットやJSPなど) を処理するには、Webコンテナが必要です。
WebサーバとWebコンテナは、連携して動作します。Webサーバは、動的コンテンツへのリクエストを受け取ると、Webコンテナにリクエストを転送します。Webコンテナは、リクエストを処理し、結果をWebサーバに返します。Webサーバは、Webコンテナから受け取った結果をクライアントに送信します。
WebサーバのリクエストとWebコンテナの関連 (同期/非同期)
WebサーバからWebコンテナへのリクエスト転送は、同期または非同期で行われます。
同期: Webサーバは、Webコンテナの処理が完了するまで待機し、結果を受け取ってからクライアントにレスポンスを返します。
非同期: Webサーバは、Webコンテナにリクエストを転送した後、すぐにクライアントにレスポンスを返します。Webコンテナの処理結果は、別の方法 (例えば、WebSocketなど) でクライアントに送信されます。
非同期処理を使用することで、Webサーバは、Webコンテナの処理を待機することなく、他のリクエストを処理できるため、パフォーマンスが向上します。
WebサーバとWebコンテナの連携により、Webアプリケーションは、動的なコンテンツを効率的に処理し、ユーザーに提供することができます。