APACE HTTP SERVER
   眠れない夜も、光の朝もいつもそばに
Apache HTTP Server?


アパッチ エイチティーティーピー サーバは、世界中もっとも
使われているWebサーバソフトウェアであり、大規模な商用サイトから自宅
サーバまで幅広く利用されています。

単にApacheとも称されます。
誰が作ってるの?

開発は、Apacheソフトウェア財団のApache HTTPサーバプロジェクトで行
われています。


Apacheライセンスの下でソースコードが公開および配布されており、代表的
なオープンソース・ソフトウェアの一つです。
ちなみにスポンサー




      ちなみにtwitterはブロンズ
複数の現行バージョン

  2012年5月現在、Apacheは以下の3バージョンをサポートしています。

2.0系 
ほぼセキュリティ関係の修正のみっ。(legacy)
2.2系 
新しい機能を使いつつ安定志向も好むユーザーが利用してます(まぁstable)
2.4系 
最新の機能を搭載!!(nightly的な ちゃんと動くけどねっ)

※従来サポートされてきた1.3系は、2010年1月末をもってサポート打ち切り!!!
プロセスの挙動(1)

  prefork
preforkは「スレッドを使わず、先行して fork を行なうウェブサーバ」ってこと。Apacheは昔から親プロセスを1つ持ち、クラ
イアントからリクエストが来ると自分自身をコピーして子プロセスを起動します(これをforkという)。
実際の通信は子プロセスが受け持ちます。結果通信している数だけ子プロセスが起動することになってクライアントからリク
エストを受けたあとでforkするとfork完了までに待ち時間が出来て通信のパフォーマンスが遅くなる。←従来
だーかーらー、あらかじめいくつかの子プロセスをforkしておき、forkの待ち時間をなくす方式がPrefork。


preforkのメリットは、ある子プロセスが何らかの原因でフリーズしたとしても、他の子プロセスには影響を及ぼすことが無く
通信を継続できます。安定した通信が可能なわけ。


デメリットは、クライアントが多くなればなるほど子プロセスの数も増えるので、使用メモリ量やCPU負荷が比例的に増大。
preforkで多数のクライアントをさばくには、それに応じた大量のメモリと高速なCPUが必要です。
プロセスの挙動(2)

  worker
workerは「マルチスレッドとマルチプロセスのハイブリッド型サーバ」←かっけww。
Apacheの子プロセス1つ1つがマルチスレッドで動作して、スレッド1つが1つのクライアントを受け持つ方式。いわゆる昔から
あるやつ。


1つのプロセスがマルチスレッドを利用して複数の通信の面倒を見る。この点で1つのプロセスが1つの通信をみるpreforkとは異
なる。また多くの子プロセスを起動せずに済むので、メモリの使用量も減らせるよ。
マルチスレッドは安定して動作させるためにノウハウが必要で、モジュールはスレッドセーフである必要があり、workerを使用
する際は事前に十分な安定性のテストを行うべきである。←エンジニアの極み
プロセスの挙動(3)

  event
eventはworkerの一種でマルチスレッドで動作する。workerとの違いはKeep-Alive(持続的接続)の処理方法。
workerやpreforkは、Keep-Aliveの持続性を保つために一度利用したスレッド・プロセスをそのまま待機させているけど
クライアントからの接続が持続的に行われる可能性は保証されているわけではないから、待機していること自体が無駄になる
可能性もある。そこで、Keep-Aliveの処理を別のスレッドに割り振って通信を処理する。


この方式は長らく実験的サポートしてたんだけど、2.4.1にて正式に採用された←ふーん2.2までしか触ったことがない僕は皆無
Apacheのポテンシャル
Apacheでは、FreeBSDのカーネルと連動し、最高の性能を引き出す特殊な
動作形態をサポートしています。 これはFreeBSDをHTTPサーバに特化する
という運用形態を想定したもので、FreeBSD及びApacheの両者に設定が必
要で、共にインストール直後の標準設定ではサポートさていません。


基本的な動作は、LinuxのTUX web serverやWindowsのInternet Information
Servicesなどに近い実装で、通信バッファのカーネルからの直接的な読込や
kqueueなど多岐にわたり、一部のみ利用ということも可能にです。


Linuxにおけるサポートも検討されたが、あまりに特殊であるため未実
装。。。(え
歴史

1995年当時Webサーバソフトウェアは欧州原子核研究機構(CERN)の  ティム・バーナーズ=リーが開発した
CERN HTTPdと米国立スーパーコンピュータ応用研究所(NCSA)が開発したNCSA HTTPdの2種類。NCSA HTTPdは初めて
CGIを採用するなど、非常に普及していたが、その後ほとんどメンテナンスが行われなくなり、放置されていたんだ。そこ
で、何人かの有志が改良とサポートを行うためのグループを作り、自分たちをApache Groupと名付けました。が、しっか
しかーし!彼等もその後プロジェクトに興味を失ってしまい、再度放置されかけた。(うそ・・・。)そのため、1999年
にユーザーの一人だったBrian Behlendorfが自分のサーバを使ってユーザーのためのメーリングリストを立ち上げて、現在

のApacheソフトウェア財団の母体になりました。   ただし、現在のApacheのソースコードは
Apacheソフトウェア財団によって完全に書き換えられており、NCSA
HTTPdのコードは残っていない。

APACHE HTTP SERVER

Editor's Notes