2

POSTリクエストボディを介してjsonデータ(約1KB)を受け入れる非常に単純なnodejsアプリケーションがあります。応答はすぐにクライアントに送り返され、json は非同期で Apache Kafka キューにポストされます。同時リクエストの数は 1 秒あたり 10000 に達する可能性があり、3 台の異なるマシンで実行されている Apache Jmeter を使用してシミュレートしています。目標は、失敗したリクエストなしで 1 秒未満の平均スループットを達成することです。

4 コアのマシンでは、アプリは 1 秒あたり最大 4015 のリクエストをエラーなく処理します。ただし、目標は 1 秒あたり 10000 リクエストであるため、ノード アプリをクラスター化された環境にデプロイしました。

同じマシンでのクラスタリングと、2 台の異なるマシン間のクラスタリング (ここで説明) の両方が実装されました。Nginx は、2 つのノード インスタンス間で着信リクエストをラウンド ロビンするためのロード バランサーとして使用されました。スループットが大幅に向上することを期待していましたが (ここに記載されているように)、結果は逆でした。成功したリクエストの数は、1 秒あたり約 3100 リクエストに減少しました。

私の質問は次のとおりです。

  1. クラスタ化されたアプローチで何がうまくいかなかったのでしょうか?
  2. これは Node アプリケーションのスループットを向上させる正しい方法ですか?
  3. また、Tomcat コンテナー内の Java Web アプリケーションで同様の演習を行ったところ、1 つのインスタンスで 4000 の要求が期待どおりに実行され、2 つのインスタンスを持つクラスターで約 5000 の成功した要求が実行されました。これは、nodejs が Tomcat よりも優れているという私たちの信念と矛盾しています。リクエストモデルごとのスレッドのため、Tomcatは一般的に優れていますか?

よろしくお願いします。

4

2 に答える 2