क्या Node.js वास्तव में स्केलेबिलिटी बढ़ाता है?


21

मैं C10K समस्या के बारे में पढ़ रहा हूं, और विशेष रूप से नोट वह हिस्सा है जो एसिंक्रोनस सर्वर I / O को संदर्भित करता है। http://www.kegel.com/c10k.html#aio

मेरा मानना ​​है कि यह बहुत अधिक संक्षेप में बताता है कि Node.js सर्वर पर क्या करता है, थ्रेड को उपयोगकर्ता अनुरोधों को संसाधित करने की अनुमति देकर I / O इंटरप्रेट (ईवेंट) पर निर्भर करते हुए नौकरियों के थ्रेड्स को अधिसूचित करने के लिए, बजाय इसके लिए थ्रेड जिम्मेदार है। पूर्ण सीपीयू नौकरी। थ्रेड अन्य चीजों (गैर-अवरोधक) के साथ प्राप्त कर सकता है, और जब नौकरी की जाती है (जैसे कोई फ़ाइल मिल जाती है या वीडियो संपीड़ित होता है) को अधिसूचित किया जाता है।

इसके बाद इसका मतलब है कि सॉकेट्स के लिए एक धागा अधिक 'उपलब्ध' है और इसलिए सर्वर पर उपयोगकर्ताओं के लिए है।

तब मुझे यह पता चला: http://teddziuba.com/2011/10/standard-talk-on-event-loops.html

यहां लेखक का दावा है कि हालांकि घटना संचालित फ्रेमवर्क (थ्रेडिंग में बाधा), थ्रेड को मुक्त कर सकता है, यह वास्तव में सीपीयू को काम करने की मात्रा को कम नहीं करता है! यहाँ तर्क यह है कि अगर, कहते हैं, एक उपयोगकर्ता ने अपलोड किए गए वीडियो को संपीड़ित करने का अनुरोध किया है, तो सीपीयू को अभी भी वास्तव में यह काम करना है, और अवरुद्ध हो जाएगा, जबकि वह ऐसा करता है (सरलता के लिए, यहाँ समानता के बारे में भूल जाता है - जब तक आप पता है बेहतर!)।

मैं एक सीधा कोडर हूं, सर्वर एडमिन या ऐसा कुछ भी नहीं। मुझे बस यह जानने में दिलचस्पी है: 'क्लाउड कंप्यूटिंग' के देवताओं से एक उपहार है Node.js या क्या यह सब गर्म हवा है, और वास्तव में स्केलेबिलिटी में सुधार करके कंपनियों के समय और / या पैसे की बचत नहीं होगी?

बहुत धन्यवाद।


12
सबसे पहले टेड एक ट्रोल है, दूसरा नोड.जेएस आईओ-बाउंड एप्लिकेशन के लिए है जो सीपीयू-बाउंड एप्लिकेशन नहीं है। आप जो चाहते हैं, वह दोनों का मेल है। कुछ भी सीपीयू-बाउंड एक नए धागे / प्रक्रिया में चला जाता है। कुछ भी IO- बाउंड एक इवेंट लूप में जाता है।
रेयानोस

1
+! वह आदमी निश्चित रूप से एक ट्रोल है।
पैट्रिक ह्यूजेस

यह इस बात पर निर्भर करता है कि आप क्या तुलना करते हैं - यदि आप अभी भी अपाचे (किसी कारण से) का उपयोग करते हैं - तो नोड को देवताओं से उपहार है, लेकिन अगर आप इसकी तुलना नगनेक्स से करते हैं - सुधार बहुत कम कठोर हैं, और नोड भी धीमा है। (दस बार धीमा, एक प्रतिक्रिया उत्पन्न करने के लिए 20ms बनाम 2ms, हमारे परीक्षणों में BUT , Nginx मध्यम रूप से भारी भार के तहत 504 दे रहा था, और नोड सामान्य प्रतिक्रिया दे रहा था)।
1869 में c69

अब आप इसे लोगों का उल्लेख करते हैं, ट्रोल लड़का स्पष्ट रूप से एक ट्रोल है। @ c69 यह अच्छी जानकारी है, बहुत बहुत धन्यवाद।
एलेक्स

आपका "घटना पर सीधे बात लूप" लिंक अब काम करता है।
रॉबर्ट हार्वे

जवाबों:


20

बेशक किसी भी सीपीयू बाध्य काम सीपीयू उपयोग करने के लिए जा रहा है। यह जो कुछ भी भाषा या ढांचे आप में लिखने में सीपीयू ब्लॉक करने के लिए जा रहा है।

Node.js के लिए बहुत अच्छा है जब आपके पास I / O बाध्य कार्य है, सीपीयू बाध्य नहीं है। मैं नोड में बड़े कार्य करने नहीं करेंगे, हालांकि यह किया जा सकता है। Node.js वास्तविक समस्याओं को हल करता है, न कि काल्पनिक या कल्पित लोगों को जैसे कि रिट्राइव नंबर सर्वर । यह "गर्म हवा" नहीं है।


बस कुछ बेंचमार्क की जाँच कर रहा है और वास्तव में यह पृष्ठों की सेवा में तेजी से रास्ता दिखाता है : zgadzaj.com/… .. मुझे लगता है कि यह वही है जो मैं था ...
एलेक्स

3
@ एलेक्स डब्ल्यू: उन बेंचमार्क के बारे में अच्छी बात यह है कि आप अनिवार्य रूप से स्टैटिक कंटेंट परोस रहे हैं। मेरे लाखों हिट्स ए डे पीस देखें। इसके लिए PHP दुभाषिया को स्पिन करना बेकार है। फ़ाइल निर्देशिकाओं की सेवा के लिए नोड-स्टैटिक जैसा कुछ देखें ।
जोश के

@AlexW, बस याद दिलाने के लिए कि zgadzaj.com/… नोड .js 0.1.103 का उपयोग करता है, जो अब पुराना है !!
सम्यक भूता

4

हालांकि C10K पेपर कार्यान्वयन विवरणों के संबंध में कुछ हद तक पुराना है, घटना-आधारित संगामिति (रिएक्टर मॉडल) अभी भी कुछ मायनों में पूर्वनिर्धारित समय-निर्धारण से बेहतर है। उदाहरण के लिए, प्रीमेप्टिव शेड्यूलिंग मॉडल थ्रेड को शेड्यूल कर सकते हैं, जबकि वे IO अवरुद्ध हैं। यह नोड (और रूबीज इवेंट मशीन और पायथन ट्विस्टेड जैसे अन्य उपकरण) को वास्तविक काम करने और अधिक समय अवरुद्ध करने में अधिक समय खर्च करके उपलब्ध चक्रों का बेहतर उपयोग करने की अनुमति देता है।


-1

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


2
यह वास्तव में हालांकि Node.JS उत्साह की व्याख्या नहीं करता है। Node.JS का प्राथमिक लाभ एक ही थ्रेड से कई अनुरोधों को जल्दी से संभालने और भेजने की क्षमता है, न कि प्रभावी रूप से भारी पृष्ठभूमि वाले वर्कलोड को संभालने के लिए, जो आपके उत्तर को संबोधित नहीं करता है।
रॉबर्ट हार्वे

नोड.जेएस का प्राथमिक लाभ सामने और बैकएंड के लिए एक ही भाषा है। इन सभी अन्य दावों को अधिक महत्वपूर्ण बनाने के लिए केवल फुलाना है।
whatsisname

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