2009-11-26 15 views
6

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

हम कैसे स्वचालित स्वचालित रूप से परिवर्तन स्थापित कर सकते हैं? उदाहरण के लिए, नई विस्फोट युद्ध उत्पन्न उत्पादन में विस्फोट हो गया युद्ध के साथ फ़ाइलें तुलना और उसके बाद ही परिवर्तन से प्रभावित फ़ाइलें उत्पादन में बदल देते हैं: .jsp .html .class आदि

यह जरूरत नहीं गर्म तैनाती हो, यह पुनः आरंभ करने के लिए ठीक है सर्वर। जो मैं टालना चाहता हूं वह है कि युद्धों की प्रतिलिपि बनाना और तैनात करना जो आकार में 80 एमबी हो सकता है। कभी-कभी कनेक्शन धीमे होते हैं और वेब अनुप्रयोग में इस तरह के कमजोर परिवर्तन को सरल वर्तनी सुधार के रूप में घंटों लग सकते हैं।

हम अपनी निर्माण प्रक्रिया को स्वचालित करने के लिए मेवेन का उपयोग करते हैं। मुख्य मुद्दा पूरी प्रक्रिया को स्वचालित करना है, ताकि मैं सुनिश्चित कर सकूं कि मेरे सबवर्सन में ऐप v2.2.3 ठीक है जो बढ़ती तैनाती के बाद उत्पादन में है।

+0

वास्तव में? 80 एमबी युद्ध तैनाती के लिए दो घंटे? – Jherico

+0

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

उत्तर

1

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

हमने दो चीजें की हैं ताकि हमें जल्दी से तैनात करने में मदद मिल सके। हमारे पास एक अच्छा परिवर्तन नियंत्रण और निर्माण प्रक्रिया थी। हम जो भी संस्करण पसंद करते हैं उसे बदल और तैनात कर सकते हैं। हमारे पास अच्छा परीक्षण सूट भी था, जिसके साथ हम आसानी से परिवर्तनों का परीक्षण कर सकते थे।

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

यह ऐसा कुछ नहीं है जिसे मैं अनुशंसा करता हूं, लेकिन यह हमारी स्थिति के लिए अच्छा था।

एक युद्ध का बिंदु यह है कि सबकुछ एक ही समय में तैनात हो जाता है। यदि आप एक युद्ध का उपयोग कर रहे हैं, तो इसका मतलब है कि आप इसे एक साथ में तैनात करना चाहते हैं।

एक सुझाव इतनी बार ऐसा नहीं करना है (सप्ताह में एक बार?)। तब आपके पास इतना दर्द नहीं है।

+0

@MatthieuF: "हमारे सभी एचटीएमएल सर्वर पर अलग फाइलों के रूप में तैनात किए गए थे। कोई युद्ध नहीं था।" क्या आपको लगता है कि आप थोड़ा और विशिष्ट हो सकते हैं? तुम्हारा क्या मतलब है कि कोई युद्ध नहीं था? हम अभी भी टॉमकैट आदि पर चल रहे मानक जावा वेब अनुप्रयोगों के बारे में बात कर रहे हैं? – Dan

+0

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

0

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

1

कहना मुश्किल है। आप एक विस्फोटित वेबपैप में सिंगल क्लास फ़ाइलों को प्रतिस्थापित कर सकते हैं, लेकिन यह आमतौर पर एक बुरा विचार है और आप इसे करने वाले बहुत से लोगों को नहीं देखते हैं।

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

जब आप टेक्स्ट परिवर्तन कहते हैं, तो क्या यह टेक्स्ट संसाधनों को युद्ध फ़ाइल से अलग रखने का विचार नहीं है? इस तरह, न केवल डेवलपर्स बल्कि शायद ग्राहक आसानी से अनुवाद जोड़/बदल सकते हैं।

ग्राहक को यह महत्वपूर्ण है, लेकिन तकनीकी रूप से यह एक छोटी टाइपो को ठीक करने के लिए धीमी रेखा पर 80 एमबी तैनाती करने के लिए मूर्खतापूर्ण है।

आप अपने छोटे वितरण को रोकने के लिए अपने निर्माण/वितरण चक्र को देखने और परीक्षण प्रयासों को बढ़ाने की कोशिश भी कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

+0

@ रॉल्फ: "इसका कारण यह है कि जब आप छोटे बदलाव करते हैं तो उत्पादन और विकास के बीच मतभेदों का पता लगाना कठिन और कठिन हो जाता है। गलत वर्गफाइल भेजने और उत्पादन सर्वर को तोड़ने की संभावना समय के साथ बढ़ जाती है।" मुझे लगता है कि ऐसे उपकरण हैं जो दो निश्चित रूप से दो फाइलों की तुलना कर सकते हैं, यहां तक ​​कि पाठ्यचर्या भी नहीं? – Dan

+0

हां ऐसा करने के लिए उपकरण हैं, और कुछ को कुछ उत्तरों में वर्णित किया गया है। मेरे अनुभव से, उत्पादन युद्ध को अद्यतन करने के लिए क्लासफाइल्स भेजना हमेशा एक बुरा विचार है। समस्या का प्रबंधन करने के लिए उपकरण रखने से समस्या हमेशा बेहतर नहीं होती है। – Rolf

0

फिलहाल मैं दूरस्थ सर्वर पर SVN स्थापित तो एक सरल udate के मामले में आप सिर्फ एकल फाइल अद्यतन कर सकते हैं। बड़ी WAR फ़ाइल को स्थानांतरित करना काफी अव्यवहारिक होगा।

स्थानीय मशीन पर एक साधारण स्क्रिप्ट बनाकर रिमोट मशीन में एक साधारण स्क्रिप्ट बनाकर आप पुटी/प्लिंक [यदि आप विंडोज़ का उपयोग कर रहे हैं] का उपयोग कर एक क्लिक परिनियोजन पर स्वचालित कर सकते हैं।

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

कुछ वर्ग बदल दिए जाने पर सर्वर को पुनरारंभ करने के लिए अद्यतन स्क्रिप्ट को बेहतर बना सकते हैं और स्क्रिप्ट/जेएसपी अपडेट करने के मामले में पुनरारंभ नहीं करते हैं।

इस तरह आपके पास यह सुनिश्चित करने के लिए पिछले संस्करण में रोलबैक करने का विकल्प भी होगा कि आपके पास हर समय एक कार्यशील वेब ऐप है।

एसवीएन विलय करने की प्रक्रिया में सुधार करने के लिए यह उपकरण काफी उपयोगी है। : http://www.orcaware.com/svn/wiki/Svnmerge.py

0

सामान्य जवाब एक सतत एकीकरण sstem जो अपने तोड़फोड़ देखता है का उपयोग करें और कलाकृतियों का निर्माण और उन्हें तैनात करने के लिए है - आप बस अपने वेब आवेदन के बाद भी पुन: वितरित किया जा रहा काम करने के लिए हाबिल होना चाहता हूँ। प्रश्न यह है कि क्या यह आपके लिए पर्याप्त तेज़ है?

0

मुझे नहीं लगता कि इस के लिए एक सीधा जवाब है। टी

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

मैंने समाधान देखा है जहां लोग एप्लिकेशन सर्वर/सर्वलेट कंटेनर में कक्षाएं छोड़ते हैं, मैं इससे सहमत नहीं हूं, लेकिन यह काम करने लगता है ... मुझे यकीन है कि डरावनी कहानियां हैं!

Maven निश्चित रूप से मॉड्यूल में विभाजित अनुप्रयोगों के द्वारा चीजों को आसान बना देता है, लेकिन आप यह करते हैं और स्वतंत्र रूप से मॉड्यूल की तैनाती आप के साथ शुरू करने के लिए एक साथ एक परीक्षण वातावरण में यह सुनिश्चित करें कि विभिन्न संस्करणों अच्छा खेलते हैं बनाने की जरूरत है, तो ...

एक विकल्प है कि कार्यक्षमता के मामले में अपने आवेदन को विभाजित करना और विभिन्न सर्वरों पर अलग-अलग कार्यों को होस्ट करना, ई।छ:

  • ग्राहक लेखा - सर्वर एक
  • खोजें - सर्वर बी
  • ऑनलाइन बुकिंग - सर्वर सी
  • भुगतान सेवा - सर्वर डी

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

0

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

हमने इसे डेटाबेस तालिका में अपना टेक्स्ट रखकर और संदेश संसाधन के रूप में तालिका का उपयोग करके हल किया - वैसे ही लोग अंतर्राष्ट्रीयकरण (i8n) के लिए myMessages.properties का उपयोग करते हैं। यह आपको दो फायदे देता है, आप पाठ को i8n कर सकते हैं, और कोड तैनाती के बिना तत्काल और आसानी से प्रोड में परिवर्तन कर सकते हैं। प्रदर्शन सुनिश्चित करने के लिए हमने टेबल को भी कैश किया था।

सभी के लिए कोई समाधान नहीं है, लेकिन यह हमारे लिए वास्तव में अच्छा काम करता है।

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