5

के साथ एक उच्च प्रदर्शन node.js अनुप्रयोग का निर्माण करना मैं node.js मास्टर नहीं हूं, इसलिए मैं इसके बारे में और अधिक दृष्टिकोण देखना चाहता हूं।क्लस्टर और नोड-वेबवर्कर

मैं एक HTTP node.js वेब सर्वर बना रहा हूं जो न केवल समवर्ती कनेक्शनों को संभालना चाहिए बल्कि लंबे समय तक चलने वाली नौकरियों को भी संभालना चाहिए। डिफ़ॉल्ट रूप से node.js एक प्रक्रिया पर चलता है, और यदि कोड का एक टुकड़ा है जो किसी भी बाद के कनेक्शन को निष्पादित करने में लंबा समय लगता है, तब तक कोड को तब तक प्रतीक्षा करनी चाहिए जब तक वह पिछले कनेक्शन पर क्या कर रहा है।

उदाहरण के लिए:

var http = require('http'); 
http.createServer(function (req, res) { 

    doSomething(); // This takes a long time to execute 

    // Return a response 
}).listen(1337, "127.0.0.1"); 

तो मैं node-webworker लाइब्रेरी का उपयोग कर अलग धागे में सभी लंबी चलने वाली नौकरियों को चलाने के लिए सोच रहा था:

var http = require('http'); 
var sys = require('sys'); 
var Worker = require('webworker'); 
http.createServer(function (req, res) { 

    var w = new Worker('doSomething.js'); // This takes a long time to execute 

    // Return a response 
}).listen(1337, "127.0.0.1"); 

और पूरी बात अधिक performant बनाने के लिए, मैं प्रत्येक सीपीयू कोर के लिए एक नई नोड प्रक्रिया बनाने के लिए cluster का भी उपयोग करने के लिए सोचा।

इस तरह से मैं cluster साथ विभिन्न प्रक्रियाओं के माध्यम से ग्राहक कनेक्शन को संतुलित करने की उम्मीद में (अगर मैं एक क्वाड-कोर पर चला की 4 नोड प्रक्रियाओं मान लीजिए), और फिर node-webworker साथ अलग धागे पर लंबी चलने वाली नौकरी पर अमल।

क्या इस कॉन्फ़िगरेशन में कुछ गड़बड़ है?

उत्तर

0

आप क्यू-ऑपर 8 की जांच करना चाहेंगे क्योंकि इसे इस तरह की चीज़ के लिए अधिक लचीला वास्तुकला प्रदान करना चाहिए। पर पूर्ण जानकारी:

https://github.com/robtweed/Q-Oper8

+1

अंतिम 2 साल पहले अपडेट किया गया –

3

मुझे लगता है कि इस पोस्ट में कुछ महीने पुरानी है, लेकिन मैं इस घटना में इस के लिए एक टिप्पणी प्रदान करने के लिए है कि कोई साथ आता है चाहता था।

"डिफ़ॉल्ट रूप से node.js एक प्रक्रिया पर चलता है, और यदि कोड का एक टुकड़ा है जो किसी भी बाद के कनेक्शन को निष्पादित करने में लंबा समय लगता है, तब तक कोड को तब तक इंतजार करना चाहिए जब तक वह पिछले कनेक्शन पर क्या कर रहा है।"

^- यह पूरी तरह से सच नहीं है। अगर कुछ करो(); प्रतिक्रिया वापस भेजने से पहले पूरा करने के लिए आवश्यक है, फिर हां, लेकिन यदि यह नहीं है, तो आप Node.js के मूल में आपके लिए उपलब्ध असीमित कार्यक्षमता का उपयोग कर सकते हैं, और तुरंत वापस लौट सकते हैं, जबकि यह आइटम प्रक्रिया करता है पृष्ठभूमि।

है कि मैं क्या कर रहा हूँ समझाने के लिए अपने सर्वर में निम्न कोड जोड़कर देखा जा सकता है की एक त्वरित उदाहरण: सर्वर कई बार

setTimeout(function(){ 
    console.log("Done with 5 second item"); 
}, 5000); 

तो आप हिट, आप ग्राहक पर तत्काल प्रतिक्रिया मिल जाएगा पक्ष, और अंततः प्रतिक्रिया भेजने के बाद संदेश सेकंड के साथ कंसोल भरें देखें।

1

तुम सिर्फ क्यों कॉपी और एक फ़ाइल में अपने कोड पेस्ट और JXcore पर की तरह

$ jx mt-keep:4 mysourcefile.js 

चलाने के लिए और देखें कि यह कैसे करता है नहीं है। यदि आपको सिंगल थ्रेडिंग की सुरक्षा छोड़ने के बिना वास्तविक मल्टीथ्रेडिंग की आवश्यकता है तो जेएक्स को आजमाएं। इसका 100% नोड। जेएस 0.12+ संगत। आप धागे को बढ़ा सकते हैं और उनमें से प्रत्येक के अंदर एक अलग node.js ऐप चला सकते हैं।

संबंधित मुद्दे