2013-06-22 6 views
5

मैं जावा में एसिंक्रोनस I/O के फायदे पर विशेष रूप से एप्लिकेशन स्टैक डिज़ाइनिंग से विवरण खोज रहा हूं।असिंक्रोनस I/O - जावा

मैं Node.js, Tornedo आदि

की तरह कार्यक्रम चालित सर्वर के कई उदाहरण का सामना करना पड़ा, तो मैं क्या समझने के लिए क्यों किसी को JBoss या Weblogic अनुप्रयोग सर्वर विस्थापित साथ जावा ईई में एक पूरी आवेदन ढेर होने हैं है में विफल रहा है एक घटना संचालित आर्किटेक्चर।

यहां तक ​​कि ये सर्वर गैर-अवरुद्ध I/O का समर्थन करते हैं। हां, वे प्रत्येक अनुरोध के लिए थ्रेड आवंटित कर रहे हैं, लेकिन जगह पर थ्रेडपूल के साथ, क्या संसाधन अच्छे प्रदर्शन पैरामीटर के भीतर नहीं होंगे?

कृपया मुझे निम्नलिखित पंक्तियों के साथ कुछ इनपुट प्रदान करें।

  1. क्यों अपाचे-बिलाव/JBoss/Weblogic के साथ एक पारंपरिक जावा ईई वास्तुकला एक घटना चालित वास्तुकला के लिए एक कदम मानता है।
  2. क्या ईवेंट संचालित आर्किटेक्चर डिवाइस-अज्ञेय वेबसाइट/एप्लिकेशन प्रदान करने में सहायक होगा।
  3. क्लाउड पर एप्लिकेशन को डिज़ाइन करते समय, क्या हम एसिंक्रोनस I/O के लिए जाते हैं।
  4. पारंपरिक जावा ईई आर्किटेक्चर की तुलना में घटना संचालित आर्किटेक्चर प्रदर्शन बेहतर है या यह एक मिथक है।

उत्तर

2

महत्वपूर्ण अवधारणाओं है कि आप का उल्लेख किया है से एक है:

हाँ, वे प्रत्येक अनुरोध के लिए एक धागा आवंटित कर रहे हैं

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

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

हालांकि यह सच है कि कई कंपनियां इन प्लेटफार्मों का उपयोग करने के लिए उपयोग कर रही हैं, मुझे लगता है कि परंपरागत ढेर वाली कंपनियों के लिए घटनाओं से चलने वाले उपकरणों का उपयोग उनके सिस्टम के पूरक के रूप में अधिक आम है। जब आप नोड.जेएस या टोरनाडो जैसे कुछ के साथ जाते हैं, तो आप अपने आप को बहुत सारे अंतर्निहित सॉफ़्टवेयर को छोड़ सकते हैं, जिसे आप अपने एपीआई और ड्राइवरों को रोल करने के पक्ष में भरोसा करते हैं। node.js थोड़ी देर के लिए आसपास रहा है, और वास्तव में डेटाबेस, nosql प्लेटफार्मों और निर्माण प्रणालियों में hooking के लिए बहुत अच्छा समर्थन है, लेकिन वहां जाने के लिए कुछ समय लगा।

एक प्रयोग के रूप में, एक साधारण टीसीपी चैट एप्लिकेशन लिखने का प्रयास करें जो प्रति थ्रेड का उपयोग करता है और देखें कि आप कितने उपयोगकर्ता का समर्थन कर सकते हैं। आखिरकार, आप एक सीमा को हिट करेंगे कि आप कितने ओएस थ्रेड्स को स्पिन कर सकते हैं, जो वास्तव में महंगे हैं।

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

आपके प्रश्नों का सबसे अच्छा मैं कर सकता उत्तर देने के लिए:

  1. मैं यह बस अपने पूरे मंच खाई करने के लिए सिर्फ इसलिए कि आप सुन कैसे महान Node.js और घटना चालित वास्तुकला हैं संभव है नहीं लगता। यदि आपको आईओ को अत्यधिक समवर्ती एप्लिकेशन बनाने की आवश्यकता है, तो आपको वास्तव में खुद से पूछना होगा। यदि हां, तो अपने मौजूदा स्टैक को पूरक करने के लिए इसका उपयोग क्यों न करें?
  2. मुझे आपके दूसरे प्रश्न पर यकीन नहीं है, डिवाइस से आपका क्या मतलब है?
  3. आप ईवेंट-संचालित आर्किटेक्चर का उपयोग करने के रूप में पारंपरिक उपकरणों के आधार पर क्लाउड में एक शानदार एप्लिकेशन बना सकते हैं। तथ्य यह है कि यह "क्लाउड" एप्लिकेशन हो सकता है वास्तव में प्लेटफ़ॉर्म चुनने के साथ कुछ भी नहीं करना है।
  4. मैं कहूंगा कि यह प्रदर्शन से स्केल के बारे में अधिक है। आप पाते हैं कि एक node.js ऐप एक जावा ऐप से धीमा या तेज चलाता है जो एक ही कोड चला रहा है। लेकिन node.js क्या करने में सक्षम है थ्रूपुट की बहुत अधिक दर की अनुमति देता है क्योंकि यह उस धागे सीमा को मारने वाला नहीं है जिसका मैंने उल्लेख किया था। और यह भी दर्शाता है कि आपने एक उचित ईवेंट-संचालित एप्लिकेशन बनाया है जहां आप ब्लॉक नहीं करते हैं। यदि आप ब्लॉक करते हैं, तो आप पूरी प्रणाली को नीचे ले जाते हैं!
0

प्रदर्शन अधिकतर आवेदन पर निर्भर करेगा। जैसा कि आपने कहा था, बहुत से अनुरोधों के साथ, कई धागे चलाने की ज़रूरत है, जो प्राथमिक स्मृति का उपभोग करता है, क्योंकि धागे को की आवश्यकता होती है, दूसरे की सेवा करने से पहले अनुरोध की सेवा करें। मैं सहज महसूस नहीं कर रहा हूँ करने के लिए कहा है कि यह है, लेकिन इसकी एक शुरुआत :-)

1

मैं अंतर्निहित कार्यान्वयन के बारे में अपनी अधिक सोचता है, और ओवरहेड्स में सस्ते दामों पर यह पैदावार:

एक नया समर्पित धागे की कताई एक अनुरोध को पूरा करने। प्रत्येक धागा I/O अवरुद्ध करता है। हालांकि, थ्रेड स्तर पर इस तरह की समेकन मैंगिंग एक गड़बड़ है।

बनाम

एक धागा है, जो संवेदनशील रहता है और सामान भविष्य में कुछ समय संभाल करने का वादा किया का उपयोग

। I/O करते समय अवरुद्ध नहीं होता है, समेकन प्रबंधन थ्रेड स्तर पर आवश्यक नहीं है। ओएस को संभालने दें।

क्यों अपाचे-बिलाव/JBoss/Weblogic के साथ एक पारंपरिक जावा ईई वास्तुकला संचालित वास्तुकला एक घटना के लिए एक चाल पर विचार करें।

शायद वे बहुत सामान्य, हेवीवेट समाधान से थके हुए हैं, और नए हल्के विकल्प देखना चाहते हैं। ये विकल्प विकसित और तैनाती के लिए मृत सरल हैं, और बहुत अच्छी तरह से स्केल करते हैं।

क्या ईवेंट संचालित आर्किटेक्चर डिवाइस-अज्ञेय वेबसाइट/एप्लिकेशन प्रदान करने में सहायक होगा।

मुझे नहीं लगता कि ये बहुत संबंधित हैं। एक से अधिक भाषाओं को एक ही JVM पर चलाया जा सकता है। यह कई होस्टों पर चलाने के लिए जेवीएम की क्षमता है, और मानक एपीआई का पर्दाफाश करता है जो डिवाइस-अज्ञेय क्षमता लाता है।एक और उदाहरण वेब ब्राउज़र है।

क्लाउड पर एप्लिकेशन डिज़ाइन करते समय, हम एसिंक्रोनस I/O के लिए जाएंगे।

आवश्यकताओं पर अधिक निर्भर करता है। Async I/O सभी समस्याओं को हल नहीं करता है। लेकिन अगर आप आसानी से स्केलेबल समाधान बनाने के लिए जा रहे हैं, तो यह मदद कर सकता है। तंग सीमा के साथ नए स्टार्टअप के लिए एक अच्छी पसंद है।

घटना-संचालित आर्किटेक्चर प्रदर्शन पारंपरिक जावा ईई आर्किटेक्चर से बेहतर है या यह एक मिथक है।

कुछ good benchmarks के साथ प्रदर्शन का बेहतर परीक्षण करें, जो आपके व्यवसाय की आवश्यकताओं के अनुरूप है।

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