मैं शून्य डाउनटाइम परिनियोजन प्राप्त करने का प्रयास कर रहा हूं ताकि मैं "धीमी" घंटों के दौरान कम-से-कम तैनात कर सकूं - या सिद्धांत रूप में कभी भी।
मेरा वर्तमान सेटअप, कुछ हद तक सरलीकृत:
- वेब सर्वर A (.NET ऐप)
- वेब सर्वर बी (.NET ऐप)
- डेटाबेस सर्वर (SQL सर्वर)
मेरी वर्तमान तैनाती प्रक्रिया:
- वेब सर्वर ए और बी दोनों पर साइटों को "रोकें"
- एप्लिकेशन के संस्करण के लिए डेटाबेस स्कीमा को अपग्रेड किया जा रहा है
- वेब सर्वर ए को अपडेट करें
- वेब सर्वर बी अपडेट करें
- सब कुछ वापस ऑनलाइन लाओ
वर्तमान समस्या
इससे हर महीने एक छोटी राशि घट जाती है - लगभग 30 मिनट। मैं ऐसा घंटों के दौरान करता हूं, इसलिए यह बहुत बड़ी समस्या नहीं है - लेकिन यह ऐसी चीज है जिससे मैं दूर होना चाहता हूं।
इसके अलावा - वास्तव में 'वापस' जाने का कोई तरीका नहीं है। मैं आमतौर पर रोलबैक DB स्क्रिप्ट नहीं बनाता - केवल स्क्रिप्ट को अपग्रेड करता हूं।
लोड बैलेंसर का लाभ उठाना
मैं एक समय में एक वेब सर्वर को अपग्रेड करने में सक्षम होना पसंद करूंगा। वेब सर्वर ए को लोड बैलेंसर से बाहर निकालें, इसे अपग्रेड करें, इसे ऑनलाइन वापस करें, फिर वेब सर्वर बी के लिए दोहराएं।
समस्या डेटाबेस है। मेरे सॉफ़्टवेयर के प्रत्येक संस्करण को डेटाबेस के एक अलग संस्करण के खिलाफ निष्पादित करने की आवश्यकता होगी - इसलिए मैं "अटक" की तरह हूं।
संभावित समाधान
एक वर्तमान समाधान जिस पर मैं विचार कर रहा हूं वह निम्नलिखित नियमों को अपना रहा है:
- डेटाबेस टेबल को कभी भी डिलीट न करें।
- डेटाबेस कॉलम कभी नहीं हटाएं।
- डेटाबेस कॉलम का कभी नाम न लें।
- कभी किसी स्तंभ को पुन: व्यवस्थित न करें।
- हर संग्रहित प्रक्रिया का संस्करण होना चाहिए।
- अर्थ - 'spFindAllThings' संपादित होने पर 'spFindAllThings_2' बन जाएगा।
- फिर से संपादित किए जाने पर यह 'spFindAllThings_3' बन जाता है।
- विचारों पर भी यही नियम लागू होता है।
जबकि, यह थोड़ा चरम लगता है - मुझे लगता है कि यह समस्या को हल करता है। एप्लिकेशन के प्रत्येक संस्करण को गैर ब्रेकिंग तरीके से DB को हिट किया जाएगा। कोड विचारों / संग्रहीत प्रक्रियाओं से कुछ परिणामों की अपेक्षा करता है - और यह उस 'अनुबंध' को वैध रखता है। समस्या यह है - यह सिर्फ मैला ढोना है। मुझे पता है कि थोड़ी देर के लिए ऐप को तैनात करने के बाद मैं पुरानी संग्रहीत प्रक्रियाओं को साफ कर सकता हूं, लेकिन यह सिर्फ गंदा लगता है। इसके अलावा - यह इन नियमों का पालन करने वाले सभी डेवलपर्स पर निर्भर करता है, जो ज्यादातर होगा, लेकिन मुझे लगता है कि कोई गलती करेगा।
अंत में - मेरा प्रश्न
- यह मैला है या हैकी?
- क्या कोई और इस तरह से कर रहा है?
- अन्य लोग इस समस्या को कैसे हल कर रहे हैं?