मुझे Restify का उपयोग क्यों करना चाहिए?


101

मुझे नोड.जेएस में आरईएसटी एपीआई का निर्माण करने की आवश्यकता थी और एक्सप्रेस.जेएस की तुलना में अधिक हल्के वजन वाले ढांचे की तलाश थी जो संभवतः अवांछित सुविधाओं से बचा जाता है और आरईएसटी एपीआई के निर्माण के लिए कस्टम-निर्मित ढांचे की तरह काम करेगा। उसी मामले के लिए अपने इंट्रो से बहाल करने की सिफारिश की जाती है।

पढ़ना क्यों बहाल करने और व्यक्त नहीं का उपयोग करें? ऐसा लग रहा था कि पुनर्स्थापना एक अच्छा विकल्प है।

लेकिन आश्चर्य तब हुआ जब मैंने दोनों को एक लोड के साथ आज़माया।

मैंने रिस्टिफाई पर एक नमूना REST एपीआई बनाया और प्रति सेकंड 1000 अनुरोधों के साथ इसे बाढ़ दिया। मेरे लिए आश्चर्य की बात है कि थोड़ी देर के बाद मार्ग ने जवाब देना शुरू नहीं किया। एक्सप्रेस पर निर्मित एक ही ऐप। सभी को संभाला।

मैं वर्तमान में एपीआई के माध्यम से लोड को लागू कर रहा हूं

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();
}

क्या मुझे जो परिणाम मिले हैं वह समझदार लग रहे हैं? और यदि ऐसा है तो इस परिदृश्य में पुनर्स्थापना की तुलना में अधिक कुशल है? या जिस तरह से मैंने उनका परीक्षण किया उसमें कोई त्रुटि है?

टिप्पणियों के जवाब में अपडेट किया गया

बहाल करने का व्यवहार

  1. जब इसे 1000 से अधिक req.s के भार के साथ खिलाया जाता है, तो यह 1015 req.s तक केवल 1 सेकंड में प्राप्त करना बंद कर देता है और फिर कुछ भी नहीं करता है। अर्थात। आने वाले अनुरोधों की गिनती के लिए लागू काउंटर मैं 1015 के बाद वेतन वृद्धि रोक दिया।

  2. जब भी 100 reqs के भार के साथ खिलाया। प्रति सेकंड यह 1015 तक प्राप्त हुआ और उसके बाद गैर उत्तरदायी हो गया।


3
क्या आप इससे गुज़रे हैं : blog.perfectapi.com/2012/… ? यदि आप Google पर खोज करते हैं, तो आप बहुत से लोगों को इसके प्रदर्शन के बारे में संदेह होने के बारे में सुनेंगे।
मुनीम

3
यह संभव है कि मार्गों को पार्स करते समय या डेटा का अनुरोध करते समय कहीं ब्लॉक को बहाल करें, और इसे कुशलता से न करें, जो उच्च भार के साथ प्रतिक्रिया समय में स्पाइक्स की ओर जाता है। Express.js हल्के लेकिन कार्यक्षमता में समृद्ध है। जिस तरह से यह बनाया गया है, अभी भी इसे हल्का बनाता है क्योंकि अप्रयुक्त कार्यक्षमता का ओवरल प्रदर्शन पर अधिक प्रभाव नहीं पड़ता है। साथ ही यह अच्छी तरह से रखरखाव और बड़ी कंपनियों द्वारा उपयोग किया जाता है, उदाहरणों में से एक: माइस्पेस। मुझे REST API के लिए Express.js का उपयोग करने का कोई भी नुकसान नहीं दिख सकता है (मैंने वास्तव में वास्तव में ऐसा ही किया था), यह वास्तव में आपको भविष्य में आपके एपीआई में सुधार करने की अनुमति देता है क्योंकि कार्यक्षमता है।
मोका

1
@ मुनीम: रेखांकन के लिए धन्यवाद। लेकिन पेज कहता है " ध्यान दें, यह चार्ट पुराना हो चुका है क्योंकि रिस्टोरिफ़ परफॉर्मेंस के मसले हल हो गए थे " .. लेकिन लगता है जैसे कुछ भी हल नहीं हुआ है !!
मृत्युंजय

1
@mithunsatheesh मैंने उन पर भी ध्यान दिया। लेकिन चूंकि लेखक ने ताजा अध्ययन नहीं किया, इसलिए मैंने इसे एक चुटकी नमक के साथ लिया। गितुब के मुद्दे पर अभी भी लोगों को प्रदर्शन के बारे में शिकायत है।
मुनीम

2
क्या आप अधिक (रिस्टोर) सैंपल कोड दे सकते हैं?
एड्रियन हेन

जवाबों:


50

Corrigendum : यह जानकारी अब गलत है, स्क्रॉल करते रहें!

स्क्रिप्ट के साथ एक समस्या थी जिसके कारण अनइंस्टॉल किए गए रूट पर रेस्टिफाई टेस्ट आयोजित किया गया था। इसने कनेक्शन को जीवित रखा जिससे ओवरहेड कम होने के कारण बेहतर प्रदर्शन हुआ।


यह 2015 है और मुझे लगता है कि स्थिति बहुत बदल गई है। Raygun.io ने हाल ही में बेंचमार्क की तुलना hapi, एक्सप्रेस और रीस्टोर की पोस्ट की है

इसे कहते हैं:

हमने यह भी पहचाना कि रिस्टिफाई कनेक्शन को जीवित रखता है जो एक ही क्लाइंट से कॉल किए जाने पर हर बार कनेक्शन बनाने के ओवरहेड को हटा देता है। निष्पक्ष होने के लिए, हमने कनेक्शन बंद करने के कॉन्फ़िगरेशन ध्वज के साथ पुनर्स्थापना का भी परीक्षण किया है। आप स्पष्ट कारणों से उस परिदृश्य में थ्रूपुट में पर्याप्त कमी देखेंगे।

Raygun.io से बेंचमार्क छवि

ऐसा लगता है कि रेस्टीफाई एक ऐसा विजेता है जो आसान सेवा परिनियोजन के लिए यहां है। खासकर यदि आप एक ऐसी सेवा का निर्माण कर रहे हैं जिसमें एक ही क्लाइंट से बहुत सारे अनुरोध प्राप्त होते हैं और जल्दी से आगे बढ़ना चाहते हैं। आप निश्चित रूप से नग्न नोड की तुलना में हिरन के लिए बहुत अधिक धमाकेदार हो सकते हैं क्योंकि आपके पास बेक्ड समर्थन जैसे विशेषताएं हैं।


1
यदि आप जिस ब्लॉग पोस्ट का उल्लेख कर रहे हैं वह उपयोगी है, यदि लेखक ने परीक्षण प्रक्रिया पर अधिक विवरण प्रकट किया है। पोस्ट के नीचे टिप्पणी देखें!
मृत्युंजय

1
हां, यह सही है, क्योंकि बेंचमार्किंग सही तरीके से करना मुश्किल है, यह बहुत अच्छा होगा यदि लेखक प्रक्रिया और कोड पोस्ट करता है। इसलिए मैंने इसे नमक के दाने के रूप में लिया और समुदाय के साथ साझा करना चाहता था।
मासुम

रिस्टिफ़ डॉक्स के अनुसार, यह DTrace का भी समर्थन करता है। mcavage.me/node-restify/#dtrace
जेफ़ फेयरली


3
कृपया निष्कर्ष में आने से पहले उसी लेख में परिशिष्ट पर ध्यान दें।
विग्नेश टीवी

26

यह 2017 और Raygun.io द्वारा नवीनतम प्रदर्शन परीक्षण हैपी, एक्सप्रेस, रिस्टोर और कोआ की तुलना है।

यह दर्शाता है कि कोआ अन्य रूपरेखाओं की तुलना में तेज है, लेकिन जैसा कि यह सवाल एक्सप्रेस और रीस्टोर के बारे में है, एक्सप्रेस को बहाल करने की तुलना में तेज है।

और यह पोस्ट में लिखा है

इससे पता चलता है कि वास्तव में पुनर्स्थापना मेरे प्रारंभिक परीक्षण में बताई गई तुलना में धीमी है।

यहां छवि विवरण दर्ज करें


11

नोड नॉकआउट विवरण के अनुसार :

पुनर्स्थापना नोड में REST वेब सेवाएँ बनाने के लिए बनाया गया एक node.js मॉड्यूल उद्देश्य है। पुनर्स्थापना इस तरह की सेवा के निर्माण की कठिन समस्याओं के बहुत सारे बनाता है, जैसे कि संस्करणकरण, त्रुटि से निपटने और सामग्री-बातचीत आसान। यह आपके द्वारा प्रदत्त अनुप्रयोग की प्रदर्शन समस्याओं के बारे में जानने के लिए मुफ्त में मिलने वाली DTrace जांच में भी उपलब्ध कराता है। अंत में, यह एक मजबूत क्लाइंट एपीआई प्रदान करता है जो कुछ अन्य बारीकियों के साथ, असफल कनेक्शन पर आपके लिए रिट्री / बैकऑफ़ को संभालता है।

प्रदर्शन के मुद्दे और कीड़े शायद तय किए जा सकते हैं। शायद वह विवरण पर्याप्त प्रेरणा होगी।


5

मैं एक ऐसी ही समस्या में भाग लिया OS पर एक्स एक्स पर कई चौखटे बेंचकर। लगभग 1000 वें अनुरोध के बाद, कुछ ढेर लगातार मर गए।

मैंने सीमा को महत्वपूर्ण रूप से उछाल दिया, और समस्या गायब हो गई।

आप देख सकते हैं कि आपकी अधिकतम सीमाएं ulimit के साथ हैं , (या लॉन्चक्टल लिमिट <OS X केवल) और देखें कि अधिकतम क्या है।

उम्मीद है की वो मदद करदे।


हम्म .. लगता है कि यह connect.bodyParser () समस्या के समान हो सकता है, जहां हर कनेक्शन स्थानीय फाइल सिस्टम पर अस्थायी फ़ाइलें खोलता है?
एरिक इलियट

OS में आमतौर पर फ़ाइल डिस्क्रिप्टर की प्रक्रिया पर विन्यास योग्य सीमाएं होती हैं, एक प्रक्रिया, धागा और / या OS एक साथ संभाल सकता है। Linux के लिए: stackoverflow.com/questions/760819/… MacOS X के लिए: stackoverflow.com/questions/7578594/…
AndreasPizsa

2

मैं एक्सप्रेस के साथ उलझन में था या उसे पुनर्स्थापित या परिपूर्ण कर रहा था। यहां तक ​​कि उन सभी में एक मॉड्यूल विकसित करने की कोशिश की। मुख्य आवश्यकता एक रेस्टापी बनाने की थी। लेकिन अंत में एक्सप्रेस के साथ समाप्त हो गया, सभी फ्रेमवर्क पर किए गए प्रति सेकंड अनुरोध के साथ मेरे स्वयं का परीक्षण किया, एक्सप्रेस ने दूसरों की तुलना में बेहतर परिणाम दिया। हालांकि कुछ मामलों में आउटशाइन एक्सप्रेस को बहाल किया जाता है लेकिन दौड़ जीतने के लिए सीम व्यक्त करते हैं। मैं व्यक्त करने के लिए अंगूठे। और हाँ, मैं लोकोमोटिव js में भी आया, कुछ MVC फ्रेमवर्क एक्सप्रेस के शीर्ष पर बना। यदि कोई एक्सप्रेस और जेड का उपयोग करके संपूर्ण एमवीसी ऐप की तलाश कर रहा है, तो लोकोमोटिव के लिए जाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.