[ベンチ比較] Nodejs : Nginx : PHP

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

WEBサービスを構築する際に、基盤プラットフォームでの検討を行う事になった。
 

正直、言語はなんでもいいと考えていたのだが、WEB環境のシンプル構成はLAMPであった方が、色々と都合がいいと考えていたところ、SPA構成でNodejsを使いたいというエンジニアの声があり、とりあえずサーバーレスポンスをベンチして考えてみる事にする。
 

WIndows OSやMac OSサーバーを使う事はありえず、Linux OSでやる事は間違いないのだが、wordpressなどの導入を前提に考えると、LAMP環境しか有り得ず、各種言語のフレームワークを使うのであれば、言語環境に特化すれば良いだけなのだが、こうした決め事は、決めるべきエンジニアの経験値に依存する事になる。
 

今回ベンチマークを取ってその後その値だけで決める事はなく、基本的には、下記を比較して決めるのが懸命である。
 

速度クオリティ
移行のしやすさ
管理の簡易さ

指向性

WEBサービスのプラットフォームは、どういう構造で構築するのが良いかは、以下のような指向で考えたい。

・運用管理効率はLAMPが良い
・Nodejsはモジュール管理でサーバー問題がしょっちゅう発生する。
・複数の意図しないライブラリを引きずって管理していく事は、メンテデメリットでもある。
・会社としての開発部門を考えた時に、教育コストを抑えられた方が良い。

 

個人的には、CGI系は、Nodejs側でwrapできるが、NodejsはCGI系ではwrapしづらいという事も考慮して、基本はLAMPにしておいた方が無難な気がするが、そこはきちんとベンチを計測して判断していきたい。

ベンチ環境

とりあえず、実サーバーで行った方が性格なのだが、同一条件にする事で比較対象にはできるはずなので、下記の仮想環境で行ってみる。
 

端末 : Mac Booc 1.4GHz
OS : Docker ubuntu 14.1
Nodejs : v4.2.6
Nginx : nginx version: nginx/1.10.0 (Ubuntu)
PHP-fpm: PHP 7.0.22-0

処理速度のベンチ

単純にNodejsとPHP(fpm)の同じプログラムでの速度差をベンチマークしてみる。
 

ソースコード

ベンチマーク実行

 

 

この状態では”18:205″でNodejsが10倍以上早い速度結果に見えるが、計測値を同率にするために、Linuxのtimeコマンドで実施してみる。
 

 

 

0.086s : 0.241s
という結果が出た事により、Nodejsが3倍ほどの速度優位があることがわかる。
 

htmlソース表示で比較

ソースコード

 

 

ベンチマーク実行

今回は、Nodejsでは、view.jsを3336ポートで起動しておいて、サイト運用に近い状態を構築する。
その時の100pvアクセスあった事を想定して、”ab(Apache Bench)”コマンドでアクセスしてみる。
 

あとは、sample.htmlとview.phpそれぞれにアクセスした場合を想定して、「Nginx」 , 「Nginx+PHP(fpm)」の比較も同時に行ってみる。
 

 

 

 

数値の羅列だけで意味が分からない為少し解説すると、以下のような数値です。
 

処理時間

Nodejs : 1012 ms
Nginx : 13 ms
PHP : 120 ms

 

Nodejsは、ポート待ち受けをして、fsライブラリを使う為、段階が劇的に増えてしまったんでしょうね。
単純計算処理であれば、圧勝だったのに、HTMLソース表示は難ありな感じでした。

まとめ

プラットフォームは、どれか1つに決めずに、処理品質の高い物を部分的に使うのが、サービス提供には一番向いていると改めて思いました。
 

ただし、メンテナンスコストを考えるとどれか一つにした方がトラブル回避にも繋がります。
 

WEBサービスの基本はLAMPに任せて、SocketIOや、特殊なサーバーサイドJSを使うたい時にNodejsサーバー(同梱でも別立てでも可)を使うのが良いのではないでしょうか?
 

ちなみに、LAMPもPHP以外でもPythonやRubyやPerlでこだわってみるのも良いし、Goなどのコンパイル言語でゴリっと書き込んでみるのも楽しいかもしれませんね。
 

この辺は、機能追加や回収コストは高くつきそうですが・・・
 

どれを選ぶにしても一度作り始めるとなかなか変更ができないだけで、初期段階でしっかり検討しておきたいところですね。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です