एम्बेड कंटेनर के साथ निष्पादन योग्य जार बनाम युद्ध फ़ाइलों को तैनात करने की सलाह


89

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

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

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

जवाबों:


81

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

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


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

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

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

कुछ अन्य बिंदु:

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

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

3
सिर्फ 2cc: आप एक ही मशीन पर कई jar-apps को कुछ प्रकाश HTTP सर्वर के साथ प्रॉक्सी के रूप में चला सकते हैं , अर्थात: nginx, इसे अतिरिक्त वेब ट्रैफ़िक जैसे कि कस्टम CDN, लोड बैलेंसर, फ़ायरवॉल आदि के लिए उपयोग किया जा सकता है, इसलिए इस पर विचार करना उचित है बड़े ट्रैफ़िक की योजना बनाते समय इसका उपयोग करना (इसका बेहतर प्रदर्शन है, फिर हर एक अनुरोध को संभालना - यहां तक ​​कि आपके मुख्य ऐप के माध्यम से स्थैतिक संसाधनों के लिए भी)।
biesior
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.