आप अपनी परियोजनाओं के लिए उपयोग किए जाने वाले ओपन सोर्स फ्रेमवर्क में बदलाव का सामना कैसे करते हैं?


9

यह मेरा एक व्यक्तिगत प्रश्न हो सकता है, लेकिन मुझे जीवित परियोजनाओं में कोड रखना पसंद है - पुस्तकालयों / रूपरेखाओं का उपयोग करना। इसका एक हिस्सा यह है कि मेरा मानना ​​है कि एक वेब ऐप अधिक सुरक्षित है अगर यह पूरी तरह से पैच हो चुका है और अप टू डेट है। इसका एक हिस्सा सिर्फ मेरी ओर से जुनूनी बाध्यकारीता का एक स्पर्श है।

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

हमने SimpleTest के साथ इकाई परीक्षण को लागू किया, और सभी फ़ाइल और डेटाबेस के नामकरण सम्मेलनों, आदि का पालन किया।

केक को अब 2.0 से अपडेट किया जा रहा है। और, वहाँ एक उन्नयन के लिए एक व्यवहार्य प्रवास पथ प्रतीत नहीं होता है। फ़ाइलों के लिए नामकरण सम्मेलनों में मौलिक परिवर्तन हुआ है, और उन्होंने SimpleTest को PHPUnit के पक्ष में गिरा दिया।

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

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

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

जवाबों:


5

स्रोत को खोलने के लिए समस्या अद्वितीय नहीं है। वाणिज्यिक परियोजनाओं के साथ भी यही मुद्दे होते हैं। हो सकता है और भी अधिक क्योंकि आपके पास स्रोत नहीं है यदि आप खुद को बनाए रख सकते हैं यदि कंपनी समर्थन छोड़ देती है।

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

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


+1 सही अवलोकन के लिए कि यह वाणिज्यिक उत्पादों में भी होता है।
एमी एंज़ुवेस्की

3

हमने अपने कोड को संशोधित करके इस समस्या से निपटा है।

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

हमने स्प्रिंग के नए संस्करणों में जाने के लिए कोड को फिर से लिखने की कोशिश की, लेकिन यह बहुत मुश्किल साबित हुआ। इसलिए हमारा समाधान था कि साइट के नए फीचर्स को मॉड्यूल्स के रूप में बनाना शुरू किया जाए, जिसमें एक अलग तरह के एप्लिकेशन का उपयोग किया जाए, जैसे कि स्प्रिंग 3.x, हाइबरनेट 3.6 इत्यादि।

अब हमारे पास एक ही बेस URL पर दो वेब एप्लिकेशन चल रहे हैं, और हम प्रत्येक एप्लिकेशन को उचित एप्लिकेशन को आवंटित करने के लिए Apache के mod_proxy मॉड्यूल का उपयोग करते हैं। उदाहरण के लिए, "/ सदस्य" पुराने एप्लिकेशन पर जाता है और "/ निर्देशिका" नए एप्लिकेशन पर जाता है। हालाँकि साइट पर आने वाले को यह पता नहीं होगा कि वे विभिन्न अनुप्रयोगों का उपयोग कर रहे हैं; वे उपयोगकर्ता के समान ही दिखते हैं।

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

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

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


2

मैं हमेशा ऐसा नहीं करता। बहुत सारे ओपन सोर्स प्रोजेक्ट्स में पिछले प्रमुख रिलीज के लिए सक्रिय रखरखाव शाखाएं हैं। कभी-कभी उन लोगों द्वारा बनाए रखा जाता है जिन्हें उस संस्करण को बनाए रखने की आवश्यकता होती है। बहुत सारी परियोजनाएं एक प्रमुख रिलीज़ पर रहती हैं जब तक कि वे खुद एक बड़ी रिलीज़ के लिए तैयार न हों।


2

और यही मुझे हर बार मिलता है।

हर बार? आप उल्लेखनीय रूप से बुरे विकल्प बना रहे होंगे। वहाँ एक उदाहरण होना चाहिए जहाँ ऐसा नहीं हुआ।

जब देवता एक नए चमकदार खिलौने के साथ खेलना शुरू करते हैं

यह एक संकेत है। ओपन सोर्स प्रोजेक्ट्स का उपयोग करते समय चमकदार नए खिलौनों से बचें। 1.0 रिलीज से बचें।

आपके द्वारा उपयोग किए जाने वाले ओपन सोर्स प्रोजेक्ट्स में आमूल-चूल परिवर्तन से आप कैसे निपटेंगे?

चरण 1. बहुत ही सावधानी से ओपन सोर्स प्रोजेक्ट चुनें। हमेशा दो या दो से अधिक प्रतिस्पर्धी परियोजनाओं की तुलना करें।

चरण 2. दो प्रतिस्पर्धी परियोजनाओं की तुलना करते समय, "आवश्यक" विशेषता को समझने की कोशिश करें जो की पेशकश की जाती है और वे दोनों इसे कैसे प्राप्त करते हैं। एक विशिष्ट एपीआई "शादी" से भी जल्दी बचें।

चरण 3. "लेट बाइंडिंग" और "लूज कपलिंग" के डिजाइन सिद्धांतों को अपनाएं। ओपन सोर्स प्रोजेक्ट परिवर्तन से इंसुलेट करने का प्रयास करें।

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

फ़ाइल नाम बदलना बहुत कठिन नहीं होना चाहिए। हाँ, यह एक बड़ी, बदसूरत स्क्रिप्ट है। हां, रूपांतरण करते समय इसे कई हफ्तों तक चलाना होगा। लेकिन यह एक परिमित लागत है।

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


आपने मुझे हाइपरबोले पर चढ़ाया :) कुछ उत्पाद दूसरों की तुलना में बेहतर हैं। उदाहरण के लिए, jQuery अपग्रेड करने के लिए काफी आसान है।
एमी एन्ज़ुवेस्की

@ एमी: काफी साफ है। आप अच्छी और बुरी परियोजनाओं की तुलना और इसके विपरीत कर सकते हैं। इसलिए, आप दोनों से सीख सकते हैं।
२.५५
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.