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

  • 53
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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の方が早いっぽい。