簡単なまとめ
Apache HTTP Server
マルチプロセスモデル : 接続ごとにプロセスをフォークするのでメモリがいっぱいになりやすい
- 利点 : メモリ空間が独立しているので、スクリプト言語が組み込みやすい
- 欠点 : 同時接続が増えるとメモリが欠乏しやすい
→ とは言え、モジュールを使えば、イベント駆動モデルにもできるよ。Nginxには及ばないけど。
Nginx
イベント駆動モデル : 1プロセス内で、接続ごとにイベント処理を行う。1プロセス1CPUなので、CPUの数だけワーカープロセスが作成できる。
- 利点 : 接続数が増えても、プロセス数やスレッド数が増えない。消費メモリが増えない
- 欠点 : 1つのメモリ空間で動作するため、スクリプト言語を組み込めないことがある。
→ とは言え、プロキシサーバとして利用すれば、スクリプト言語を呼び出せるよ。
ではApache HTTP Serverを利用するメリットは
WindowsサーバだとApacheのほうが速いので、同時アクセス数が少なければ選択肢に入る。
最初から機能が豊富なので、その機能を早く利用したい場合に消極的に選択するくらいかな。。
その場合でも同時アクセスが多い場合は、Nginxをリバースプロキシにして、Apacheに流す形になるだろう。すくなくとも、圧倒的に良い部分が分からなかった。
もっと詳細
Apache HTTP Server
モジュール次第で、マルチプロセスでもマルチスレッドでもイベント駆動にもできる。が、イベント駆動としては、nginxの方が優秀。
参照 : http://openstandia.jp/pdf/140228_osc_seminar_ssof8.pdf
Nginx
WebApplicationと連携するときには、プロキシサーバとして動作させる。
- PHP : PHP-FPMで動かし、FastCGI経由で動作させる
- Ruby : unicornで動かし、HTTPプロキシーとしてアクセスする
※ FastCGIはプロセスをメモリ上に永続化することで、起動/終了コストを削減する。
中の人はどう思ってるのか
Nginx からみた Apache
「わたしはApacheは素晴らしいウェブサーバだと思っている。NGINXはApacheとは異なる利用事例を想定している」と同氏は述べている。「Apacheがライバルだとは思っていない。われわれの顧客は、NGINXをロードバランサや、マイクロサービスの構築に使っているが、どちらもApacheに向いた用途ではない」
実際、Robertson氏は多くの顧客がNGINXとApacheの両方を使っていることに気づいたという。「顧客はApacheの手前で、負荷分散やアプリケーションにNGINXを使用している。NGINXのアーキテクチャはかなり異なっており、並行的にウェブサービスを提供するのに向いている」と同氏は言う。また、クラウド構成ではNGINXが有利だと述べている。