2016-03-18 12 views
0

Tek seferde kaybetmek istemediğim yeni bir işleve sahibim. Bu işleve ulaşmak için isteklerin sadece% 10'unu almak istiyoruz. Bunu JavaScript’te kolayca yapabilir miyim?Nodejs'deki isteklerin sadece% 10'unu nasıl alabilirim?

Başımın üstünde Array'ı kullanarak istekleri depolamayı ve bunun sadece bir kısmını seçmeyi düşünüyorum. Bunu yapmanın daha iyi bir yolu var mı?

Ben istekleri geri kalanı düştü eğer umurumda değil Express

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 
} 

gelen kod parçası var. Şu anda 2500 isteğimiz var ve korkarım ki bu işleve tek bir seferde çarparsam işler bozulur. Oldukça yoğun bir bilgi işlem kodu.

+3

Açıkçası hiç bir fikrim yok, ama belki de ((Math.floor (Math.random() * 100)% 10) == 0) // kodu yürütün? 'Iyi bir başlangıç ​​noktası olabilir mi? – Jhecht

+0

Aslında bu iyi bir fikir. – toy

+0

((Math.floor (Math.random() * 10) === 0)) ... naif bir yaklaşım olarak .. –

cevap

1

Bu oldukça basit değil mi? Ya da ben

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

A/B testi çeşit bu kullanmayın lütfen ... devlet yok Tabii

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

+1 Bu en basit çözümdür. Elbette, bazı feragatnameler geçerlidir. Bu öngörülebilir veya ölçeklenebilir değildir. Daha kalıcı bir çözüm için bir yük dengeleyici kullanın. –

+0

Neden öngörülebilir değil? 10 isteğin her 9'u eski işlevselliği sağlar. Bana öngörülebilir görünüyor. :) – aquinas

+0

Evet, tek bir sunucu ortamında tahmin edilebilir. Yine de iki uygulama sunucunuz varsa düşünün. Süreçlerin her birinin kendi sayacı olacaktır, bu nedenle bazen bir kerede 2 istek alırsınız ve bazen bir tanesi hizmete girmeden önce 18 isteği atlar. –

0

... sorunuzu şeyleri anlamak değilim veya kanarya konuşlandırmaları. Bunun için N örneklerine ihtiyaç duyarsınız ve yavaşça yeni olana yönlendirin.

Yukarıdaki gibi veritabanı çağrıları için kullanıyorum, rotayı her vurduğunda yapmayacağım.