2012-05-15 15 views
6

मान लें कि मेरे पास अपने स्वयं के (SQL Azure) डेटाबेस का उपयोग करके उत्पादन और स्टेजिंग तैनाती दोनों हैं। यदि स्टेजिंग में स्कीमा बदल गया है और उत्पादन में तैनात करने की आवश्यकता है तो उत्पादन डेटाबेस (डाउनटाइम के बिना) डेटाबेस अपग्रेड प्राप्त करने का एक परिभाषित तरीका है?डेटाबेस स्कीमा बदलते समय Azure निर्बाध अपग्रेड

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

मेरे सोचा RoleEnvironmentChanging में पर्यावरण परिवर्तन का पता (हालांकि निश्चित नहीं है कि वीआईपी स्वैप भी RoleEnvironmentChanginng आग) और (यानी prod) उस बिंदु पर डेटाबेस होने के खिलाफ एसक्यूएल स्क्रिप्ट चलाने के लिए हो सकता है, लेकिन मैं बनाने की जरूरत है सुनिश्चित करें कि स्क्रिप्ट केवल एक बार चलती है और कई उदाहरण संक्रमण हो जाएंगे।

+0

अच्छा सवाल। चीजें जो मुझे पता है (लगभग) निश्चित रूप से यह है कि: (1) वीआईपी स्वैपिंग RoleEnvironmentChanging को ट्रिगर नहीं करेगा। (2) कनेक्शन स्ट्रिंग को बदलने का एकमात्र तरीका वेब.config को प्रोग्रामेटिक रूप से संपादित करना है और उस नए कनेक्शन स्ट्रिंग को कहीं और (?) है। (3) कनेक्शन स्ट्रिंग के लिए अब तक कोई स्वचालन नहीं बदला गया है। यही कारण है कि मैं स्टेजिंग परिनियोजन का उपयोग नहीं करता हूं। तो, आप सेवा डाउनग्रेड के दौरान कुछ डाउनटाइम और/या त्रुटियों के साथ बेहतर रह सकते हैं (स्टेजिंग पर परीक्षण के बाद सीधे उत्पादन के लिए नए संस्करण के साथ अपग्रेड करें)। – astaykov

उत्तर

3

तो आपके पास उत्पादन परिनियोजन है जिसमें इसका स्वयं का SQL Azure डेटाबेस और स्टेजिंग परिनियोजन है जिसका अपना स्वयं का SQL Azure डेटाबेस है। इस स्थिति में दोनों अनुप्रयोगों में उनकी कनेक्शन स्ट्रिंग दो अलग-अलग डेटाबेस को इंगित करती है।

आपका पहला आवश्यकता मक्खी पर डाटाबेस स्कीमा को बदलने के लिए जब आप तैनाती स्वैप या कुछ करना है और मुझे लगता है कि डिजाइन के साथ निम्नलिखित चिंता का विषय है:

  1. आपको बस इतना करना भूमिका के अंदर किसी भी कोड लिखते हैं "एक बार और केवल एक बार" कार्रवाई, इस बात की कोई गारंटी नहीं है कि यह केवल एक बार होगा। यह कई समय कई परिदृश्य जैसे

    1.1 पर निर्भर करते हैं किसी भी स्थिति आप वी एम प्रणाली द्वारा reimage करने की आवश्यकता है में क्या होगा और इस कोड को पिछले ReImage दौरान बिल्कुल वैसा ही यह क्या किया क्या करेंगे

    1.2 आप की रक्षा कर सकते हैं यह कुछ प्रारंभिक कुंजी की कुछ रजिस्ट्री विधि द्वारा रोल स्टार्ट या वीएम शुरू होने पर नहीं होता है लेकिन ऐसा होने वाला पूर्ण प्रमाण तंत्र नहीं होता है।

  2. क्योंकि इसके बारे में मैं जब आप अपने तैनाती स्वैप करने के लिए तैयार कर रहे हैं सुझाव है कि आप कर सकते हैं:

    2.1 भागो उत्पादन से संबंधित एसक्यूएल Azure स्कीमा को अद्यतन करने के लिए स्क्रिप्ट (यह आवेदन डाउनलोड पर कोई प्रभाव नहीं पड़ेगा क्योंकि यह स्पर्श नहीं किया गया है, लेकिन जब आप अपने डेटाबेस स्कीमा को अपडेट करते हैं, तो आप बेहतर तरीके से जान सकते हैं कि यह आपके एप्लिकेशन को कैसे प्रभावित करता है)

    2.2 उत्पादन एसक्यूएल एज़ूर को इंगित करने के लिए तैनाती स्टेजिंग में कॉन्फ़िगरेशन बदलें (इसमें कोई भी उत्पादन एप्लिकेशन डाउनटाइम नहीं होगा)

    2.3 डीएसपीओ yment (यह भी कोई आवेदन डाउनटाइम होगा)

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

+0

इसके लिए धन्यवाद। मुझे लगता है कि 2 में आपके सुझाव हैं जो हम करेंगे (निश्चित रूप से शुरुआत में)। हालांकि, 1 में चिंताओं के संबंध में मैं डेटाबेस में किसी चीज की संस्करण तालिका का उपयोग करने के बारे में सोच रहा था, इसलिए डेटाबेस हमेशा जानता है कि स्क्रिप्ट को दो बार चलाने से रोकने के लिए डेटाबेस वास्तव में जानता है (वास्तव में यदि मैं ईएफ माइग्रेशन का उपयोग करता हूं तो मैं पहले से ही वह तालिका है __ माइग्रेशन हिस्ट्री ... हमम)। मुझे बिल्कुल एक ही समय में शुरू होने वाले दो उदाहरणों के खिलाफ कम करना होगा। – Ian1971

+0

हाँ, अगर आप मशीन के बाहर कुछ भी उपयोग कर रहे हैं तो यह काम करेगा। विकल्प 1) केवल एक चिंता थी अगर आपने वीएम में कुछ पर कोड निर्भर किया है जो जारी नहीं रहेगा। – AvkashChauhan

3

मैं इस जगह पर इस के लिए सर्वोत्तम प्रथाओं को देख रहा हूं और मुझे कोई नहीं मिला है।

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

इस दृष्टिकोण के साथ मेरे पास ~ 5 मिनट का डाउनटाइम है; मेरा डेटाबेस छोटा है, जो वीएम बनाने के लिए इंतजार करने से बेहतर है और उपयोगकर्ताओं को त्रुटियां मिल रही हैं।

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