Webフレームワークのパフォーマンス比較
TechEmpowerは昨年から、Webフレームワークのパフォーマンスを測定、比較しようと、ベンチマークを走らせてきた。このベンチマークでは「フレームワーク」という言葉がゆるく使われており、ここにはプラットフォームやマイクロフレームワークも含まれている。
最初のベンチマーク結果は2013年4月に公開され、テストは2種類のハードウェア設定(2台のAmazon EC2 m1.largeインスタンスと2台のIntel Sandy Bridge Core i7-2600K (8GB RAM)、いずれもギガビットイーサネットを使用)で実施された。テストは単純なJSONレスポンス{"message" : "Hello, World!"}
で応答するというものだった。以下は結果の抜粋で、ベンチマークされた24のWebフレームワークから主要なもの10について、リクエスト/秒(RPS)と最高の結果に対する比率を示している。
1年経ち、ベンチマークは119のフレームワークをカバーするまでに拡大し、複数の種類のクエリとレスポンス、2台のDell R720xd Dual-Xeon E5 v2(それぞれ32GB RAMと10Gビットイーサネット)という追加のハードウェア構成における実行も含まれている。
9ラウンド目のベンチマークが最近公開された。以下はその抜粋だ。今回は3つの異なるハードウェア構成で実施された。
観測結果
RPSについて見ると、ハイエンドなハードウェアはローエンドよりも確かにパフォーマンスがよいが、 Xeon E5とIntel i7にあるように、上位のフレームワークの順位には大きな変動がある。Intel i7の場合、90%を超えているものが多数あることから、TechEmpowerは1Gビットイーサネットによるボトルネックによるものだと考えている。
最初のラウンド以来、最高レベルのパフォーマンスのフレームワークおよびプラットオームはギガビットイーサネットによるネットワークの制限を受けていることがわかりました…。十分なネットワーク帯域を使うと、最高レベルのパフォーマンスのフレームワークにはもっと違いが現れてきます。
GoogleのGoはIntel i7でトップだが、すべてのコアを使っているにもかかわらず、Xeon E5ではパフォーマンスが大きく落ちている。TechEmpowerによると、これは特定のタイプのハードウェアアーキテクチャに対するパフォーマンスチューニングの重要性を表しているという。
Peak [Xeon E5]テスト環境は2つのE5プロセッサで40 HTコアのサーバを使っており、結果はそれぞれのフレームワークがいかにうまく単一サーバノードにおける高い並列性にスケールするかを示しています。
もちろん、HTプロセッサコアの数(40に対してi7テストの場合は8)、異なるシステムアーキテクチャ、NUMAといった、他の変数の影響もあります。
Amazon EC2 M1.largeは他に比べてかなりパフォーマンスが低く、クラウドコンピューティングインスタンスとして費用/性能比が魅力的なのか疑問を抱かせるものだ。
-*) 多くのフレームワークはLinuxベースだ。EC2やi7ではWindowsフレームワークはベンチマークされていない。最高のWindowsフレームワーク(plain-windows)のパフォーマンスはE5のトップの18.6%だ。また、FacebookのHHVMはEC2にはない。また、HHVMをFacebookのハードウェア上で動かしたときには、かなりチューンされているだろう。
よく知られているGrails、Spring、Django、Railsといったフレームワークは、使われたハードウェア構成すべてでかなりパフォーマンスが低い。
最近リリースされたDart 1.3のパフォーマンスは2倍になっているのでNode.jsに匹敵するはずだが、このラウンドではDart 1.2が使われているので、ベンチマークには表れていない。これは最近改善された別のフレームワークにも当てはまるかもしれない。こうした改善は今後のベンチマーク結果に表れるだろう。
他のパフォーマンスベンチマークと同様、結果はハードウェア、ネットワーク、システム構成に依存しており、異論もあるだろう。TechEmpowerはお気に入りのフレームワークの結果を向上させることに関心のある人たちに向けて、GitHubにあるコードをフォークするようすすめている。
ベンチマークには、テストの実施方法、そのハードウェア構成、各フレームワークのコンポーネント(言語、Webサーバ、OSなど)の詳細な説明が含まれている。
特集コンテンツ一覧
.NETでドメイン駆動開発~ValueObject後編~
上坂 貴志 - (株)ネクストスケープ 2014年3月25日 午後10時32分
.NETでドメイン駆動開発~ValueObject 前編~
上坂 貴志 - (株)ネクストスケープ 2014年3月19日 午後8時59分
BackboneとAngularを比較する
Victor Savkin 2013年12月23日 午後8時23分
Microsoftの技術の活用方法
Jonathan Allen 2013年12月1日 午後7時43分
アジャイル時代のモデリング: アジャイルチーム拡大のためにはコードの次に何を保つべきなのか
Kenji Hiranabe 2013年11月19日 午後6時56分
Java 8を可能にしたJava 7の機能
Ben Evans 2013年11月12日 午後8時25分
こんにちは
コメントするには InfoQアカウントの登録 または ログイン が必要です。InfoQ に登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。
あなたの意見をお聞かせください。