- CDC File Transfer Google द्वारा विकसित एक open source टूल है, जो Windows और Linux के बीच फ़ाइल सिंक्रोनाइज़ेशन और स्ट्रीमिंग को सपोर्ट करता है
- यह फ़ाइल के सिर्फ़ बदले हुए हिस्से भेजने वाली Content Defined Chunking (CDC) तकनीक का उपयोग करता है, जिससे पारंपरिक rsync की तुलना में अधिकतम 30 गुना तेज़ गति मिलती है
- यह दो मुख्य टूल प्रदान करता है: cdc_rsync और cdc_stream, जो क्रमशः फ़ाइल सिंक्रोनाइज़ेशन और real-time स्ट्रीमिंग का काम करते हैं
- इसे Windows-आधारित डेवलपर्स को Linux वातावरण में कुशलतापूर्वक फ़ाइलें deploy और test करने के लिए डिज़ाइन किया गया है, इसलिए यह remote development और game development environments में विशेष रूप से उपयोगी है
- यह ssh और sftp आधारित authentication को सपोर्ट करता है, उपयोग में सहज है, और विभिन्न प्लेटफ़ॉर्म के लिए binaries उपलब्ध कराता है
अवलोकन और प्रोजेक्ट का महत्व
- CDC File Transfer Google द्वारा open source के रूप में जारी किया गया फ़ाइल ट्रांसफ़र टूल्स का एक सेट है, जो Windows से Linux या Windows के बीच फ़ाइल सिंक्रोनाइज़ेशन और स्ट्रीमिंग को तेज़ और कुशल तरीके से संभालता है
- यह प्रोजेक्ट Stadia game development environment के लिए बनाया गया था, और मौजूदा scp या rsync की सीमाओं (धीमा ट्रांसफ़र, पूरी फ़ाइल कॉपी, delta mode की कमी) को हल करने के लिए अस्तित्व में आया
- इसकी मुख्य तकनीक FastCDC नामक Content Defined Chunking algorithm है, जो फ़ाइल बदलने पर केवल वास्तव में बदला हुआ डेटा भेजती है, इसलिए बड़े पैमाने के बार-बार होने वाले सिंक्रोनाइज़ेशन के लिए यह उपयुक्त है
- open source होने के बावजूद यह commercial-grade performance देता है (उदाहरण: 1500 MB/s सिंक गति, sshfs की तुलना में 2~5 गुना तेज़ स्ट्रीमिंग), और cloud/remote development environments में competing services की तुलना में स्पष्ट रूप से अधिक कुशल है
मुख्य टूल्स का विवरण
cdc_rsync
- यह Windows से Linux में फ़ाइल सिंक्रोनाइज़ करने का टूल है, और पारंपरिक Linux rsync की कमियों को दूर करता है
- जिन फ़ाइलों का समय और आकार मेल खाते हैं उन्हें तुरंत skip करता है, और केवल बदली हुई फ़ाइलों को कुशलतापूर्वक ट्रांसफ़र करता है
- FastCDC का उपयोग करके यह केवल बदले हुए डेटा की स्थिति पहचानकर उसे ट्रांसफ़र करता है, जिससे न्यूनतम ट्रैफ़िक और तेज़ ट्रांसफ़र मिलता है
- सिंक्रोनाइज़ेशन परीक्षणों में इसने Cygwin पर चलने वाले rsync की तुलना में लगभग 3 गुना, और मानक Linux rsync से भी कहीं बेहतर प्रदर्शन दिखाया
- यह high-speed compression को सपोर्ट करता है और फ़ाइलों को byte स्तर तक verify करने वाली सरल लेकिन कुशल algorithm संरचना रखता है
cdc_stream
- यह Windows के folders और files को Linux में मानो local files की तरह real-time स्ट्रीम करके सुलभ बनाता है
- इसका ढाँचा पारंपरिक sshfs जैसा है, लेकिन फ़ाइल read speed और cache performance को optimize किया गया है
- change detection और differential streaming के माध्यम से यह केवल बदला हुआ डेटा दोबारा भेजता है, और metadata processing भी तेज़ है
- Linux directories को readonly रूप में उपलब्ध कराया जाता है, और Windows में बदली गई फ़ाइलें लगभग तुरंत (अधिकतम कुछ सेकंड में) Linux पर दिखाई देती हैं
- game data जैसी बड़ी फ़ाइलों तक पहुँच की ज़रूरत वाले development environments में इसने वास्तव में sshfs की तुलना में 2~5 गुना performance improvement दिखाया
समर्थित प्लेटफ़ॉर्म
- cdc_rsync: मुख्य रूप से Windows x86_64 ↔ Ubuntu 22.04 x86_64 के बीच सपोर्ट, remote synchronization और local synchronization दोनों के लिए क्रमिक समर्थन
- cdc_stream: Windows x86_64 से Ubuntu 22.04 x86_64 तक स्ट्रीमिंग सपोर्ट; विपरीत दिशा या अन्य प्लेटफ़ॉर्म समर्थित नहीं हैं
authentication/सेटअप का तरीका
- ssh.exe और sftp.exe के माध्यम से passwordless authentication (key-based authentication की सिफारिश)
- Windows में command-line path या environment variables के माध्यम से commands के विस्तृत path निर्दिष्ट किए जा सकते हैं
- अतिरिक्त SSH command options और user-specific config file (
%USERPROFILE%\.ssh\config) का उपयोग किया जा सकता है
- Google के internal users के लिए अलग security key आधारित authentication environment variables उपलब्ध हैं
उपयोग के उदाहरण
cdc_rsync उपयोग उदाहरण
- फ़ाइल सिंक्रोनाइज़ेशन:
cdc_rsync C:\path\to\file.txt user@linux.device.com:~
- wildcard और पूरी directory की recursive synchronization का समर्थन:
cdc_rsync C:\path\to\assets\* user@linux.device.com:~/assets -r
- synchronization status को real time में देखना (
-v option), local files के बीच synchronization भी संभव
cdc_stream उपयोग उदाहरण
- directory streaming शुरू करना:
cdc_stream start C:\path\to\assets user@linux.device.com:~/assets
- streaming session रोकना:
cdc_stream stop user@linux.device.com:~/assets
- wildcard के साथ कई sessions प्रबंधित किए जा सकते हैं
समस्या समाधान और logging
- cdc_stream background service आधारित चलता है, और logs डिफ़ॉल्ट रूप से
%APPDATA%\cdc-file-transfer\logs path में सहेजे जाते हैं
- विस्तृत logs और debugging options उपलब्ध हैं (verbosity level JSON settings)
- cdc_rsync console logs आउटपुट करता है, और
-vvv, -vvvv के साथ अधिक विस्तृत logs देखे जा सकते हैं
- असफल SSH/SFTP commands को trace करके उन्हें सीधे चलाकर समस्या के कारण का विश्लेषण करना आसान है
तकनीकी स्टैक और संचालन संबंधी जानकारी
- मुख्य development language C++ है, और कुछ Python/बिल्ड प्रबंधन के लिए Starlark का उपयोग हुआ है
- Apache-2.0 लाइसेंस, 8 से अधिक contributors, और GitHub पर 3.3k stars
- 2023 के बाद से अतिरिक्त development के बिना Archived स्थिति में है
सारांश
- CDC File Transfer Windows-Linux के बीच बड़े फ़ाइलों और directories के बार-बार ट्रांसफ़र में उद्योग-स्तरीय शीर्ष दक्षता और गति प्रदान करता है
- remote development, gaming, media, data analysis जैसे cross-platform environments में यह synchronization और streaming प्रक्रियाओं को काफी छोटा कर देता है
- अन्य synchronization/streaming tools की तुलना में सरलता, तेज़ partial change detection, और उत्कृष्ट cache capabilities इसकी मज़बूत प्रतिस्पर्धात्मकता बनाते हैं
- SSH/SFTP authentication और command-line या config file आधारित लचीली सेटिंग्स के कारण engineers इसे आसानी से अपना और संचालित कर सकते हैं
- source code देखा और customize किया जा सकता है, और open source community में यह पहले से ही उच्च प्रतिष्ठा और उपयोगिता दर्ज कर चुका है
1 टिप्पणियां
Hacker News राय
पिछले साल से Content Defined Chunking पर तरह-तरह के प्रयोग कर रहा हूँ (खासकर bonanza.build)। पता चला कि सबसे व्यापक रूप से इस्तेमाल होने वाले FastCDC algorithm में भी सुधार की गुंजाइश है, और lookahead approach इस्तेमाल करने पर performance काफी बेहतर हो जाती है। इसके implementation के लिए buildbarn/go-cdc देखें
क्या rsync पहले से ही content-defined chunk boundaries को rolling hash condition से define करके इस्तेमाल नहीं करता? (विकी लिंक1, विकी लिंक2)। rsync की तुलना में speedup शायद rolling hash की efficiency और native Windows executable के इस्तेमाल (Windows file system धीमा है) जैसी वजहों से हो सकता है। फिर भी performance improvement दिलचस्प है, और इसका open source होना भी सकारात्मक है। अच्छा होगा अगर यह तरीका rsync के अंदर भी आ जाए
अच्छा लगा कि Stadia ने इस तरह एक और दीर्घकालिक लाभ छोड़ दिया। अफ़सोस है कि self-hosted version नहीं आया; आज के DRM वाले दौर में अगर आता भी, तो शायद तुरंत piracy जैसा मान लिया जाता
जिन्हें यह जानना था कि Content Defined Chunking वास्तव में chunk कैसे बनाता है, उनके लिए यह ब्लॉग और यह ब्लॉग दोनों concepts को बहुत आसान तरीके से समझाते हैं
मुख्य पंक्ति: "यह remote diffing algorithm CDC(Content Defined Chunking) पर आधारित है, और tests में rsync से अधिकतम 30 गुना तेज़ है (1500MB/s बनाम 50MB/s)"
क्या किसी को पता है कि इस feature को standard rsync tool में integrate करने का कोई काम चल रहा है? अच्छा होगा अगर यह व्यापक रूप से इस्तेमाल हो, लेकिन official website देखने पर लगता है कि Linux-to-Linux के बीच तो इसका support ही नहीं है, जो थोड़ा खटकता है
यह project भी काफ़ी शानदार लगा। मैंने अपने काम के लिए इसी तरह की functionality खुद implement की थी, और कठिन constraints वाले मामलों में यह काफ़ी महत्वपूर्ण हो सकता है। फिर भी यह विचार आता है कि rsync से शुरू करना शायद आसान होता
सोच रहा हूँ कि क्या यह तकनीक git पर भी लागू हो सकती है। git blob hash बनाते समय length information शामिल करता है, इसलिए data का केवल एक हिस्सा बदलने पर भी शुरू से hash दोबारा calculate करना पड़ता है। CDC के साथ यह कहीं अधिक efficient लग सकता है
यह विवरण प्रभावशाली लगा: “latest release के precompiled binaries को Windows पर download करके unzip कर लें। Linux binary अपने-आप Windows tool से ~/.cache/cdc-file-transfer में deploy हो जाएगी। अलग installation की ज़रूरत नहीं है।” rsync के विपरीत, Linux destination पर अलग service install किए बिना इसका काम करना अच्छा लगा। rsync की यह बात थोड़ी असुविधाजनक लगती थी
क्या IBM Aspera भी इसी तरह काम करता है, यह जानने की जिज्ञासा है। जब मैं game publisher QA में काम करता था, तब Aspera से screen recordings upload करता था, और यह office internet की सामान्य upload speed से कहीं तेज़ दिखता था (IBM Aspera परिचय)