डीवीसीएस ने भौगोलिक रूप से वितरित टीमों के बीच रेपो प्रतिकृति को आशीर्वाद दिया


9

मेरी कंपनी Perforce से एक DVCS की चाल का पता लगा रही है और हम वर्तमान में बहुत सारे Perforce प्रॉक्सी का उपयोग करते हैं क्योंकि सॉफ़्टवेयर डेवलपमेंट टीमें जर्मनी, चीन, संयुक्त राज्य अमेरिका और मैक्सिको में फैली हुई हैं और कभी-कभी एक स्थान से दूसरे स्थान तक बैंडविड्थ यह महान नहीं है।

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

मैंने सोचा कि शायद हम पूर्व-पुश और प्री-पुल हुक के माध्यम से डीएनएस तंत्र का अनुकरण कर सकते हैं । उदाहरण के लिए, देश A, B, और C. को धन्य A से खींचने पर विचार करें, A स्वयं B से परिवर्तनों के लिए खींचेगा, जो बदले में C में परिवर्तन के लिए खींचेगा। यदि B और C में नए परिवर्तन हैं, तो वे A की ओर गिरेंगे। इसके विपरीत, जब एक धक्का होता है, तो इसे सभी धन्य रिपॉजिटरी में प्रचारित किया जा सकता है।

मुझे पता है कि आम तौर पर आपके पास केवल एक धन्य रेपो होता है, हालांकि यह विश्व स्तर पर नहीं हो सकता है और प्रत्येक धन्य भंडार केवल एक ही देश की टीमों के लिए लागू होगा।

मेरा प्रश्न है : क्या व्यवहार में उपयोग की जाने वाली डीवीसीएस रेपो प्रतिकृति की अवधारणा है?, क्या किसी ने इसे सफलतापूर्वक किया है ?, यदि हां, तो इसे करने का सही तरीका क्या है?


किसी भी वितरित टीम के सदस्य वितरित संस्करण नियंत्रण का उपयोग कर रहे हैं?
8:00 पर ड्यूकफैगिंग जूल

कंपनी की राजनीति के आधार पर, गितूब या बिटबकेट की मेजबानी वास्तव में अच्छी तरह से काम कर सकती है। ऐसा लगता है कि एक जटिल आईटी समाधान स्थापित करने के लिए एक बेकार है जब ऐसी कंपनियां हैं जिनके पास पहले से ही उचित मूल्य पर वैश्विक रूप से सुलभ सेटअप हैं।
२२:०२ पर captncraig

1
"कंपनी की राजनीति पर निर्भर करता है" <--- yup
dukeofgaming

जवाबों:


11

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

सबसे पहले, मुझे DVCS में रिपॉजिटरी काम करने के तरीके के बारे में कुछ मुख्य बिंदुओं को चलाने दें। (मैं मर्क्यूरियल से सबसे ज्यादा परिचित हूं, इसलिए मैं उदाहरणों के लिए इसका इस्तेमाल करूंगा, लेकिन मेरा मानना ​​है कि मैं जो कुछ भी कहता हूं वह भी सच है।)

A. एक DVCS में, किसी भी क्लोन में मूल के रूप में एक ही फ़ाइल सामग्री और इतिहास होता है।

आपको रिपॉज को ठीक से सिंक में रखना, इसका मतलब है कि आप प्रतिकृति प्रणाली के निर्माण के लिए साधारण डीवीसीएस परिवर्तन प्रसार संचालन (क्लोन, पुश, पुल) और साधारण रिपोज का उपयोग कर सकते हैं।

B. नए बदलावों का प्रचार नहीं किया जाना चाहिए कि वे कहां से आए हैं।

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

C. परिवर्तन को पुश या पुल के माध्यम से प्रचारित किया जा सकता है।

एक केंद्रीकृत प्रणाली में, नए बदलाव बहुत ज्यादा हो सकते हैं (मुझे लगता है) केवल रेपो में धकेल दिया जाएगा। एक डीवीसीएस में, कई प्रकार के परिवर्तन प्रसार टोपोलॉजी स्थापित करना संभव है, जिनमें से कुछ में केवल पुलिंग शामिल है। यह सेटअप में अधिक लचीलापन देता है।

उदाहरण

चर्चा के लिए मान लें कि आपकी वितरित टीमें डोमेन में सिस्टम का उपयोग करती हैं duke.de, duke.us, duke.cn, और duke.mx, और आगे यह कि ड्यूक.डॉ हम "धन्य" रेपो चाहते हैं। इन मान्यताओं को देखते हुए, आप ऊपर स्थापित तीन प्रमुख डीवीसीएस बिंदुओं को ध्यान में रखते हुए विभिन्न टोपोलॉजी के कई उदाहरण प्रस्तुत कर सकते हैं।

0. केंद्रीकृत पुश मॉडल

Hg.duke.de पर एक ही रेपो रखें और सभी स्थानों में डेवलपर्स को क्लोन करें और यहां से खींचें और यहां परिवर्तनों को धक्का दें। यह जर्मनी में लोगों के लिए काम कर सकता है, लेकिन यह शायद दुनिया के बाकी हिस्सों में लोगों के लिए एक समस्या होगी। सभी क्लोन, पुल और पुश ऑपरेशन धीमे लंबे-पतले नेटवर्क लिंक पर जाएंगे। यह एक केंद्रीकृत प्रणाली की तरह ही DVCS का उपयोग कर रहा है। यह वह समस्या है जिसे आप हल करने का प्रयास कर रहे हैं।

1. प्रतिकृति के साथ केंद्रीकृत पुश

Hg.duke.de पर धन्य रेपो लें और hg.duke.cn, hg.duke.mx और hg.duke.us पर प्रतिकृतियां रखें। डेवलपर्स अपनी स्थानीय प्रतिकृति से क्लोन करते हैं और hg.duke.de में परिवर्तन धक्का देते हैं। जब भी hg.duke.de में नए परिवर्तन दिखाई देते हैं, एक हुक चलता है जो उन्हें प्रतिकृतियों में प्रसारित करता है। प्रतिकृतियां अन्यथा केवल पढ़ी जाती हैं, इस प्रकार कभी कोई विलय या टकराव नहीं होगा।

उदाहरण के लिए, यदि मैं मेक्सिको में एक डेवलपर हूं, तो मैं hg.duke.mx से क्लोन करूंगा लेकिन परिवर्तन को hg.duke.de पर धकेलूंगा। यदि अन्य परिवर्तन hg.duke.de में धकेल दिए जाते हैं तो इससे पहले कि मैं अपने परिवर्तनों को धक्का दे सकूं, मेरा धक्का अवरुद्ध हो जाएगा। अन्य परिवर्तनों को hg.duke.mx पर दोहराया जाएगा, इसलिए मैं इन परिवर्तनों को स्थानीय रूप से खींचूंगा, मर्ज करूंगा, और फिर hg.duke.de पर फिर से धकेलने का प्रयास करूंगा।

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

मर्क्यूरियल में, आप .hg/hgrcफ़ाइल में निम्नलिखित की तरह कुछ डालकर एक स्थान से खींचने के लिए एक स्थानीय रेपो सेट कर सकते हैं और दूसरे को धक्का दे सकते हैं :

[paths]
default = ssh://hg.duke.mx
default-push = ssh://hg.duke.de

2. सरल खींचो मॉडल

धन्य रेपो के रूप में hg.duke.de और दूसरों के साथ प्रतिकृतियों के रूप में जारी रखते हुए, हम पुश के बजाय पुल के माध्यम से परिवर्तन का प्रचार कर सकते हैं। डेवलपर्स क्लोन और हमेशा की तरह अपनी स्थानीय प्रतिकृति से खींचते हैं। जब कोई परिवर्तन तैयार होता है, तो एक डेवलपर कुछ केंद्रीय सेवा के लिए एक पुल अनुरोध सबमिट करता है, जो डेवलपर के रेपो से hg.duke.de में खींचता है। मर्जों के लिए एक नीति स्थापित करने की आवश्यकता होगी। उदाहरण के लिए, यदि मर्ज संघर्ष हैं, तो अनुरोध को अस्वीकार कर दिया जा सकता है, जिसके लिए डेवलपर को स्थानीय प्रतिकृति से खींचने की आवश्यकता होती है, मर्ज करें, और पुल अनुरोध को पुनः सबमिट करें।

इस दृष्टिकोण का लाभ डेवलपर को इंतजार नहीं करने का है जबकि परिवर्तनों का प्रचार किया जा रहा है। बेशक, अभी भी देव को पुल के अनुरोध पर इंतजार करना पड़ता है, लेकिन कम से कम वह इस समय के दौरान अतिरिक्त बदलावों पर काम कर सकते हैं।

बदलाव

विविधताओं का एक समूह है जिन्हें लागू किया जा सकता है।

एक पुल अनुरोध प्रस्तुत करना कोड समीक्षा के लिए एक सही समय है। परिवर्तन प्रकाशित किए गए हैं, इस अर्थ में कि वे सभी के लिए उपलब्ध हैं, लेकिन वे अभी तक धन्य रेपो में एकीकृत नहीं हुए हैं।

पुल अनुरोधों को मैन्युअल रूप से या कुछ स्वचालित प्रणाली द्वारा कार्य किया जा सकता है। पुल अनुरोध को संसाधित करने से धन्य रेपो में सीधे परिवर्तन नहीं हो सकते हैं, लेकिन इसके बजाय एक अस्थायी मंचन क्षेत्र में जहां एक निर्माण और परीक्षण चक्र किया जाता है। सभी परीक्षणों को पारित करने के बाद ही बदलाव को रेपो रेपो में एकीकृत किया जाएगा।

एक पुश मॉडल के साथ और अधिक आरामदायक प्रत्येक स्थान में एक स्थानीय स्टेजिंग रेपो स्थापित करना चाह सकते हैं, प्रतिकृति के साथ, जैसे- hg-stage.duke.mx, hg-stage.duke.cn, आदि। इसके लिए थोड़ा और काम करने की आवश्यकता है। हालांकि, डेवलपर्स के रूप में न केवल अन्य स्थानीय परिवर्तनों के खिलाफ विलय करना है, लेकिन किसी को स्टैपिंग रिपोज से धन्य रेपो में विलय के लिए जिम्मेदार होना है। यह सही परिस्थितियों में काम कर सकता है, हालांकि, और स्वचालन द्वारा सहायता प्राप्त की जा सकती है।

"पारदर्शिता"

अब पारदर्शी प्रतिकृति के मुद्दे पर।

उपरोक्त परिदृश्यों को देखते हुए मुझे वास्तव में पारदर्शी प्रतिकृति की आवश्यकता नहीं है। सभी रेपो हर किसी को दिखाई देते हैं, और स्थानीय प्रतिकृति से खींचने / क्लोनिंग करने और एक धन्य रेपो या एक स्थानीय स्टेजिंग क्षेत्र में धकेलने के लिए कन्वेंशन हैं।

यदि आप पारदर्शिता चाहते हैं, तो आप लोग अपने स्थान के अनुसार DNS खोज डोमेन सेट कर सकते हैं। स्थानीय प्रतिकृति और स्टेजिंग रिपोस को बस "hg" और "hg-stage" के रूप में संदर्भित किया जाएगा और DNS सेटअप इन्हें hg.duke.cn और hg-stage.duke.cn के लिए चीन में डेवलपर्स के लिए हल करेगा, और इसके लिए अन्य स्थानों में डेवलपर्स। लेकिन यह थोड़ा सा जादू है और भ्रामक हो सकता है, और मुझे नहीं लगता कि यह बहुत जोड़ता है।

हम उम्मीद करते है कि यह आपके सवाल का जवाब दे देगा। मैंने प्रतिक्रिया के साथ कई स्वतंत्रताएं लीं, लेकिन मुझे लगता है कि आपकी स्थिति को ऊपर बताई गई तकनीकों के उपयोग के माध्यम से फिर से बनाया जा सकता है।


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

1
मैं तुम्हें कुछ अतिरिक्त इनाम के बाद एसई मुझे (24 घंटे), महान जवाब देता हूँ
dukeofgaming

1
स्थानीय स्टेजिंग रिपोज पर ... यदि परिवर्तन स्थानीय रूप से स्थिर होने तक आयोजित किए जाते हैं, और उसके बाद ही मुख्य रेपो में एकीकृत किया जाता है, तो इससे विभिन्न टीमों के बीच प्रसार में देरी होती है। यह उन मामलों में परिणाम हो सकता है जहां परिवर्तन के बीच एक खराब बातचीत दिनों या हफ्तों के बाद तक नहीं पकड़ी जाती है, जिससे निदान अधिक कठिन हो जाता है। मैं वृद्धिशील विकास के माध्यम से अस्थायी अस्थिरता से बचने की सलाह देता हूं, और हर किसी को हर किसी के लिए (स्थिर) परिवर्तनों को जितनी जल्दी हो सके उजागर करना।
स्टुअर्ट मार्क्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.