Apache与Nginx的比较表和基准测试

简要概况

    • websocketを使ったAPサーバをmodproxyでバランシングしたいっ!

 

    • そうなるとapache2.4.5以降か、nginxか。

 

    • 調べてみました。

 

    今回はapache2.4.12。CentOSでのお話。
apache2.4.12nginxバージョン管理
nginx-buildで楽々。依存関係も解決情報2.4系は少ない多い動的ファイルの読み込み速度普通普通静的ファイルの読み込み速度遅い。
event_mpm(非同期型IO処理)を採用したので、チューニングすると爆速になるかも。
apache2はrailsのimgファイル読み込む際遅くなるんだよ的なの知ってる方募集速い設定の反映時の再起動必要不要構成centos7はyum。
centos6はソースからインストール。yumアーキテクチャマルチプロセス + マルチスレッド
(ただし、event_mpmを使うとイベント駆動イベント駆動アーキテクチャによるメリットシンプルで分かり易い同時接続数が増えてもプロセス、スレッドが増えないため、
オーバーヘッドも増えない。 ➡高性能アーキテクチャによるデメリットプロセス、スレッドのオーバーヘッドが大きい。
大きな同時接続数に対応しようとすれば、
それだけ負荷が増える特になし開発元コミュニティ営利企業(Nginx Inc.)開発者コミュニティnginx社員 + 一般有償 / 無償無償無償だが、商用サポート購入者のみの機能がある開発スピード(個人的感想)遅い
過去の遺産の修正が大変みたいです。
速いX-Forward-for
(プロキシした際、送信元IPをログに吐く)投入したバージョンに適したmod_rpafを適用する基本機能で付いている。DoS対策mod_dosdetectornginx-maxconn-module個人的にapache2.4系から期待している機能mod_spdyでSPDY対応(nginxは対応ずみ)

在nginx中设置X-Forward-for的方法

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for

AB测试

    • 下記の3つで戦わせます

apache2.4.12(with prefork)
apache2.4.12(with event_mpm)
nginx(1.7)

どちらもインストールしたばかりのチューニングなし状態
apacheって2.4.5からMaxClient➡MaxRequestWorkerって項目になってるんですね。。
リクエスト数は10000固定。
コマンドは、例えば同時接続数100の場合、

$ ab -n 10000 -c 100 http://hogehoge/

同時接続数apache2.4.12(with prefork)apache2.4.12(with event_mpm)nginx(1.7.10)100118.548 seconds117.127 seconds118.538 seconds300126.351 seconds51.424 seconds40.685 seconds500エラー

Completed 10000 requests
Completed 20000 requests
apr_socket_recv: Connection timed out (110)140.633 seconds42.298 seconds100で画像系にアクセスしてみました836.973 seconds

(ちょー時間かかりそうだったので、2000req行ったところで断念しました。)33.891 seconds8.823 seconds

个人总结

    • CentOs6しか使ってない人はソースからインストールしたくないと思うので、websocketを使ったmodproxyならnginx一択かなと。

 

    • まずはnginxを試して、CentOS7からはapacheを考えても良いと思います。

 

    • nginx採用理由は機能も十分ですし、枯れていたapacheをイベント駆動型に開発していた間に、nginxのほうが新しい機能を追加するスピードが速くなってます。

 

    • 営利企業であるのも大きいかもしれませんね。

 

    • ただやはりapacheは大きなリクエストに対しては速いという噂。

nginxだと数が多いリクエストが来た場合、apacheより機能が低下するという経験がある方募集。