nginx、apache のロードバランサ性能比較

  • 投稿日:
  • by
このエントリーをはてなブックマークに追加

既に色々なところで書かれていますが、ロードバランサとしての性能について簡単な性能比較をしてみました。

下記の条件で比較を行いました。

  • ロードバランサ 1 台で バックエンドの web サーバ 2 台を負荷分散
  • web サーバは 2 台とも apache を使用
  • apache bench でそれぞれ10回計測し、その平均を算出。
  • テストに用いるページは Apache Test Page
  • Apache/2.2
  • nginx/1.8

apache と nginx の比較表とベンチマーク
http://qiita.com/sion_cojp/items/edb20a6b87f10e186c23

Apache Benchでサクッと性能テスト
http://qiita.com/flexfirm/items/ac5a2f53cfa933a37192

1.apache
lb_apache.png

2.nginx
lb_nginx.png

3.ロードバランサなし(webサーバ直接)
lb_none.png

ベンチマーク

Requests per second [#/sec]

同時接続数apache nginxweb サーバ直接
100 2697.871 3463.774 4326.293
300 2485.409 3362.214 3002.440
500 2436.372 3286.834 1507.004

Time per request [ms]

同時接続数apache nginxweb サーバ直接
100 0.3734 0.2890 0.2326
300 0.4031 0.2978 0.3331
500 0.4107 0.3046 0.6636

機能的なこと

  • ディレクトリやファイルのパスでの振り分けは両方可能
  • オープンソースの WAF:ModSecurity を入れることも両方可能
  • SSL証明書の設定も両方可能
  • セッション維持(パーシステンス)をしたい場合、apache の場合はモジュール mod_proxy_balancer の stickysession、nginx の場合は標準で sticky が入っているようだが、サードパーティ製のモジュール nginx-sticky-module-ng を使用するという情報が多い。nginx の公式サイトに if is evil とあるので、if を使用するような設定には注意が必要

訂正:sticky が入っているのは商用版の nginx plus のようです。

NginxによるWebSocketの負荷分散
http://take4.hatenablog.com/entry/2014/06/27/135258

mod_proxy_balancerの設定、特にstickysessionについて
http://www.res-system.com/weblog/item/618

Module ngx_http_upstream_module
http://nginx.org/en/docs/http/ngx_http_upstream_module.html

無料SSL/TLS証明書のLet's Encryptが正式版になったので自動更新を含めて試してみた
http://www.websec-room.com/2016/04/13/2541

If Is Evil | NGINX
https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

さいごに

  • 環境によって変わる可能性はあると思うが、やはり nginx の方が速そう。
  • 同時接続数が 100 ぐらいまでならロードバランサなしの方がよさそうだが、web サーバを隠蔽化するという目的もあるので入れておきたい。
  • if 非推奨も気になるが、使わなくても目的は達成できそう。
  • 機能的にはどちらも問題ない。
  • web サーバも nginx にすればもっと早くなりそう。