Neden Restify kullanmalıyım?


101

Node.js'de bir REST API oluşturma gereksinimim vardı ve express.js'den muhtemelen istenmeyen özelliklerden kaçınan ve REST API'leri oluşturmak için özel olarak oluşturulmuş bir çerçeve gibi davranan daha hafif bir çerçeve arıyordum. Aynı durum için girişinden yeniden ifade edilmesi önerilir.

Okuma Neden ifade etmeyip yeniden ifade kullanmalısınız? restify iyi bir seçim gibi görünüyordu.

Ama sürpriz ikisini de bir yük ile denediğimde geldi.

Restify'da örnek bir REST API yaptım ve saniyede 1000 istekle doldurdum. Rota bir süre sonra yanıt vermemeye başladı. Express.js üzerinde oluşturulan aynı uygulama hepsini ele aldı.

Şu anda yükü API'ye uyguluyorum

var FnPush = setInterval(function() {           
    for(i=0;i<1000;i++) 
        SendMsg(makeMsg(i));                
}, 1000);

function SendMsg(msg) {
    var post_data = querystring.stringify(msg);
    var post_options = {
        host: target.host,
        port: target.port,
        path: target.path,
        agent: false,
        method: 'POST',
        headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Content-Length': post_data.length,
                "connection": "close"
            }
    };

    var post_req = http.request(post_options, function(res) {});
    post_req.write(post_data);  
    post_req.on('error', function(e) {          
    }); 
    post_req.end();
}

Aldığım sonuçlar mantıklı görünüyor mu? Ve eğer öyleyse, bu senaryoda ifade etmek, yeniden ifade etmekten daha etkilidir? Yoksa onları test etme şeklimde herhangi bir hata var mı?

yorumlara yanıt olarak güncellendi

yeniden biçimlendirme davranışı

  1. 1000'den fazla istekli yük ile beslendiğinde, yalnızca 1 saniyede 1015 isteklere kadar alım yapıp sonra hiçbir şey yapmadan işlemeyi durdurdu. yani. Gelen istekleri saymak için uyguladığım sayaç 1015'ten sonra artmayı durdurdu.

  2. 100 istekli bir yükle beslendiğinde. saniyede 1015'e kadar aldı ve ondan sonra yanıt vermedi.


3
Bunun üzerinden geçtiniz mi : blog.perfectapi.com/2012/… ? Google'da arama yaparsanız, birçok kişinin performansıyla ilgili şüpheleri olduğunu duyacaksınız.
Munim

3
Yolları ayrıştırırken veya veri talep ederken bir yerde bloğu yeniden belirtmek mümkündür ve bunu verimli bir şekilde yapmaz, bu da yüksek yük ile yanıt sürelerinde ani artışlara neden olur. Express.js hafiftir ancak işlevsellik açısından zengindir. Yapılış şekli onu hafifletmeye devam eder çünkü kullanılmayan işlevsellik genel performans üzerinde fazla bir etkiye sahip değildir. Aynı zamanda büyük şirketler tarafından bakımlı ve kullanılıyor, örneklerden biri: MySpace. REST API için Express.js kullanmanın herhangi bir dezavantajını göremiyorum (aslında tam olarak bunu yaptım), aslında gelecekte işlevsellik olduğu için API'nizi geliştirmenize izin veriyor.
moka

1
@Munim: grafikler için teşekkürler. ancak sayfada " not, bu çizelge, Restify performans sorunları çözüldüğü için güncel değil " diyor .. Ancak hiçbir şey çözülmemiş gibi görünüyor. !!
mithunsatheesh

1
@mithunsatheesh Bunları da fark ettim. Ancak yazar yeni çalışmalar yapmadığı için bir tutam tuzla aldım. Github'daki sorun, hala performanstan şikayet edenlere sahip.
Munim

2
Daha fazla (yeniden) örnek kod verebilir misiniz?
Adrian Heine

Yanıtlar:


50

Düzeltme : Bu bilgi artık yanlış, kaydırmaya devam edin!

Komut dosyasında, Restify testinin istenmeyen bir rotada yürütülmesine neden olan bir sorun vardı. Bu, bağlantının canlı tutulmasına ve azaltılmış ek yük nedeniyle performansın artmasına neden oldu.


Bu 2015 ve o zamandan beri durumun çok değiştiğini düşünüyorum. Raygun.io, hapi , express ve restify'ı karşılaştıran yeni bir kriter yayınladı .

Diyor ki:

Ayrıca, Restify'ın bağlantıları canlı tuttuğunu belirledik, bu da aynı istemciden her çağrıldığında bağlantı oluşturma ek yükünü ortadan kaldırır. Adil olmak gerekirse, Restify'ı bağlantıyı kapatmanın yapılandırma bayrağıyla da test ettik. Bu senaryoda, bariz nedenlerle iş hacminde önemli bir düşüş göreceksiniz.

Raygun.io'dan karşılaştırma resmi

Görünüşe göre Restify, daha kolay hizmet dağıtımları için burada bir kazanan. Özellikle aynı istemcilerden çok sayıda istek alan ve hızlı hareket etmek isteyen bir hizmet oluşturuyorsanız. DTrace desteği gibi özelliklere sahip olduğunuzdan, elbette çıplak Node'dan çok daha fazla para kazanıyorsunuz.


1
Bahsettiğiniz blog yazısı, yazar izlediği test süreciyle ilgili daha fazla ayrıntı açıklarsa yararlıdır. Gönderinin altındaki yorumları görün!
mithunsatheesh

1
Evet, bu doğru, kıyaslamanın doğru bir şekilde yapılması zor olduğundan, yazarın süreci ve kodları göndermesi harika olurdu. Bu yüzden bunu bir tuz tanesi olarak aldım ve toplulukla paylaşmak istedim.
Masum

Restify belgelerine göre DTrace'i de destekliyor. mcavage.me/node-restify/#dtrace
Jeff Fairley


3
Lütfen sonuca varmadan önce bahsedilen aynı makaledeki Ek'e dikkat edin.
Vignesh TV

26

Bu 2017 ve Raygun.io'nun hapi , express, restify ve Koa'yı karşılaştıran en son performans testidir .

Koa'nın diğer çerçevelerden daha hızlı olduğunu gösteriyor, ancak bu soru ifade etme ve yeniden ifade etme ile ilgili olduğu için Express, yeniden ifade etmekten daha hızlı.

Ve yazıya yazılır

Bu, Restify'ın gerçekten de ilk testimde bildirilenden daha yavaş olduğunu gösteriyor.

görüntü açıklamasını buraya girin


11

Göre Düğüm Nakavt açıklaması :

restify, Node'da REST web hizmetleri oluşturmak için oluşturulmuş bir node.js modülüdür. restify, sürüm oluşturma, hata işleme ve içerik pazarlığı gibi böyle bir hizmet oluşturmanın birçok zor sorununu kolaylaştırır. Ayrıca, uygulamanızın performans sorunlarının nerede olduğunu hızlı bir şekilde bulmanız için ücretsiz olarak edindiğiniz yerleşik DTrace probları sağlar. Son olarak, başarısız bağlantılarda sizin için yeniden denemeyi / geri çekmeyi diğer bazı ayrıntılarla birlikte yöneten sağlam bir istemci API'si sağlar.

Performans sorunları ve hatalar muhtemelen düzeltilebilir. Belki bu açıklama yeterli motivasyon olacaktır.


5

Ab aracılığıyla OS X üzerinde birden fazla çerçeveyi karşılaştıran benzer bir sorunla karşılaştım. Yaklaşık 1000. talepten sonra yığınlardan bazıları sürekli olarak öldü.

Sınırı önemli ölçüde aştım ve sorun ortadan kalktı.

Maxfiles'inizin ulimit ile olduğunu kontrol edebilir (veya launchctl limiti <sadece OS X) ve maksimumun ne olduğunu görebilirsiniz.

Umarım yardımcı olur.


Hmm .. her bağlantının yerel dosya sistemindeki geçici dosyaları açtığı connect.bodyParser () problemine benziyor gibi görünüyor?
Eric Elliott

İşletim sistemleri genellikle bir işlemin, iş parçacığının ve / veya işletim sisteminin aynı anda idare edebileceği dosya tanımlayıcı sayısı için yapılandırılabilir sınırlara sahiptir. Linux için: stackoverflow.com/questions/760819/… MacOS X için: stackoverflow.com/questions/7578594/…
AndreasPizsa

2

ifade veya yeniden ifade veya mükemmel API ile karıştırıldım. hatta hepsinde bir modül geliştirmeyi denedim. temel gereksinim bir RESTapi yapmaktı. ama sonunda ifade ile sona erdi, tüm çerçevede saniyede yapılan istekle kendimi test etti, ifade diğerlerinden daha iyi sonuç verdi. Bazı durumlarda gölgeleri yeniden ifade etse de, yarışı kazanmak için dikişleri ifade ediyor. Ekspres için beğeniyorum. Ve evet ayrıca lokomotif js ile karşılaştım, bazı MVC çerçevesi express'in üzerine inşa edildi. Ekspres ve yeşim kullanarak eksiksiz MVC uygulaması arayan biri varsa, lokomotif için gidin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.