2016-03-18 7 views
0

私は一度に失うことをやりたくない新しい機能を持っています。この機能を使用するためのリクエストの10%を選択するだけです。私はJavaScriptで簡単にできるのだろうか?Nodejで要求の10%しか選択できません。

私の頭の上で、私はArrayを使ってリクエストを保存し、その一部を選ぶことを考えています。これを行うより良い方法はありますか?

私は要求の残りの部分が削除されている場合、私は気にしないエクスプレス

doSomething: function(request, response) { 

    // new functionality << how can I control how many requests hitting this block of code? Like 10 percent of the requests 

    // old functionality 
} 

からのコードのこの部分を持っています。今は2500件のリクエストがありますが、私はこの機能を一度に実行すると物事が崩れてしまうのではないかと心配しています。それは非常に集中的な計算コードです。

+3

私は正直に分かりませんが、おそらく 'if((Math.floor(Math.random()* 100)%10)== 0)//コードを実行しますか? – Jhecht

+0

実際これは良い考えです。 – toy

+0

if((Math.floor(Math.random()* 10)=== 0))...単純なアプローチとして.. –

答えて

1

これは簡単ではありませんか?あるいは、もちろん

var numRequests=0; 
//snip 
doSomething: function(request, response) { 
    if (numRequests++ %10 === 0){ 
     //new functionality 
    } 
    else{ 
     //old 
    }   
} 
+0

+1これは最も簡単な解決策です。もちろん、いくつかの免責事項が適用されます。これは予測可能でもスケーラブルでもありません。より恒久的な解決策を得るには、ロードバランサを使用します。 –

+0

なぜそれは予測できないのですか? 10個の要求のうち9個ごとに古い機能が使用されます。私には予測可能なようだ。 :) – aquinas

+0

はい、単一のサーバー環境では予測可能です。あなたは2つのアプリケーションサーバーを持っている場合を考えてみましょう。プロセスにはそれぞれ独自のカウンタがあるため、一度に2つのリクエストを取得することがあり、場合によっては1つ前に18リクエストをスキップして処理することもあります。 –

0

...私はあなたの質問で何かを理解していないです状態を持っていない...

doSomething: function(request, response) { 
    if (Math.random() < 0.1) { 
    // new functionality 
    } else { 
    // old functionality 
    } 
} 

A/Bテストのいくつかの種類のためにこれを使用しないでくださいカナリー展開。そのためには、N個のインスタンスを必要とし、新しいインスタンスにゆっくりとルーティングします。

私は上記の例をデータベース呼び出しに使用していますが、ルートがヒットするたびに行う必要はありません。

関連する問題