Apacheとは
Apacheとは、Apacheソフトウェア財団が開発・管理するWWWサーバで、正式名称はApache HTTP Serverである。WWWサーバとしては、デファクトスタンダードで、1990年代後半からはインターネット上でもっとも利用されるWWWサーバソフトウェアとして、常にトップを維持している。LinuxだけでなくUnix、Windows、Mac OS Xなど、ほとんどのプラットフォーム上で動作する。
Apacheモジュール
Apacheは、ソフトウェアの中核となるCoreと呼ばれるコードに、拡張モジュールを追加することで動作する。モジュールは、コンパイル時の指定でApacheそのものに組み込んでしまうこともできる。しかし、Red Hat Enterprise Linuxなどの多くのディストリビューションでは、モジュールをApache本体とは別の機能毎のファイルで用意している。この場合には、設定ファイルにどのモジュールを使うかを記述することで、必要に応じてモジュールを読み込む。このような形式を、ダイナミックリンクオブジェクト(DSO; Dynamic Link Object)と呼ぶ。
一般的に、モジュールはコンパイル時に組み込んだ方が性能は高くなる。DSOを利用するときに比べ、モジュールを読み込むオーバーヘッドがかからないためである。しかし、モジュールを追加するためには、Apacheを再コンパイルしなければならないという欠点がある。
Apacheモジュールは、Apache本体とは独立して開発することができる。そのため、Apacheソフトウェア財団以外が開発したモジュールも多く存在する。
ApacheとWebアプリケーションサーバ
Apacheのモジュールを自由に開発し追加することができるため、Webアプリケーションの開発を行うための様々な方法が開発された。実際に、Perl、PHP、Ruby、Python、Javaコネクタなど、多くのWebアプリケーション関連のモジュールが実装されている。Apacheのモジュール機能が、Webアプリケーションという分野の発展に大きく寄与したと言える。
そのため、現在もWebアプリケーションのプラットフォームとして、Apacheは欠かすことができない要素である。
Apacheの実行形式
Apacheは、WEBクライアントからのリクエストを受け付けたときに、それを処理する方法として次の3つをサポートしている。
- prefork
- worker
- event
preforkモデル
preforkは、クライアントからのリクエストをApache本体とは別のプロセスで処理する方式である。リクエスト処理用のプロセスは、あらかじめ生成(fork)されているため、preforkと呼ばれる。初期のバージョンから採用されている方法であり、安定性がとても高い。また、モジュールにメモリリークなどのバグなどがあった場合にも、定期的に処理プロセスを終了させて再生成することで問題を回避できる。また、処理プロセスが、モジュールのバグなどでダウンした場合にも、本体のプロセスが自動的に子プロセスを生成して処理を継続する。こうした機能からもっとも耐障害性が高い処理モデルである。
しかし、リクエストを処理するプロセスが個別にメモリやCPUを消費するため、システムのメモリやCPUの利用率が高くなることが欠点である。
workerモデル
workerモデルは、クライアントからのリクエストの処理をスレッドを使って行う方式である。スレッドを利用するため、WWWサーバ全体が一つのプロセスとして動作する。メモリの利用料が少なく、リクエストを処理するスレッド切り替えも高速に行うことができ、CPUを消費しにくい。
しかし、高速に処理ができる半面、何らかのバグで処理が停止すると、サーバ全体が停止してしまう可能性があり、耐障害性という点で劣る。
eventモデル
eventモデルは、Apache 2.4.1から正式採用された方法で、以前は実験的サポートであった。eventはworkerと同様にマルチスレッドモデルで動作する。workerでは、一度生成したスレッドをそのまま使いつづけるが、eventモデルではスレッドは処理が終わったら停止して、必要に応じて再生成される。
ただ、HTTPプロトコルにはkeepaliveと呼ばれる機能が実装されている。keepaliveでは、クライアントはサーバと持続的なコネクションを持つことができる。workerモデルでは、クライアントに対して一つのスレッドを割り当てて持続性を保証する。これに対してevnetモデルでは、持続性を保証するための専用のスレッドを使って処理を行う。
eventモデルでは、処理の頻度に応じて動的にメモリを確保するため、メモリの利用量を抑えることができる。そのため、WWWサーバ以外の用途にもサーバを使っている場合には、システム全体のメモリ利用量を適正に保つことができるメリットがある。しかし、WWWサーバ専用に使っている場合には、スレッド生成のオーバーヘッドがある。また、処理が複雑なため、安定性も高くないと考えられる。
【カテゴリ】:オープンソースソフトウェア  
【Webセミナー】自社でOSSを採用しよう!今更聞けないOSSの基本セミナー
日程: | 11月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | OSSを導入したいけど、どこから手をつければいいかわからない方必見! |
ご興味のあるかたはぜひご参加ください。 |