Apacheの構造
- Apacheは高機能と高パフォーマンスを同時に実現するため、モジュール構造を採用している。
- モジュールとは、ある機能を実現するためのソフトウェア。
- プログラム本体に組み込んだり、交換したりが可能な小さなプログラムのかたまり。
- 2種類のモジュール(MPMと一般的な機能モジュール)
- コア機能のモジュール:MPMという
- 一般的な機能モジュール
MPM:マルチプロセッシングモジュール
- モジュールの機能をサーバの基本機能にまで拡張したのが、マルチプロセッシングモジュール(MPM)
- コア機能(MPM)の役割
- ネットワークポートをリスニングし、リクエストを受け付け、受け付けたリクエストを子プロセスやスレッドに割り当てるなどの役割を担う。
- MPMは上記のコア機能をOSの特性やサーバ環境に合わせて交換可能としている。
MPMの種類
- worker
- マルチプロセス、マルチスレッドに対応。
- 各プロセスに対し決められた数のスレッドを用意する。
- スレッド動作はリソースあたりの処理能力がプロセス動作よりも高くなり、一般的に性能を向上させる。
- prefork(デフォルト)
- あらかじめhttpd子プロセスをいくつか生成してクライアントからの要求を処理する。
- マルチスレッドではなく、マルチプロセスでのみ動作する。
- perchild(Apache 2.2で廃止)
- マルチプロセス、マルチスレッドに対応。
- プロセスそれぞれに個別のユーザIDを割り当てることで可溶性を高めることが出来る。
- 開発途中だったが、Apache 2.2で廃止
- event(Apache 2.2より)
- スケーラビリティに優れたMPM
- Worker MPMのようなマルチスレッド処理が可能
- Keep-Aliveリクエスト処理に、コネクションを処理するスレッドとは別のスレッドを割り当てることが可能。
- 上記の理由で、大規模な用途にも対応可能。
- Apache 2.2 までのevent MPMは評価用で安定して利用できなかったが、Apache 2.4で改善されている。
記事を書いた理由:メモ
- Apache、Nginxなど様々なWebサーバ用OSSがある。
- Apacheの構造について簡潔に記録しておきたかったのが理由です。
参考
- 本:サーバ構築の実際が分かる Apache[実践] 運用/管理