bundle-uri Git का एक नया फीचर है, जो cached फ़ाइलें डाउनलोड करके प्रोजेक्ट डेटा को पहले से भर देता है और फिर सर्वर के साथ होने वाली जटिल fetch प्रक्रिया को कम करता है
- आम तौर पर
git clone कमांड सर्वर के साथ negotiation प्रक्रिया से गुज़रकर ज़रूरी डेटा डाउनलोड करती है → यह अक्षम हो सकता है
bundle-uri CDN से cached शुरुआती डेटा लाता है, और उसके बाद सर्वर से केवल नवीनतम स्थिति अपडेट करता है → समय बच सकता है
क्या clone की गति तेज होती है?
Yes? - तेज हो सकती है
- local file विकल्प का उपयोग करने पर clone की गति बहुत तेज हो जाती है
- VM में mounted file system या cloud cache से bundle फ़ाइलें इस्तेमाल करने पर और तेज़ sync संभव है
No? - यह और धीमा हो सकता है
- लगा कि वही डेटा CDN से लाने पर यह तेज होगा, लेकिन उल्टा यह और धीमा निकला
- प्रयोग का परिणाम: bundle का उपयोग करने वाला clone, सामान्य clone से धीमा था
- सामान्य clone: 2 मिनट 36 सेकंड
- bundle उपयोग वाला clone: 3 मिनट 20 सेकंड
- bundle से पहले ही मिले objects फिर से डाउनलोड होने की समस्या हुई
Maybe? - हो भी सकता है
- समस्या इसलिए हुई क्योंकि Git bundle फ़ाइल से केवल
refs/heads (branch references) पढ़ता है
- बाकी references को नज़रअंदाज़ किया जाता है, इसलिए सर्वर से अतिरिक्त डेटा डाउनलोड करना पड़ता है
- Git कोड में बदलाव करके सभी references कॉपी करने पर clone की गति बेहतर होती है
- बदलाव के बाद clone समय: 2 मिनट 19 सेकंड (पहले के 2 मिनट 36 सेकंड से तेज)
- अतिरिक्त डाउनलोड किए गए objects की संख्या: 43,877 (कुल का लगभग 1%)
संशोधन का तरीका और patch लागू करना
- Git के
bundle-uri.c कोड में refs/heads के अलावा references को नज़रअंदाज़ करने वाले हिस्से को बदला गया
- बदलाव के बाद सभी references कॉपी करने के लिए संशोधित किया गया → clone की गति में सुधार
- यह बदलाव केवल 6 characters के परिवर्तन वाला एक न्यूनतम patch था
क्या इस फीचर का उपयोग करना चाहिए?
possibly - शायद मदद मिल सकती है
- GitHub, GitLab जैसे प्लेटफ़ॉर्म पर इसका बड़ा फ़ायदा यह है कि यह सर्वर CPU का बोझ कम कर सकता है
- सर्वर को सीधे packfile calculate नहीं करना पड़ता, CDN से काम हो सकता है → सर्वर संसाधनों की बचत
- व्यक्तिगत उपयोगकर्ताओं के लिए भी यह कुछ मामलों में उपयोगी हो सकता है:
- जब किसी आंतरिक Git सर्वर से बड़े पैमाने पर clone बार-बार करना हो
- जब CI/CD सिस्टम में बार-बार full clone की ज़रूरत हो
व्यावहारिक रूप से इसके मजबूरन लागू होने की संभावना ज़्यादा है
- नवीनतम Git protocol में सर्वर क्लाइंट को bundle URL दे सकता है
- यदि सर्वर bundle फ़ाइल URL देता है, तो क्लाइंट उसे अपने-आप डाउनलोड करके sync आगे बढ़ाता है
- GitHub आदि पर यह फीचर सक्रिय होने पर उपयोगकर्ता के पास चुनने की ज़्यादा गुंजाइश नहीं रहेगी
निष्कर्ष
- bundle फ़ाइलें उपयोग करने पर clone की गति तेज हो सकती है, लेकिन Git की processing के कारण शुरुआत में यह उल्टा धीमा भी हो सकता है
- Git के कोड में बदलाव करके reference processing को बेहतर बनाया जाए तो clone की गति सुधरती है
- आगे चलकर GitHub, GitLab आदि यदि यह फीचर अपनाते हैं, तो क्लाइंट पक्ष पर इसका उपयोग अपने-आप होने की संभावना अधिक है
अभी कोई टिप्पणी नहीं है.