Help us understand the problem. What is going on with this article?

ApacheとNginxについて比較

ミドルウェアとは

  • コンピュータを制御するオペレーティングシステム(OS)と、特定の処理を行うアプリケーションソフトウェアとの仲立ちをするソフトウェアのこと。
  • OSの基本的な機能だけでは、アプリケーションソフトが必要とする機能(サーバやデータベースとのやり取りなど)をカバーできない場合があり、必要な機能を集約してパッケージとしてまとめたものがミドルウェア。

image.png

image.png

WEBサーバーソフトウェアとは

  • ミドルウェアの一つ。
  • HTTPリクエストを送った時に、何かしらのレスポンスを返すプログラム。

Apacheとは

apache.png

  • 「あぱっち」と読む。
  • 正式名称は「Apache HTTP Server」。
  • オープンソースソフトウェア(OSS)で、無償で誰でも利用可能。
  • マルチプロセスモデル(接続ごとにプロセスをフォーク≒コピーする)なのでメモリがいっぱいになりやすい。
    • つまり、リクエストを処理するごとにリソースが枯渇していってしまう。
  • モジュールにより基本機能を拡張可能できるようになっている。
    • これを利用すればイベント駆動モデルにもできるが、Nginxの方が性能には及ばないらしい。
  • CMS(Contents Management System)を利用する際に、比較的簡単な設定で済む。
  • 約20年間OSSとして公開され、バージョンアップした結果により信頼性が高い。
  • 最近はnginxと同じぐらいのシェア率。

起動してみる(Mac)

$ php -v
$ httpd -v
$ sudo apachectl start[stop]

確認 : localhost:80 にアクセス
設定ファイル : /etc/apache2/httpd.conf

Nginxとは

nginx.png

  • 「えんじんえっくす」と読む。
  • Apacheと同じく、OSS。
  • Apacheと比較して、Nginxは速くて高負荷に強い
  • C10K問題をはじめ、大容量のデータ配信や大量同時接続に耐えることを目的に設計された
    • C10K問題について、「C」は「Client(クライアント)」、「10K」は「1万台」を表し、(ハードウェアやネットワーク性能に問題がなくても)同時クライアント接続数がある一定数を超えるとサーバがパンクしてしまう問題のこと。
  • ノンブロッキングI/Oと非同期のイベント駆動アーキテクチャを採用することで、同時接続数がApacheの10~100倍ぐらいになる。
    • nginxはworkerと呼ばれるシングルスレッドのプロセスを複数利用している。
  • リバースプロキシ(特定のサーバへの要求を必ず経由するように設置されたプロキシサーバ)やロードバランサ(負荷分散装置)の機能も有している。
    • キャッシュ付きのリバースプロキシ機能によって、メインサーバの代理としてコンテンツの送信を行い負荷を分散することができる。
  • 詳しいアーキテクチャについてはNginxのアーキテクチャについて理解するの記事を参照。

起動してみる(Mac)

$ brew install nginx
$ nginx
$ nginx -s stop

確認 : localhost:8080 にアクセス
設定ファイル : /usr/local/etc/nginx/nginx.conf

それぞれのメリット/デメリット

  • Apacheとnginxの主な違いは駆動方式にある。
  • Apacheは、マルチプロセスのプロセス駆動アーキテクチャ
    • 各リクエストをプロセスに割り当てて処理を行うため、リクエストが大量に来た際に、プロセスが同時に起動するのでオーバーヘッド(負荷処理)が非常に大きくなるというデメリットがある。
  • Nginxはシングルスレッドモデルのイベント駆動アーキテクチャ
    • Node.jsと同じく、イベントループ方式(シングルスレッドでループ処理をまわし、キューに溜まったイベントを処理していく処理方式)。
    • イベントループ方式を採用することで、少量のプロセスだけで大量のリクエストを処理することが可能。
    • これにより、C10K問題を解決できている。

考察

  • Nginxの方が、処理が軽く大量のリクエストを処理するのに向いていおり、設定ファイルがより直感的で柔軟に設定を行うことが可能。
  • 一方、NginxはCPUリソースがたくさん必要な処理には向いていない。
    • これは、処理時間が長くなる処理を実行した際、そこでプロセスがブロックされてしまい処理能力が落ちてしまうため。
  • 処理能力に関して、ApacheよりもNginxの方が1.47倍高い結果もでている。
    • ※Apacheもモジュール(event_mpm)の設定を正しくチューニングすることで、Nginxに及ばないまでも、かなりのパフォーマンスを期待することができる。

結論

Nginxを選択する場合

  • 負荷が高く、スケーラビリティが要求されるような場合。
  • 静的ページに同時多数のアクセスが想定されるような場合。

Apacheを選択する場合

  • 負荷が低く、早期または簡易的なセットアップが必要な場合。
  • 同時アクセス数が小さく、単純にリクエスト数が多いような場合。

参考文献

lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした