Web - NginxとApacheの違い

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

Apache HTTP Server

  • マルチプロセスモデル
    接続毎にプロセスをフォークするのでメモリが多く消費される。
  • 利点
    メモリ空間が独立しているので、スクリプト言語が組み込みやすい。
  • 欠点
    同時接続が増えるとメモリが不足しやすい。
    リクエストが大量に来た場合、プロセスが同時に起動するのでオーバーヘッドが非常に大きくなる。
    ただし、モジュールを使用すれば、イベント駆動モデルにもできる。(Nginxには及ばない)
  • その他
    モジュール次第で、マルチプロセスでもマルチスレッドでもイベント駆動にもできるが、イベント駆動としてはnginxの方が優秀である。



Nginx

  • イベント駆動モデル
    1プロセス内で、接続ごとにイベント処理を行う。
    1プロセス1CPUなので、CPUの数だけワーカープロセスが作成できる。
  • 利点
    接続数が増えても、プロセス数やスレッド数が増えないので、メモリの消費が少ない。
    少量のプロセスだけで大量のリクエストを処理することが可能。
    C10K問題(ハードウェアの性能には問題ないが、クライアントの数が多くなるとサーバがパンクする問題が解決される。
    (プロセス番号が不足する問題で、UNIX系OSだと最大32767)
    設定ファイル(nginx.conf)がApacheよりも直感的で柔軟に設定を行うことが可能。
  • 欠点
    1つのメモリ空間で動作するため、スクリプト言語を組み込めないことがある。
    ただし、プロキシサーバとして利用すれば、スクリプト言語を呼び出せる。
    CPUリソースが多く必要な処理には向いていない。時間が掛かる処理を実行した場合、プロセスがブロックされて処理能力が落ちる。
  • その他
    WebApplicationと連携するときには、プロキシサーバとして動作させる。
    PHP : PHP-FPMで動かし、FastCGI経由で動作させる。
    Ruby : unicornで動かし、HTTPプロキシとしてアクセスする。
     
    ※ FastCGIはプロセスをメモリ上に永続化することで、起動・終了コストを削減する。


Apache vs Nginx.jpg

参照 : http://openstandia.jp/pdf/140228_osc_seminar_ssof8.pdf


Apache HTTP Serverを利用するメリット

WindowsサーバだとApacheの方が処理が速いので、同時アクセス数が少なければ選択肢に入る。
また、標準機能が豊富なので、その機能を早く利用したい場合は選択する。
その場合でも、同時アクセスが多い場合は、Nginxをリバースプロキシにして、Apacheに流す形になる。


比較

  • 負荷が高くなく、早期セットアップが必要な場合
    Apache
  • 負荷が高く、スケーラビリティが要求される場合
    Nginx
  • ある程度の同時アクセスが見込めない場合
    Apache
  • 同時アクセス数は小さく、単純にリクエスト数が多い場合
    Apache
  • 静的ページに同時多数のアクセスが想定される場合
    Nginx
  • 動的ページは処理内容やサーバスペックによるため現状では判断できない(要調査)



Nginxから見たApache

Robertson氏は「私は、Apacheは素晴らしいWebサーバだと思っている。NginxはApacheとは異なる利用事例を想定している。
Apacheがライバルだとは思っていない。われわれの顧客は、Nginxをロードバランサや、マイクロサービスの構築に使っているが、
どちらもApacheに向いた用途ではない。」と述べている。

実際、Robertson氏は、多くのユーザがNginxとApacheの両方を使っていることに気付いたという。
「顧客はApacheの手前で、負荷分散やアプリケーションにNginxを使用している。
Nginxのアーキテクチャはかなり異なっており、並行的にWebサービスを提供するのに向いている。」と同氏は言う。

また、クラウド構成ではNginxが有利だと述べている。