2014-05-05 9 views
69

के साथ युद्ध फ़ाइलों बनाम निष्पादन योग्य जार को तैनात करने की सलाह जावा वेब अनुप्रयोगों में जावा वेब अनुप्रयोगों को एक जावा फ़ाइल के रूप में जावा सर्वलेट कंटेनर (या एप्लिकेशन सर्वर) पर तैनात करने से दूर जाने के लिए जावा स्पेस में वर्तमान प्रवृत्ति प्रतीत होती है (या कान फ़ाइल) और इसके बजाय अनुप्रयोग को एक्जिक्यूटेड जार के रूप में एक एम्बेडेड सर्वलेट/HTTP सर्वर जैसे जेटी के साथ पैकेज करें। और मेरा मतलब है इस अधिक ताकि रास्ते में नए चौखटे प्रभावित कर रहे कैसे नए अनुप्रयोगों विकसित कर रहे हैं और नहीं बल्कि कैसे अनुप्रयोगों उपयोगकर्ताओं (समाप्त करने के लिए दिया जाता है की तुलना में तैनात है, क्योंकि उदाहरण के लिए, मैं क्यों जेनकींस एक एम्बेडेड कंटेनर, बहुत हड़पने और जाने के लिए आसान का उपयोग करता है)। निष्पादन योग्य जार विकल्प को अपनाने वाले ढांचे के उदाहरण: Dropwizard, Spring Boot, और Play (अच्छी तरह से यह सर्वलेट कंटेनर पर नहीं चलता है लेकिन HTTP सर्वर एम्बेडेड है)।एम्बेडेड कंटेनर

मेरा सवाल यह है कि, एक ऐसे माहौल से आ रहा है जहां हमने हमारे (एक बिंदु पर ज्यादातर स्ट्रूट 2) अनुप्रयोगों को एक ही टॉमकैट एप्लिकेशन सर्वर पर तैनात किया है, क्या परिवर्तन, सर्वोत्तम प्रथाओं या विचारों को बनाने की आवश्यकता है यदि हम उपयोग करने की योजना बना रहे हैं एक एम्बेडेड कंटेनर दृष्टिकोण? वर्तमान में, हम के बारे में 10 देसी अनुप्रयोगों एक भी बिल्ला सर्वर पर चल रहा है और इन छोटा सा अनुप्रयोगों संसाधनों को साझा करने की क्षमता और एक सर्वर पर प्रबंधित किया जा के लिए अच्छा है। हमारे अनुप्रयोगों का उद्देश्य अपने उपयोगकर्ताओं के भीतर चलाने के लिए अंतिम उपयोगकर्ताओं को वितरित करने का इरादा नहीं है। हालांकि, अगर हम एक नए जावा ढांचे का लाभ उठाने का फैसला करते हैं, तो आगे बढ़ना चाहिए, क्या यह दृष्टिकोण बदलना चाहिए? क्लाउड तैनाती (जैसे, हेरोकू) के बढ़ते उपयोग से निष्पादन योग्य जारों में बदलाव आया है?

आप एक ही आवेदन सर्वर पर तैनाती बनाम पारंपरिक युद्ध फ़ाइल तैनाती के प्ले शैली में कई आवेदन प्रबंध अनुभव प्राप्त हुआ है, तो आपके अंतर्दृष्टि साझा करें।

उत्तर

65

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

लघु संस्करण: सर्वलेट कंटेनर एक भी मेजबान पर एक से अधिक आवेदन का प्रबंधन करने के महान हैं लेकिन सिर्फ एक ही आवेदन का प्रबंधन करने के लिए बहुत उपयोगी नहीं है। क्लाउड वातावरण के साथ, वर्चुअल मशीन प्रति एक एकल एप्लिकेशन बेहतर और अधिक आम लगता है। आधुनिक ढांचे क्लाउड संगत होना चाहते हैं, इसलिए एम्बेडेड सर्वरों में बदलाव।


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

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

इसके अलावा, बादल शांत और गैर बादल सामान उबाऊ है (यदि हम अभी भी प्रचार पर विश्वास) कर रहे हैं।कई ढांचे डिफ़ॉल्ट रूप से स्केलेबल होने का प्रयास करते हैं, ताकि वे आसानी से बादलों पर तैनात किए जा सकें। एंबेडेड सर्वर तैनात और चलाने के लिए तेज़ हैं, इसलिए वे एक उचित समाधान की तरह लगते हैं। सर्वलेट कंटेनर आमतौर पर अभी भी समर्थित होते हैं लेकिन अधिक जटिल सेट अप की आवश्यकता होती है।

कुछ अन्य अंक:

  • एम्बेडेड सर्वर ढांचे के लिए अनुकूलित किया जा सकता है या बेहतर व्यवस्थाएं टूलींग (उदाहरण के लिए खेलने सांत्वना की तरह) के साथ एकीकृत है।
  • सभी क्लाउड वातावरण अनुकूलन योग्य मशीन छवियों के साथ नहीं आते हैं। क्लाउड एप्लिकेशन तैनाती के लिए समर्पित सॉफ़्टवेयर का उपयोग करके, सर्वलेट कंटेनर को डाउनलोड और सेट अप करने के लिए प्रारंभिक स्क्रिप्ट लिखने के बजाय, बहुत आसान है।
  • मुझे अभी तक एक टॉमकैट सेटअप नहीं मिला है जो आपको परम जेन स्पेस त्रुटि के साथ आपको अपने ऐप के कुछ पुनर्निर्माण के साथ बधाई नहीं देता है। एम्बेडेड सर्वर शुरू करने के लिए थोड़ा सा समय लेना कोई समस्या नहीं है जब आप बिना किसी डाउनटाइम के स्टेजिंग और उत्पादन के उदाहरणों के बीच तुरंत स्विच कर सकते हैं।
  • जैसा कि पहले से ही सवाल में बताया गया है, अंतिम उपयोगकर्ता के लिए एप्लिकेशन को चलाने के लिए यह बहुत सुविधाजनक है।
  • एंबेडेड सर्वर पोर्टेबल और विकास के लिए सुविधाजनक हैं। आज सब कुछ तीव्र है, प्रोटोटाइप और एमवीपी को जितनी जल्दी हो सके बनाया और वितरित करने की आवश्यकता है। कोई भी हर डेवलपर के लिए पर्यावरण स्थापित करने में बहुत अधिक समय बिताना नहीं चाहता।
+0

उत्तर देने के लिए धन्यवाद, आप कुछ अच्छे अंक बनाते हैं। बादल ड्राइविंग कारक है! हमारी स्थिति में मैं क्लाउड सर्वर का मालिकाना अधिक आरामदायक महसूस करता हूं, अमेज़ॅन वेब सर्विसेज मॉडल (एक सेवा के रूप में इंफ्रास्ट्रक्चर) के रूप में एप्लिकेशन को ला ला ऐप इंजन (एक सेवा के रूप में प्लेटफ़ॉर्म) पर तैनात करने के विरोध में, लेकिन मुझे लगता है कि यह है विचार का पुराना स्कूल। तो टेकवे: जब तक हम क्लाउड को क्लाउड में सेवा के रूप में लीवरेज करने की योजना नहीं बनाते, तब तक एक ही सर्वर पर एकाधिक स्टैंडअलोन जावा वेब एप्लिकेशन प्रबंधित करने के बजाए युद्ध तैनाती जाने का तरीका होता है। आपके इनपुट के लिए फिर से धन्यवाद। –

+2

बस 2cc: यदि आप प्रॉक्सी के रूप में कुछ प्रकाश HTTP सर्वर, साथ ही मशीन पर एकाधिक _jar-apps_ चला सकते हैं अर्थात्: nginx, यह अतिरिक्त कस्टम CDN, भार संतुलन, फ़ायरवॉल, आदि जैसे ठेठ वेब यातायात के लिए इस्तेमाल किया जा सकता तो यह करने के लिए उचित है बड़े ट्रैफिक की योजना बनाते समय इसका उपयोग करने पर विचार करें (इसमें बेहतर प्रदर्शन है, फिर प्रत्येक अनुरोध को संभालना - यहां तक ​​कि अपने मुख्य ऐप के माध्यम से स्थिर संसाधनों के लिए)। – biesior

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