Worldでパフォーマンス比較してみた。Worldでパフォーマンス比較してみた。PHPTweetTweetこの1年くらいで手がけているプロジェクトのバックエンドはすべてJavaなのですが、「Node.js、良いですよ」という話を聞いて、勉強と検証をしております。今回は、軽くNode.jsの勉強をした上で、Node.jsとPHPとJavaの簡単なパフォーマンス比較をしてみようと思います。Node.jsの勉強とりあえず、Node.jsの本を一冊読みました。httpモジュールを使ってWEBサーバを起動するところから、PostgreSQLやMongoDBへのアクセス、Sailsを使ったMVCアプリケーションの構築まで、とても分かりやすく全体を追える本でした。JavaScriptについての解説はないので、言語としてのJavaScriptについては別で学ぶ必要があります。これを読んで、「Node.jsをサービスに投入すること自体はできそうだ」というイメージが湧いたところで、実際に速いのか試してみました。ベンチマークコードDBアクセスを含むような場合も比較するつもりですが、今回はとりあえず静的なHTMLを返すだけの処理で、並列数に対するレスポンスタイムの依存性の比較をしてみようと思いました。Node.jsの場合。Node.js!</body></html>');}).listen(8080);続いて、PHPの場合です。PHP!</body></html>');そして、Javaの場合。Java!</body></html>");}}ソースコードは、GitHubに置いておきます。EC2のm3.mediumインスタンスを利用しました。必要なソフトをインストールした上で、それぞれの言語のWebアプリケーションを起動します。実運用環境とは違いますが、検証可能な範囲で楽な方法を選びました。Node.jsの場合は、nodeコマンドで起動することにします。app.jsPHPは、Apacheを使います。httpdは、yumからインストールして、特別な設定の変更はせずに使います。startJavaは、Mavenから起動します。サーブレットコンテナはTomcatにしました。Benchを使うことにしました。リクエスト回数は10万回。並列数を変えながら、所要時間を測定します。http://ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com/app.php負荷をかける側のサーバは、m3.xlargeにしました。結果いまいち面白くない結果となりました・・・。19.941Node.jsとPHPが途中で切れているのは、それ以上並列数を上げるとエラーを返してしまったためです。Node.jsとPHPのレスポンスタイムはほぼ同等で、Node.jsの方が高い並列数にも耐えられました。Javaはレスポンスタイムが他の2つの半分以下で、並列数を上げてもエラーを返しませんでした。本当は、「node-js-vs-apache-php-benchmark」で紹介されているような、Node.js以外は並列数によってレスポンス時間が伸びていくような結果を期待していたので、残念。ソースコードや検証方法を見たところ同じような感じなんですが・・・。まとめこの結果だけ見るとJava最強でした。PHPはロードアベレージが100を超える場面も見られました。Node.jsを使ってみたいですが、このままじゃ使う理由がなくなってしまうので、もっと検証してみたいと思います。データベースアクセスのような待機時間の長い処理をしたらどうなるか?計算のようなCPU負荷のかかる処理をしたらどうなるか?もっと実際に運用する環境に近づけたらどうなるか?パラメータをチューニングしたらどこまで上げられるか?負荷は本当に設定通りにかけられているのか?もしかしたら続くかもしれません。grunt-maven-pluginを使って、Mavenのビルド工程でGruntビルドを実行する。最近キテいるっぽいPHPフレームワークLaravelのインストール&起動!2015年12月21日3年ぶりのPHP。最近のパッケージ管理ツールComposerに触れてみました。SparkをJavaアプリケーションから使う。エンジニアリング半分で頑張っています。広告業界と無関係な僕がさっぱり理解できないアドテク用語を調べた。2014年3月30日WEBアクセス解析ツールMixpanelが簡単なのに凄い。