2016-04-23 11 views
0

サーバーでノードアプリケーションを実行していると、ヒットする可能性が高く、ダウンロード用にzipファイルをコンパイルする必要があります。これまでのところうまくいきますが、私はパフォーマンスが問題になる点を痛感します。 (アプリケーションが現在のUbuntu 14.04マシン上foreverで実行されている。)Nodejsスケーリング機能と優先順位付け機能

私は今、より多くの二次的なものと主な機能のパフォーマンスを低下させてはならないアプリに新機能のすべての種類を追加するように求めています

(ジップダウンロード)。アプリがメインのジッパープロセスを好んで何回もヒットした場合に備えて、これらの追加機能が失敗することは問題ありません。

ここでベストプラクティスは何ですか。二次機能用のREST APIを作成し、すべてを待機リストに入れますか?メインのジッププロセスが終了するたびに、2番目のアプリケーションを作成して新しいプロセスを生成するだけでは不十分です。どうすれば最も冗長性を確保できますか?私はマルチコアclusterセットアップまたはload-balancing on NGINXについては言及していませんが、アプリケーションレベルでアプリケーション機能の優先順位付けをするスマートな方法です。

私はこれがあまりにも広すぎないことを望みます。歓声

答えて

1

まず、非同期I/Oを使用する必要があります。サーバーのどこにでも同期I/Oはありません。これはスケーラブルなnode.jsサーバーを構築するための第1のルールです。

重要なCPU使用率を持つ優先順位の最も高いタスクでは、複数のコアを使用する必要があります。最高の優先度のタスクがzipのダウンロードを作成している場合は、その操作で複数のコアを利用できるようにする必要があります。

クラスタリング(サーバー全体がそれぞれ別のコアにある複数のインスタンスを実行する)、またはzipファイルを作成するための一連のプロセスを作成して、メインプロセスで作業キューを作成することで達成できますこれらの他のプロセスをフィードし、その結果を元に戻します。この2番目のオプションは、クラスタリングよりもコードの方が少し複雑ですが、zipファイルの作成に優先順位をつけ、1つのコアだけが他のサーバーのニーズに対応しています。クラスタリングは、すべてのコアをすべてのサーバーの責任で共有します。

純粋なサーバーアプリケーションレベルでは、サーバーは、どのような種類であっても、その作業の優先順位を付けることができるすべての着信作業の作業キューを維持できます。たとえば、API呼び出しが入っていて、すでにN個のzipファイル要求がキューにある場合は、直ちにAPI呼び出しに失敗して、サーバー上に構築されないようにすることができます。私は個人的には、あなたのAPIコールが本当に重い操作でない限り、そのソリューションを個人的に勧めているとは思わないと思います。なぜなら、定期的に失敗すれば、開発者がAPIを確実に使用することは非常に難しいからです。彼らは一般的にAPIが定期的に失敗するよりも時には遅くなる方が良いと感じるでしょう。

キューを使用する必要がない場合もありますが、単に処理中のZIPファイル要求の数を追跡するためにカウンタを使用できますが、カウンタがすべて正確であることを絶対に確認する必要がありますケース。カウンターに累積エラーがあった場合は、サーバーが再起動されるまですべてのAPI要求が失敗する可能性があります。

+0

あなたのカウント提案が好きです。私はそれが私に言及していたと思います。乾杯 – Dominik

関連する問題