मान लीजिए कि मैं 3-स्तरीय वेबसाइट बना रहा हूं, बैंग एंड पर मोंगो डीबी और कुछ वास्तव में हल्के जावास्क्रिप्ट ब्राउज़र में (आइए केवल फॉर्मों पर सत्यापन करें, शायद कुछ फैंसी नियंत्रण जो कुछ AJAX अनुरोधों को बंद कर देते हैं)।गहन प्रसंस्करण के लिए नोड.जेएस का उपयोग किया जाना चाहिए?
मुझे 'मध्यम' स्तर के लिए एक तकनीक चुनने की आवश्यकता है (हम इसे उप-स्तरों में विभाजित कर सकते हैं लेकिन यह विवरण यहां पर केंद्रित नहीं है, केवल समग्र तकनीक विकल्प), जहां मैं कुछ कच्चे डेटा को कम करना चाहता हूं डीबी से बाहर आ रहा है, और इसे कुछ HTML में प्रस्तुत करें जो मैं ब्राउज़र पर धक्का देता हूं। एक काफी आम पतली ग्राहक वेब वास्तुकला।
मेरी सुरक्षित पसंद जावा में इस मध्य स्तर को लागू करने के लिए, जोंगो जैसे कुछ पुस्तकालयों का उपयोग करके मोंगो डीबी से बात करने के लिए और शायद जैक्सन से मार्शल/अनमारशाल जेएसओएन से अपने फैंसी नियंत्रणों से बात करने के लिए जब वे AJAX अनुरोध करते हैं। और सर्वर पर मेरे एचटीएमएल को प्रस्तुत करने के लिए कुछ जावा टेम्पलेटिंग फ्रेमवर्क।
मैं जावास्क्रिप्ट (अच्छा भागों की तरह:
हालांकि, मैं वास्तव में यह सब बाहर खिड़की फेंक और इस बीच श्रेणी के लिए Node.js का उपयोग कर निम्न कारणों से, के विचार से intrigued रहा हूँ), और चलिए इस एप्लिकेशन के व्यवसाय तर्क के लिए कहते हैं कि यह जावा से अधिक अभिव्यक्तिपूर्ण होगा।
यह हर जगह जावास्क्रिप्ट है। स्टैक पर कहीं भी काम करते समय, भाषाओं और वास्तव में ओओ और कार्यात्मक प्रतिमानों के बीच स्विच करने की आवश्यकता नहीं है। स्तरों के बीच कोई अनुवाद नलसाजी नहीं है, जेएसओएन हर जगह मूल रूप से समर्थित है।
मैं ग्राहक और सर्वर पर सत्यापन तर्क का पुन: उपयोग कर सकता हूं।
यदि भविष्य में मैं ब्राउज़र में एचटीएमएल प्रतिपादन क्लाइंट-साइड करने का निर्णय लेता हूं, तो मैं मौजूदा टेम्पलेट्स को बैकबोन जैसे कुछ कम रिफैक्टरिंग/रीस्टस्टिंग प्रयास के साथ पुन: उपयोग कर सकता हूं।
यदि आप इस बिंदु पर हैं और नोड की तरह हैं, तो उपरोक्त सभी स्पष्ट दिखाई देंगे। तो मुझे नोड सही चुनना चाहिए?
लेकिन ... यह वह जगह है जहां यह मेरे लिए गिरती है: जैसा कि हम सभी जानते हैं कि नोड एक थ्रेडेड एसिंक I/O वेब सर्वर मॉडल के आसपास आधारित है। डेटा के लिए सर्विसिंग अनुरोधों के संदर्भ में यह मेरी स्केलेबिलिटी और प्रदर्शन के लिए बहुत अच्छा है, लेकिन मेरे व्यवसाय तर्क के बारे में क्या? मेरे टेम्पलेट प्रतिपादन के बारे में क्या? क्या यह सामान एकल धागे पर सभी अनुरोधों के लिए एक बड़ी बाधा उत्पन्न नहीं करेगा?
दो स्पष्ट समाधान दिमाग में आते हैं, लेकिन उनमें से कोई भी सही बैठता है:
वहाँ में 'अवरुद्ध' व्यापार तर्क रखें और सिर्फ नोड उदाहरणों में से एक क्लस्टर और एक लोड संतुलन, सेवा अनुरोध करने के लिए उपयोग सच समानांतर में। ठीक है, तो नोड सिर्फ पहले स्थान पर बहु-थ्रेड क्यों नहीं है? या यह हमेशा विचार था, इसे सरल बेवकूफ रखने के लिए और आधार मामले में बहु थ्रेडेड जटिलता की संभावना से बचने के लिए, यदि प्रोग्रामर बहु-कोर प्रोसेसिंग पावर की वांछित है तो प्रोग्रामर अतिरिक्त सेटअप कार्य कर सकता है?
एक एकल नोड उदाहरण रखें, और इसे किसी अन्य, म्यूटि-थ्रेडेड, ऐप सर्वर पर चल रहे अपने व्यावसायिक तर्क के कुछ जावा कार्यान्वयन के लिए कॉल करके नॉन-अवरुद्ध रखें। ठीक है, यह विकल्प डीबी को सीआरयूडी अनुरोधों के प्रदर्शन और स्केलेबिलिटी में संभावित लाभ के अलावा, नोड का उपयोग करने के लिए सूचीबद्ध हर प्रो को पूरी तरह से हटा देता है (वास्तव में यह जावा का उपयोग करने पर जटिलता को जोड़ता है)।
कौन मुझे मेरे सवाल की बात करने के अंत में ले जाता है - मैं नोड पहेली के कुछ बहुत बड़ा महत्वपूर्ण हिस्सा याद आ रही है, मैं बस अपना तथ्यों को पूरी तरह से गलत है, या नोड बस पर व्यापार तर्क क्रंचिंग के लिए अनुपयुक्त है सर्वर? एक और तरीका रखो, क्या नोड डेटाबेस पर बैठने के लिए उपयोगी है और कई सीआरयूडी अनुरोधों को अन्य निष्पादन और स्केलेबल तरीके से सेवा प्रदान करता है जो I/O पर अवरुद्ध करता है? और प्रदर्शन और स्केलेबिलिटी के किसी भी उचित स्तर को बनाए रखने के लिए, आपको नीचे दिए गए कुछ स्तरों या यहां तक कि क्लाइंट-साइड में अपने सभी व्यावसायिक तर्क करना होगा?
नोड पर सभी चर्चा को ध्यान में रखते हुए, मुझे उम्मीद थी कि यह इस तालिका से अधिक लाएगा। मुझे अन्यथा आश्वस्त होना अच्छा लगेगा!
कारण नोड एकल धागा है इसके सभी मौजूदा अवतारों में जावास्क्रिप्ट है (योजनाबद्ध या "किनारे" अवतार नहीं) एकल धागा है। इस नियम के कुछ अपवाद हैं, जैसे क्लाइंट में वेबवर्कर्स, लेकिन फिर भी आपका थ्रेडिंग मॉडल अन्य भाषाओं में आपके द्वारा उपयोग किए जाने वाले कार्यों से अलग है। – Matt
अच्छा बिंदु, मैं वास्तव में वास्तव में बहु-थ्रेडेड का मतलब नहीं था, जैसे धागे डेटा साझा कर सकते हैं, मेरा मतलब वेबवर्कर्स के समान कुछ था - एक दूसरे के ज्ञान के बिना, समानांतर में अनुरोधों के लिए अनुरोधों का एक तरीका, बाहर डिब्बा। यह स्पष्ट रूप से क्लोडिंग नोड सर्वर द्वारा हासिल किया जा सकता है - मेरा सवाल यह है कि उपयोग का मामला क्या है जहां आप ऐसा नहीं करना चाहते हैं? एक नोड वेब सर्वर का वास्तविक व्यावहारिक उपयोग क्या है? – davnicwil