21

आप (आपकी कंपनी) आपके द्वारा बनाए गए ऐप्स/सिस्टम की कॉन्फ़िगरेशन फ़ाइलों को कैसे प्रबंधित करते हैं? मैं आपको बताता हूं कि हम इसे कैसे करते हैं, और समस्या क्या है।वातावरण में कॉन्फ़िगरेशन फ़ाइलों को प्रबंधित करें

मैं एक ऐसी कंपनी में काम कर रहा हूं जहां हम लगभग 15 डेवलपर्स के साथ सॉफ्टवेयर विकसित करते हैं। हम लाइन-ऑफ-बिजनेस वेब ऐप्स बनाते हैं जो हमारे प्रबंधित होस्टिंग प्रदाता पर तैनात किए जाते हैं। हमारे मुख्य ऐप्स में से एक में एक वेबसाइट और लगभग दस डब्ल्यूसीएफ सेवाएं शामिल हैं। कुछ सेवाएं एक-दूसरे से जुड़ी हैं।

मुझे नहीं पता कि यह एक बड़ी प्रणाली है, या छोटी है, लेकिन मेरी राय यह है कि चीजों को पाने और हमारे विभिन्न वातावरण (परीक्षण, स्वीकृति और उत्पादन) में चलने के लिए हमें बहुत लंबा रास्ता लगता है।

हमारे पास हमारे विजुअल स्टूडियो परियोजनाओं में प्रति वातावरण कॉन्फ़िगर-फ़ाइलें हैं। तो web.test.config, web.acc.config, web.prod.config और web.config विकास के लिए। उनके पास सभी में एक ही कुंजी है, लेकिन वे पर्यावरण के आधार पर मूल्य अलग-अलग हो सकते हैं।

यदि मैं वेबपैप के लिए web.config में एप्सेटिंग की त्वरित गणना करता हूं तो मैं 32 गिनती करता हूं। और मैं 5 एंडपॉइंट्स गिनता हूं। हमारे पास चार वातावरण हैं (देव, परीक्षण, एसीसी और प्रोड) इसका मतलब है कि एक वेब ऐप के लिए कुल 128 ऐपेटिंग और 20 एंडपॉइंट्स हैं। हम आसानी से गलतियां कर सकते हैं, खासकर जब समय सीमाएं बंद हो रही हैं। हम सभी लोग हैं इसलिए इस तरह की चीजें हर किसी के साथ होती हैं: हम कॉन्फ़िगर-फ़ाइल में बदलाव करते हैं, लेकिन निर्माण और तैनाती से पहले जांचना भूल जाते हैं। या हम वेबसर्वर पर बदलाव करते हैं और इसे चार web.configs में भी बदलना भूल जाते हैं। या हम केवल चार कॉन्फ़िगरेशन फ़ाइलों में से तीन को बदलते हैं। और इसी तरह। और फिर हमारे पास हमारे प्रबंधित होस्टिंग प्रदाता पर आधारभूत संरचना है। डिफ़ॉल्ट रूप से प्रत्येक बंदरगाह बंद है। इसलिए यदि एक डब्ल्यूसीएफ सेवा को किसी अन्य सर्वर पर किसी अन्य डब्ल्यूसीएफ सेवा से बात करने की ज़रूरत है, तो एक पोर्ट को फ़ायरवॉल में खोला जाना है। हम इसे टेस्ट में करते हैं, लेकिन स्वीकृति में हमें इसे फिर से करना है, और हम भूल गए हैं कि कौन से बंदरगाहों को खोला जाना है, इसलिए यह परीक्षण और त्रुटि की तरह है: ओह मेरी सेवा डेटाबेस से कनेक्ट नहीं हो सकती है, शायद बंदरगाह बंद है। और वही सामान फिर से उत्पादन में होता है। एसएलए के मुताबिक, हमारे प्रबंधित होस्टिंग प्रदाता को फायरवॉल में बंदरगाह खोलने में कुछ दिन लग सकते हैं। तो, thuis जल्दी एक बहुत लंबी प्रक्रिया बन जाता है। और अंत में टेस्ट, स्वीकृति और उत्पादन करने और चलाने के लिए हमें लगभग दो महीने लगते हैं।

तो, मेरा सवाल है: आप कॉन्फ़िगरेशन और आधारभूत संरचना और इसके आसपास की प्रक्रिया का प्रबंधन कैसे करते हैं?

+1

केवल एक टुकड़ा। शुरुआत में मेरे पास एक चेक था कि ऐप सभी संसाधनों को छूता है और एक गैर प्रतिक्रिया की रिपोर्ट करता है। – Paparazzi

+2

यह एक अच्छा सवाल है - मेरी इच्छा है कि इसमें दर्जनों जवाब हों। –

उत्तर

3

इससे मदद मिल सकती है, यह एक स्रोत से संदर्भित कॉन्फ़िगरेशन फ़ाइलों और सेवाओं के लिए केंद्रीय स्थान के बारे में बात करती है।

http://blogs.msdn.com/b/youssefm/archive/2010/09/02/loading-wcf-client-configuration-from-different-files-with-configurationchannelfactory.aspx

+0

मुझे लगता है कि यह एक संकीर्ण उत्तर है जो केवल डब्ल्यूसीएफ कॉन्फ़िगरेशन पर चर्चा करता है, जो कि सिस्टम में समग्र कॉन्फ़िगरेशन का एक छोटा सा हिस्सा है। –

5

Config4* परियोजना (अस्वीकरण: मैं अपनी प्राथमिक डेवलपर हूं) तो यह शायद आप के लिए उपयोगी नहीं है, नेट या WCF के साथ एक आउट-ऑफ-द-बॉक्स एकीकरण नहीं है। हालांकि, Config4 * में सुविधाओं में से एक आपके प्रश्न के लिए प्रासंगिक है: यह कॉन्फ़िगरेशन फ़ाइल में if-then-else बयान एम्बेड करने की क्षमता है, ताकि फ़ाइल अलग-अलग वातावरण (जैसे विकास, परीक्षण) के लिए स्वयं को "अनुकूलित" कर सके। , स्वीकृति और उत्पादन)।

आप अपने .NET/WCF- आधारित प्रोजेक्ट में जो भी कॉन्फ़िगरेशन सिंटैक्स का उपयोग कर रहे हैं, उसके साथ काम करने के लिए उस अवधारणा को संशोधित करने में सक्षम हो सकते हैं (मैं उन तकनीकों से परिचित नहीं हूं, लेकिन मुझे लगता है कि वे शायद एक्सएमएल- आधारित विन्यास फाइलें)। विशेष रूप से, आप पाइथन का उपयोग करके एक स्क्रिप्ट लिख सकते हैं, जो पर्यावरण-विशिष्ट नाम = मूल्य जोड़े को map में जोड़े सेट करने के लिए if-then-else कथन का उपयोग करता है, और उसके बाद कॉन्फ़िगरेशन फ़ाइलों का एक सेट उत्पन्न करने के लिए कुछ print कथन का उपयोग करें एक पर्यावरण के लिए बनाया गया है।इस तरह के एक स्क्रिप्ट का एक छद्म कोड रूपरेखा है:

#-------- 
# Set up configuration variables suitable for a specified environment 
#-------- 
cfg["variable1"] = "default value"; 
cfg["variable2"] = "another default value"; 
if (environment == "testing") { 
    cfg["variable1"] = "override default value for this environment"; 
    cfg["variable3"] = "value suitable for this environment"; 
    ... 
} else if (environment == "production") { 
    ... 
} 
#-------- 
# Now use print statements to generate configuration files 
# Alternatively, use the _name=value_ pairs in the map to 
# perform global search-and-replace on template versions of 
# configuration files. 
#-------- 
... 

बोनस अंक के लिए, स्क्रिप्ट भी परीक्षण, उदाहरण के लिए पर्यावरण के लिए प्रदर्शन करने की जरूरत है की एक सूची उत्पन्न कर सकता है, "अगर एक फ़ायरवॉल पोर्ट की जरूरत है की जाँच करें निम्नलिखित अंतराल के बीच खोला जाना है: ... "

1

व्यक्तिगत रूप से, यदि यह संभव है, तो मैं इसे निम्न तरीके से प्रबंधित करता हूं: सभी" स्थैतिक "पर्यावरण सेटिंग्स (डेटाबेस कनेक्शन, एलडीएपी, आदि) सर्वर कॉन्फ़िगरेशन में रखे जाते हैं फ़ाइल (कोड माइग्रेशन से प्रभावित नहीं), और डेटाबेस में "गतिशील" सेटिंग्स स्वयं।

तो मैं सेटिंग्स को अपडेट करने के लिए केवल डेटाबेस टीम पर निर्भर करता हूं (यदि आपके पास सीधे डेटाबेस तक पहुंच है, तो यह आसान है)। और मेरे पास मेरे देव पीसी पर प्रोड डेटाबेस को इंगित करने वाला कोई कोड नहीं है: डी

लेकिन मेरे पास कोई विजुअल स्टूडियो अनुभव नहीं है, इसलिए मुझे यकीन नहीं है कि आप अपने मामले में ऐसा कुछ भी लागू कर सकते हैं, लेकिन मुझे उम्मीद है कि यह कर सकता है आपको कुछ विचार देते हैं।

3

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

  • अपने विशेष मामले में, जहां एक फ़ाइल में परिवर्तन हो सकता है दूसरों में भूल की है, आदि के संबंध में .: मैं कल्पना यह एक परीक्षण स्क्रिप्ट के साथ ऑटो की जांच करने के लिए आसान शांत हो जाएगा।

  • असामान्य परिवर्तन "गिट diff मास्टर" या जो भी वीसीएस आप उपयोग करते हैं, के रूप में पहचानना आसान होना चाहिए।

  • यह जानने के लिए कि सेवाओं के लिए किन बंदरगाहों को खोलने की आवश्यकता है, कॉन्फ़िगरेशन प्रबंधन की तुलना में उचित दस्तावेज़ीकरण के प्रश्न की तरह अधिक प्रतीत होता है।

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

3

ऐसा लगता है कि आपके पास एक छोटा सा वातावरण है जो आप Ansible templates या SaltStack का उपयोग करके सभी कॉन्फ़िगरेशन फ़ाइलों को आसानी से प्रबंधित कर सकते हैं।

+0

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

+0

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

2

http://www.configapp.com पर कॉन्फ़िगर पर एक नज़र डालें। जिस तरह से यह काम करेगा, वह है कि आप web.config नामक बेस कॉन्फ़िगरेशन फ़ाइल आयात करेंगे। फिर वेबपैप के भीतर से, आप 4 वातावरण, देव, परीक्षण, एसीसी और प्रोडक्ट बनाएंगे। देव पर्यावरण पर जाएं, अपने पर्यावरण चर बनायें, और पर्यावरण के लिए उपयुक्त मूल्य निर्धारित करें। आप पर्यावरण चर के साथ केवल एक विन्यास फाइल बनाए रखेंगे। आप सभी पर्यावरण चर देख सकते हैं, और आसानी से वातावरण के बीच मतभेदों को देख सकते हैं।

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

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

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

मैं कॉन्फ़िगर टीम का हिस्सा हूं, वैसे भी।

+0

धन्यवाद, यह बहुत अच्छा लग रहा है। Configapp भी एक अच्छा समाधान की तरह दिखता है! – Stas

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

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