💻
Apacheとはなんぞや
Apache httpd server
背景
初めてインフラの現場で働くことになったので自分なりにApacheについて勉強してまとめてみた
1. Apacheの基本
Apacheとは?
- OSとアプリケーションソフトウェアの中間に位置するミドルウェアの一種。
- 正式名称は「Apache HTTP Server」。
- オープンソースソフトウェア(OSS)として開発されている、世界的に広く使われているWebサーバーソフトウェア。
Webサーバーの役割
- 基本動作: ブラウザからのリクエスト(「このページを見たい」)に対し、サーバーに保存されているWebコンテンツ(HTML、CSS、画像、PDFなど)を返す役割を持つ。
- ソフトウェアとハードウェア: Apache自体は「Webサーバー機能を提供するソフトウェア」。このソフトウェアが動いているコンピュータ全体を指して「Webサーバー」と呼ぶことも多い。
-
分かりやすい例え: レストランのウェイター。
- お客さん(ブラウザ)の注文(リクエスト)を聞き、厨房(サーバー内のファイルやプログラム)から料理(Webコンテンツ)を運んで提供する。
2. Apacheの動作モデル (MPM)
Apacheがリクエストをどのように処理するかの方式。性能に大きく影響する。
重要:プロセスとスレッドの違いを理解する
この2つの違いを理解することが、動作モデルを理解する鍵となる。
プロセス (Process)
- 概要: OS上で実行中のプログラムそのもの。OSからメモリ空間などを割り当てられた、独立した一つの「作業単位」。
-
例え: 1軒の独立した家。
- 住所(プロセスID)や壁(独立したメモリ空間)があり、他の家とは完全に分離されている。
- マルチプロセス: 複数の独立した家が建っている状態。
スレッド (Thread)
- 概要: 1つのプロセスの中で、並行して処理を行うための、さらに小さな作業単位。
-
例え: 家の中にいる人。
- 1軒の家(プロセス)の中に複数人(スレッド)が住んでいる。
- 全員が同じ台所や寝室(メモリ空間を共有)して作業を行う。
- マルチスレッド: 1つの家の中で、料理する人、掃除する人、洗濯する人…と、複数の人が同時に異なる作業を進めている状態。
Apacheの主な動作モデル
このプロセスとスレッドの考え方を元に、Apacheは以下のような動作モデルを持つ。
prefork
モデル (マルチプロセス方式)
- 動作: 1つのリクエストに対し、1つのプロセスを割り当てる。
- 例え: お客さん1人に対して、家を1軒まるごと用意するイメージ。
- 長所: 構造がシンプルで、一つのプロセスで問題が起きても他に影響しにくく、非常に安定している。
- 短所: プロセスはメモリ消費が大きいため、同時接続数が増えるとメモリを大量に消費する。
worker
/ event
モデル (マルチスレッド方式)
- 動作: 1つのプロセスが内部に複数のスレッドを持ち、複数のリクエストを効率的に処理する。
- 例え: 1軒の家に複数の店員(スレッド)がいて、複数のお客さん(リクエスト)を同時にさばくイメージ。
-
長所:
prefork
に比べてメモリ消費が少なく、より多くの同時接続に対応できる。 - 短所: メモリを共有しているため、一つのスレッドの問題がプロセス全体に影響する可能性がある(近年は安定性も向上している)。
3. Apacheの長所と短所、適した用途
長所・強み
-
機能の豊富さとカスタマイズ性:
- モジュールシステム: 必要な機能を部品(モジュール)として自由に追加・削除できる。
- .htaccessファイル: ディレクトリ単位で、アクセス制御やリダイレクト設定などを非常に細かく、動的に変更できる。レンタルサーバーで広く採用されている理由の一つ。
-
動的コンテンツとの連携:
- PHPなどのサーバーサイドプログラムと連携し、リクエストに応じて内容が変わる動的コンテンツの処理が得意。
-
クロスプラットフォーム:
- Linux、Windows、macOSなど、特定のOSに依存せず動作する。
-
実績と安定性:
- 長い歴史を持ち、世界中で利用されてきた豊富な実績と情報量がある。
短所・不向きな用途
-
大量の同時接続:
- 特に
prefork
モデルでは、同時接続数が増えるとメモリを大量に消費するため、SNSのように常に多数の接続を維持するようなサイトには不向き(C10K問題)。
- 特に
適した用途
- 個人サイトや企業のブログ・Webサイト(特にWordPressを利用する場合)。
- 動的な処理が多く、柔軟な設定が求められるWebアプリケーション。
4. 主な競合:Nginx
- 現在、Apacheと並んで広く使われているWebサーバーソフトウェア。
- 大量の同時接続処理に非常に強く、メモリ消費が少ないのが最大の特徴。
- 静的コンテンツの高速配信を得意とする。
- 近年では、お互いの長所を活かすためにNginxとApacheを連携させて使う構成も人気。
参考文献
Discussion