Edited at

Apacheとnginxどちらを採用すべきかメリット・デメリット比較

More than 3 years have passed since last update.

Apacheよりnginxの方が早い、という話を聞きました。それぞれのメリット/デメリットや速度比較について調べた内容をまとめます。


そもそもApacheとnginxは駆動方式が違う


  • Apacheとnginxの大きな違いは駆動方式の違い。詳しくは下記サイトがわかりやすい。

    http://dream-web.info/2013/12/19/533/

  • Apacheは、プロセス駆動アーキテクチャでマルチプロセス。これは、各リクエストをプロセスに割り当てて処理を行う。リクエストが大量に来た際、プロセスが同時に起動するのでオーバーヘッドが非常に大きくなるというデメリットがある。

  • nginxは、イベント駆動アーキテクチャ、シングルスレッドモデル。
    シングルスレッドでループ処理をまわし、キューに溜まったイベントを処理していく処理方式(イベントループ方式)(node.jsなどでも採用)。プロセス数はCPUコア数と基本的には同じに設定。

  • イベントループ方式を採用することで、少量のプロセスだけで大量のリクエストを処理することが可能。「C10K問題(ハード性能的には問題ないが、クライアントの数が多くなるとサーバがパンクする場合がある。プロセス番号が足りなくなる。UNIX系OSだと最大32767。)」が解決される。

  • 参考 http://www.slideshare.net/yujiotani16/nginx-16850347
    http://www.slideshare.net/ttkzw/nginx-intro


駆動方式の違いが具体的にどのように影響するか


  • nginxの方が、処理が軽く、大量のリクエストを処理するのに向いている。

  • nginxの方が、設定ファイル(nginx.conf)がApacheと比較してもより直感的で柔軟に設定を行うことが可能。

  • nginxは、CPUリソースがたくさん必要な処理には向いていない。処理時間が長くなる処理を実行した際、そこでプロセスがブロックされてしまい処理能力が落ちてしまう。


比較調査例


  • 単純に考察するとApacheよりもnginxの方が1.47倍処理能力が高い結果

    引用元) http://webkaru.net/linux/nginx-apache/

  • 同時10接続の20回アクセス条件であれば、圧倒的にApacheよりNGINXが優位。
    Apacheが機能拡充を目指したのに対して、NGINXは大量処理、スピード重視を徹底的に追求

    引用元) http://d.hatena.ne.jp/omiyan/20101213/1292187680

  • しかしながらApacheもマルチプロセッシングモジュール(event_mpm)の設定を正しくチューニングすることで、nginxに及ばないまでも、かなりのパフォーマンスを期待出来る

    引用元) http://blog.matsumoto-r.jp/?p=2996


考察


負荷が高くなく、早期セットアップが必要な場合は「Apache」

負荷が高く、スケーラビリティが要求される場合は「nginx」

静的ページに同時多数のアクセスが想定される場合は「nginx」

動的ページは処理内容やサーバスペックによるため現状では判断できない(要調査)

ある程度の同時アクセスが見込めない場合は「Apache」

同時アクセス数は小さく、単純にリクエスト数が多い場合は「Apache」

http://vitalify.jp/blog/2012/08/apache%E3%81%A8nginx%E3%82%92%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E6%84%9F%E6%83%B3.html


http://www.slideshare.net/ttkzw/nginx-intro のサイトによると動的コンテンツはapacheの方が早いっぽい。