2

基本的に次のことを行うエンタープライズ Java アプリケーションがあるとします。

ユーザー入力を収集し、バックエンド データベース (場合によっては複数) にクエリを実行し、何らかのアルゴリズムを実行し (たとえば、クエリされたデータ セットのメモリ内計算を行って統計を生成するなど)、いくつかの html ページでデータを返します。

私の質問は次のとおりです。アプリケーションのボトルネックが db クエリにある場合、ページをレンダリングする前にすべての post-db アルゴリズムを実行する必要があるため、NodeJS はこのシナリオでどのように役立ちますか? アプリケーション アーキテクチャはどのように見えますか?

4

1 に答える 1

3

もちろん、ノードはストレージ層を高速化することはできず、バックエンド処理が非常に多く発生している単一の要求をエンド ユーザーへの要求をより速く満たすことはできません。しかし、できることは、アプリケーション サーバーのスレッド プール内のスレッドを拘束することではありません。その作業が行われている間、単一のスレッドはそのループを続行し、別の要求を受け入れることができます。

その他のリクエストは、作業が完了したときに返される安価なリクエストである可能性があります。これは、スレッド プール モデルを使用するアプリケーション サーバーでも発生する可能性があります。つまり、スレッド プール モデル内のすべてのスレッドが I/O 要求でブロックされていない限り、各スレッドのオーバーヘッドが発生します。安価なリクエストは、すべてブロックされているため、スレッド プールからスレッドを待機するキューに入れられます。ノードの単一スレッドがループし、安価なリクエストを処理します。

これが機能するのは、すべての I/O が非同期であり、ループをブロックする唯一の作業がコードであることをノードが義務付けているためです。そのため、「コード以外のノード内のすべてが並行して実行される」ということわざがあります。他のアプリケーション サーバーで非同期コードを記述して同様の結果を達成することは可能ですが、多くの場合、コーディングは簡単ですが、スケーラビリティに劣る非非同期スレッド プール モデルが提供されます。

たとえば、この hanselman の投稿は、asp.net が非同期要求を実行できる方法を示していますが、ほとんどが使用している一般的なモデルではありません。

于 2013-01-17T00:26:43.683 に答える