Web サーバーの比較: Java は Node.js より遅い

May 08 2023
本当?コーディングして比較してみましょう。先週、長期連休の合間に、ミディアム。

本当?コーディングして比較してみましょう。

UnsplashのRalfs Blumbergsによる写真

先週、長期休暇の最中に、Medium.com からこの記事を勧められました。Node.js と Java ネイティブ HTTP サーバーの比較です。

その後、同じ著者によるこの別の Java vs Node.js ベンチマークをたどり、次にこの Java 大失敗の記事 をたどりました。Java は Node.js よりも劣っていると感じました。若い開発者を思い出させます。彼は若く、野心的で、触れるものすべてを Javascript と Typescript に変えたいと思っています。

「Java は遅い」と彼は言いました。

そうですね、コメント欄で反論できます。アプリケーションがスレッドを使用する方法、Java スレッドが OS スレッドにバインドされる方法、Springboot が大型トラックのようであり、その機能を無駄にする方法を説明するかもしれません。また、ベンチマークと bla..bla..bla. 結局のところ、私は確信しています、誰も納得させません!

「ベンチマークを自分でコーディングすることで、彼らがどれほど間違っているかを示すことができれば楽しいだろう」と私は思いました。

それで、私は自分自身に言いました、Rendang を保持し、コーディングして調べてみましょう.

テストメカニズム

その記事の著者がベンチマークを行った方法に従います。

  • 単純な文字列を返します。
  • Bombardier を使用したテスト — 負荷テストを行うための Go ユーティリティです。ここで情報を見つけることができます。
  • また、アプリケーション (SUT) と負荷テスト ツールには同じマシンを使用します。

アプリケーションは、次のハードウェアとソフトウェアを使用します。

  • CPU Intel i7 4コア
  • RAM:16GB
  • Windows 11 Pro、バージョン 22H2
  • ジャワ20
  • ノード 18

2 つの一般的な Node.js Web サーバー、2 つの Java 非反応性 Web サーバー、および 2 つの Java 反応性 Web サーバーをテストします。どうぞ:

  • Express : 非常に人気のある Node.js Web サーバー。
  • Fastify : 最速の Node.js Web サーバーであると主張しています。
  • Jetty : 人気のある非反応型 Java Web サーバー。
  • Undertow : Springboot を含む多くの Java フレームワークで使用される、もう 1 つの伝統的な非反応性 Java Web サーバー。
  • Reactor : Spring webflux を強化するリアクティブ Java サーバー。
  • Vert.x-Web : もう 1 つの一般的なリアクティブ Java サーバー
  • これは科学的なベンチマークではありません。パフォーマンスに関心があります — 1 秒あたりのリクエストのみ。上記のサーバーを使用するプロジェクトのベンチマークが必要な場合は、ユース ケースの分析を行う必要があります。おそらく、より包括的なマトリックスを収集する必要があります。
  • このテストのすべてのソース コードは、私の GitHub リポジトリにあります。リンクは次のとおりです。https://github.com/mailindra/webserver-comparison.
  • Java または Node.js のパフォーマンスを改善するために私にできることがあると思われる場合は、コメントでお知らせください。または、私のレポジトリをクローンして、自分でテストしてから、プル リクエストを送ってください。

Node.js: エクスプレス

Express Web サイトは、それがミニマリストの Web フレームワークであると主張しています。以下に示すように、Express コードはシンプルで意識的です。このベンチマークでは、サーバーは各リクエストに対して単に「Hello, People」を返します。

アプリケーションを実行した後、テストします。

最初に小さな接続 (小さな要求) を使用し、次に 500 の接続と 100 万の要求を使用します。テストごとに、テスト前に 1 ラウンドのウォームアップを行いました。結果は次のとおりです。

A. 50 の接続と 1000 のリクエストでテストします。

50 の接続と 1000 のリクエストを処理する Express テスト済み

B. 500 回の接続と 100 万回のリクエストでテストします。

500 回の接続と 100 万回のリクエストを処理する Express テスト済み

Node.js: Fastify

Fastify コードは Express に似ています。Web サイトは、Fastify が高性能で開発者に優しいと主張しています。コードは次のとおりです。

A. 50 接続と 1000 リクエストのテスト:

Fastify は、50 の接続と 1000 のリクエストを処理することがテストされています

B. 500 回の接続と 100 万回のリクエストのテスト:

Fastify は、500 回の接続と 100 万回のリクエストを処理することがテスト済みです

Fastify の結果は、Express よりもはるかに高速であることを示しています。Fastify Web サイトの主張は正しいようです。

Java: 桟橋

Jetty は、Java Web サーバーおよびサーブレット コンテナーです。非反応的ですが、非同期をサポートします。コードは次のとおりです。

A. 50 の接続と 1000 のリクエストでテストします。

Jetty は、50 の接続と 1000 のリクエストを処理することがテストされています

B. 500 回の接続と 100 万回のリクエストでテストします。

Jetty は 500 回の接続と 100 万回のリクエストを処理することがテストされています

結果からわかるように、Jetty は非常に優れたパフォーマンスを発揮します。node.js Fastify よりもはるかに高速です。

Java: 引き波

Jetty と同様に、Undertow は非反応性の Java Web サーバーです。埋め込み可能な設計になっています。以下に示すように、コードは流暢で、簡単に理解できます。

A. 50 の接続と 1000 のリクエストでテストします。

Undertow は、50 の接続と 1000 のリクエストを処理することがテストされています

B. 500 回の接続と 100 万回のリクエストでテストします。

Undertow は、500 回の接続と 100 万回のリクエストを処理することがテストされています

結果からわかるように、Undertow は両方の Node.js サーバーよりもはるかに高速です。Jetty よりもさらに高速です。

Java: リアクター

Reactor、正確には Reactor-Netty は、Spring Webflux を強化するリアクティブ Web サーバーです。ご覧のとおり、コードは Jetty や Undertow よりも単純です。これは Node.js によく似ています。

A. 50 の接続と 1000 のリクエストでテストします。

50 の接続と 1000 のリクエストを処理するようにテストされたリアクター

B. 500 回の接続と 100 万回のリクエストでテストします。

500 回の接続と 100 万回のリクエストを処理するようにテストされたリアクター

ここでも、Java Reactor は両方の Node.js Web サーバーよりもはるかに高速に実行されます。

Java: Vertx-Web

ドキュメントに記載されているように、Vert.x-Web は最新の Web アプリケーションを構築するための Java スイス アーミー ナイフです。これはリアクティブ フレームワークです。Reactor と同様に、コードも流暢で簡単に理解できます。

A. 50 の接続と 1000 のリクエストでテストします。

Vertx-Web は、50 の接続と 1000 のリクエストを処理することがテストされています

B. 500 回の接続と 100 万回のリクエストでテストします。

Vertx-web は、500 回の接続と 100 万回のリクエストを処理することがテストされています

ご覧のとおり、Vertx は非常に優れたパフォーマンスを発揮します。Node.js サーバーよりも優れており、Java Reactor よりも優れています。

結果

良い視覚化ができるように、このベンチマークの棒グラフを作成します。

  1. 最初のテスト、50 の同時接続と 1000 のリクエストのテスト結果:
  2. 50 の同時接続と 1 K のリクエスト (作成者: Ronny Mailindra)
最終結果のベンチマーク (作成者: Ronny Mailindra)

結論

  1. いいえ、Java は Node.js や Javascript より遅くはありません。自分でベンチマークを行うことの良い点は、自分自身を納得させることができることです。自分が信じていないことを他人に納得させることはできません。
  2. Java Reactive サーバーと Non-Reactive サーバーはどちらも、Node.js サーバーよりも優れたパフォーマンスを発揮します。
  3. Java ノンブロッキング サーバーが同時接続数が少ない場合でも多い場合でもうまく機能し、Reactor や Vert.x などのリアクティブ サーバーと競合できることには驚きました。
  • エクスプレス:https://expressjs.com/
  • ファスティング:https://www.fastify.io/
  • 桟橋:https://www.eclipse.org/jetty/
  • 引き波:https://undertow.io/
  • リアクター:https://projectreactor.io/
  • Vert.x-Web :https://vertx.io/docs/vertx-web/java/
  • ベンチマーク リポジトリ:https://github.com/mailindra/webserver-comparison