हमारे पास बहुत सारी ऐप और वेब सेवाएं हैं (कुछ सार्वजनिक सामना करने वाले उत्पाद, कुछ आंतरिक और एक निजी "बैकएंड" का हिस्सा) जो एक दूसरे पर निर्भर हैं। इन घटकों में से प्रत्येक में 4 वातावरण हैं (विशिष्ट उद्देश्यों की पूर्ति के लिए सर्वर / नोड्स के क्लस्टर):
- गैर-उत्पादन
DEV
- समेकित विकास वातावरण जहां सीआई पुश परिवर्तन का निर्माण करता है; इंजीनियरों के लिए मुश्किल से मुश्किल कीड़े खोजने के लिए उपयोगी है जो स्थानीय रूप से प्रतिलिपि प्रस्तुत करने योग्य नहीं हैंQA
- पृथक क्यूए / परीक्षण वातावरणDEMO
- व्यवसाय हितधारकों के लिए स्थिर यूएटी वातावरण
- उत्पादन
LIVE
- हमारे लाइव / उत्पादन वातावरण
कोड प्रचार जाता है: LOCAL
(डेवलपर की मशीन) => DEV
=> QA
=> DEMO
=>> LIVE
।
मान लें कि हमारे पास एक एप्लिकेशन है जिसे myapp
RESTful वेब सेवा द्वारा समर्थित किया जाता है myws
, जिसे स्वयं एक DB नाम से समर्थित किया जाता है mydb
।
वर्तमान में, हमारे पास इन निर्भरताओं के बीच " ऑर्केस्ट्रेटेड " पदोन्नति को क्या कहेंगे : जिन myapp-dev
बिंदुओं का myws-dev
उपयोग करता है mydb-dev
। इसी प्रकार, जिन myapp-qa
बिंदुओं का myws-qa
उपयोग करता है mydb-qa
। के लिए DEMO
और LIVE
।
इसके साथ समस्या यह है कि कभी भी मैं इसमें बदलाव करता हूं, कहता हूं myapp
, इसके लिए मुझे myws
और mydb
साथ ही बदलाव करने की आवश्यकता है । लेकिन क्योंकि प्रत्येक DEV
पर्यावरण अपनी निर्भरता के DEV
वातावरण की ओर इशारा करता है, इसका मतलब है कि मुझे इन सभी परिवर्तनों को एक ही समय में शेड्यूल और रोलआउट करना होगा। इसके अलावा, अगर एक निर्माण अस्थिर / टूट जाता है, तो यह अक्सर अन्य अपस्ट्रीम घटकों को नीचे लाता है; उदाहरण के लिए अगर कोई डेवलपर बदलते समय कुछ तोड़ता है mydb-dev
, myws-dev
और myapp-dev
क्लस्टर आमतौर पर अस्थिर हो जाते हैं।
इसे हल करने के लिए, मैं एक प्रस्ताव रख रहा हूं कि मैं " साइलेंट " प्रचार रणनीति क्या कहूंगा : सभी अंतर-घटक निर्भरताएं इस दिशानिर्देश का पालन करती हैं:
- नदी के ऊपर निर्भरता पर निर्भर करते हैं
DEMO
, उनके नीचे की ओर निर्भरता के लिए पर्यावरण उनके गैर उत्पादन वातावरण के सभी के लिए (DEV
,QA
औरDEMO
); तथा - अपस्ट्रीम निर्भरता
LIVE
उनके उत्पादन पर्यावरण के लिए उनके डाउनस्ट्रीम निर्भरता के लिए पर्यावरण पर निर्भर करती है
इस सम्मेलन का उपयोग करते हुए, myapp-dev
एक्टुवल इंगित करेगा myws-demo
, जो उपयोग करेगा mydb-demo
। इसी तरह, myapp-qa
यह भी इंगित करेगा myws-demo
और mydb-demo
।
यहाँ जो लाभ मुझे मिल सकता है वह है स्थिरीकरण का निर्माण : यह बहुत कम संभावना है कि DEMO
किसी विशेष घटक के लिए पर्यावरण अस्थिर हो जाएगा, क्योंकि कोड इसे DEMO
कठोर परीक्षण के बिना DEV
और दोनों पर नहीं बना सकता है QA
।
केवल नुकसान मैं इस विधि के लिए मिल सकता है, अगर DEMO
एक विशेष घटक के लिए ब्रेक करता है, सभी सभी नदी के ऊपर निर्भरता के लिए गैर उत्पादन वातावरण अचानक टूट कर दिया जाएगा। लेकिन मैं इस बात का जवाब दूंगा कि परीक्षण DEV
और प्रदर्शन के कारण ऐसा बहुत कम ही होना चाहिए QA
।
यह है मिल गया कि कई डेवलपर्स (बहुत चालाक और अपने आप की तुलना में अनुभव) को हल किया है एक समस्या हो सकता है, और मैं इस समस्या और उसके समाधान उन्हें पहले से ही नाम है, तो हैरान नहीं किया जाएगा (मैं क्या बोल रहा हूँ करवाया / डाल दिए अलावा)। इसलिए मैं पूछता हूं: क्या किसी भी प्रचार में मौन प्रचार की रणनीति के गुण किसी भी विपक्ष से आगे निकल जाते हैं, और क्या विपक्ष है कि मैं यहां से गुजर सकता हूं?