エクスプレスJS性能のスケーリング


NodeJSランタイムは、イベントループモデルで動作するV 8クロムエンジンの上に構築されました.NodeJSは、I/O操作の実行と処理において比較的高速になる単一スレッドランタイムを持っています.
単一の糸の性質は多くの利点を持っていると考えても、それはいくつかの他の欠点があります.
CPUの集中タスクが実行されているときにNodejsアプリケーションをブロックすることができます.
番号が素数であるかどうかをチェックするルートを持つExpressアプリケーションを想像してください.ユーザーが大きな数を渡す要求を送信すると、アプリケーションは、より高速な応答を得ることからより小さい番号を送信するユーザーを防ぐことができます.
NodeJSは、開発者がプロセスを管理し、ホストマシンの機能を最大限に活用できるAPIをたくさん公開します.
よくロードされた1つのホスト上のノード・アプリケーションの複数のインスタンスを回転させることを想像してください.
NPMで見つけたパッケージを使って簡単に実装できます.次に示すコードは、このパッケージを使用して、ホストマシン上のノードアプリケーションの複数のインスタンスを実行する簡単な方法を示します.
import express from "express";
import AppRunner from "express-worker-manager";

const app = express();

app.get("/hello", (_, res) =>
  res.send(`Hello response from app running in process ${process.pid}`)
);

const runner = new AppRunner(app, { env: "production",port:4000});
runner.listen(() => {
  console.log("App running");
});
以下のコードは、ホストマシンで利用可能なCPUの数に基づいて、Express Worker Managerの簡単な使用方法を示します.各インスタンスは、CPUのコアで実行されます.
パッケージhttps://www.npmjs.com/package/express-worker-managerへのリンク