- CDC File Transfer, Google tarafından geliştirilen açık kaynaklı bir araçtır ve Windows ile Linux arasında dosya senkronizasyonu ve akışı destekler
- Dosyaların yalnızca değişen kısımlarını aktaran Content Defined Chunking (CDC) tekniğini kullanarak, mevcut rsync'e kıyasla 30 kata kadar daha yüksek hız sağlar
- cdc_rsync ve cdc_stream olmak üzere iki temel araç sunar; bunlar sırasıyla dosya senkronizasyonu ve gerçek zamanlı akış işlevlerini yerine getirir
- Windows tabanlı geliştiricilerin Linux ortamına dosyaları verimli şekilde dağıtıp test etmesi için tasarlanmıştır; bu nedenle uzak geliştirme ve oyun geliştirme ortamlarında özellikle etkilidir
- ssh ve sftp tabanlı kimlik doğrulamayı destekler, kullanımı sezgiseldir ve çeşitli platformlar için ikili dosyalar sunar
Genel bakış ve projenin önemi
- CDC File Transfer, Google'ın açık kaynak olarak yayımladığı bir dosya aktarım araçları paketidir; Windows'tan Linux'a veya Windows sistemleri arasında dosya senkronizasyonu ve akışı işlemlerini hızlı ve verimli biçimde gerçekleştirir
- Bu proje, Stadia oyun geliştirme ortamı için oluşturuldu ve mevcut scp ya da rsync'in sınırlamalarını (yavaş aktarım, tüm dosyanın kopyalanması, delta modu eksikliği) gidermek için ortaya çıktı
- Temel teknoloji, FastCDC adlı bir Content Defined Chunking algoritmasıdır; dosya değiştiğinde yalnızca gerçekten değişen veriyi aktararak büyük hacimli tekrar eden senkronizasyonlar için optimize edilmiştir
- Açık kaynak olmasına rağmen ticari düzeyde performans sunar (ör. 1500 MB/s senkronizasyon hızı, sshfs'e kıyasla 2 ila 5 kat daha hızlı akış) ve bulut/uzak geliştirme ortamlarında rakip hizmetlere göre belirgin verimlilik sağlar
Başlıca araçların açıklaması
cdc_rsync
- Windows'tan Linux'a dosya senkronize eden bir araçtır ve mevcut Linux rsync'in zayıf yönlerini aşar
- Zaman damgası ve dosya boyutu aynı olan dosyaları hızlıca atlar ve yalnızca değişen dosyaları verimli şekilde aktarır
- FastCDC kullanarak değişen verinin yalnızca konumunu tespit edip aktarır; böylece minimum trafik ve yüksek hız sağlar
- Senkronizasyon testlerinde, Cygwin üzerinde çalışan rsync'ten yaklaşık 3 kat, standart Linux rsync'ten ise çok daha hızlı performans göstermiştir
- Yüksek hızlı sıkıştırma desteğine ve dosyaları bayt düzeyine kadar doğrulayan basit ama verimli bir algoritma yapısına sahiptir
cdc_stream
- Windows'taki klasör ve dosyalara Linux'ta yerel dosyaymış gibi gerçek zamanlı akışla erişilmesini sağlar
- Yapı olarak mevcut sshfs'e benzer, ancak dosya okuma hızı ve önbellek performansı optimize edilmiştir
- Değişiklik algılama ve fark temelli akış sayesinde yalnızca değişen veriyi yeniden aktarır ve metadata işlemlerini de hızlı yürütür
- Linux dizinleri readonly olarak sunulur; Windows'ta değişen dosyalar neredeyse anında (en fazla birkaç saniye içinde) Linux'a yansır
- Oyun verileri gibi büyük dosyalara erişim gerektiren geliştirme ortamlarında, pratikte sshfs'e kıyasla 2 ila 5 kat performans artışı gösterir
Desteklenen platformlar
- cdc_rsync: Ağırlıklı olarak Windows x86_64 ↔ Ubuntu 22.04 x86_64 arasında desteklenir; uzak senkronizasyon ve yerel senkronizasyon için destek kademeli olarak genişletilmektedir
- cdc_stream: Windows x86_64'ten Ubuntu 22.04 x86_64'e akışı destekler; ters yönde veya diğer platformlarda desteklenmez
Kimlik doğrulama/ayar yöntemi
- ssh.exe ve sftp.exe üzerinden parolasız kimlik doğrulama (anahtar tabanlı kimlik doğrulama önerilir)
- Windows'ta komut satırı yolu veya ortam değişkenleriyle komutların ayrıntılı yolu belirtilebilir
- Ek SSH komut seçenekleri ve kullanıcıya özel yapılandırma dosyaları (
%USERPROFILE%\.ssh\config) kullanılabilir
- Google iç kullanıcıları için ayrı bir güvenlik anahtarı tabanlı kimlik doğrulama ortam değişkeni sunulur
Kullanım örnekleri
cdc_rsync kullanım örnekleri
- Dosya senkronizasyonu:
cdc_rsync C:\path\to\file.txt user@linux.device.com:~
- Joker karakter ve dizinin tamamını özyinelemeli senkronize etme desteği:
cdc_rsync C:\path\to\assets\* user@linux.device.com:~/assets -r
- Senkronizasyon durumunu gerçek zamanlı izleme (
-v seçeneği), ayrıca yerel dosyalar arasında senkronizasyon da mümkündür
cdc_stream kullanım örnekleri
- Dizin akışını başlatma:
cdc_stream start C:\path\to\assets user@linux.device.com:~/assets
- Akış oturumunu durdurma:
cdc_stream stop user@linux.device.com:~/assets
- Joker karakterlerle birden fazla oturum yönetilebilir
Sorun giderme ve günlükleme
- cdc_stream, arka plan hizmeti tabanlı çalışır; günlükler varsayılan olarak
%APPDATA%\cdc-file-transfer\logs yoluna kaydedilir
- Ayrıntılı günlük ve hata ayıklama seçenekleri sunar (
verbosirty düzeyi JSON ayarı)
- cdc_rsync, günlükleri konsola yazdırır;
-vvv, -vvvv ile daha ayrıntılı günlük çıktısı alınabilir
- Başarısız SSH/SFTP komutlarını izlemek ve doğrudan çalıştırarak sorunun nedenini analiz etmek kolaydır
Teknoloji yığını ve operasyon bilgileri
- Başlıca geliştirme dili C++'tır; kısmen Python ve derleme yönetimi için Starlark kullanılır
- Apache-2.0 lisansı, 8'den fazla katkıcı ve GitHub'da 3.3k yıldız
- 2023 sonrasında ek geliştirme olmadan Archived durumundadır
Özet
- CDC File Transfer, Windows-Linux arasında büyük dosya ve dizinlerin tekrar eden aktarımında sektörün en üst düzey verimlilik ve hızını sunar
- Uzak geliştirme, oyun, medya, veri analizi gibi çapraz platform çalışma ortamlarında senkronizasyon ve akış süreçlerini ciddi ölçüde kısaltma avantajı sağlar
- Diğer senkronizasyon/akış araçlarına kıyasla basitlik, hızlı kısmi değişiklik algılama ve güçlü önbellek özellikleriyle güçlü bir rekabet avantajına sahiptir
- SSH/SFTP kimlik doğrulaması ile çeşitli komut satırı veya yapılandırma dosyası tabanlı esnek ortam ayarları sayesinde mühendisler tarafından kolayca benimsenip işletilebilir
- Kaynak kodu incelenebilir ve özelleştirilebilir; açık kaynak topluluğunda şimdiden yüksek itibar ve kullanım düzeyine ulaşmıştır
1 yorum
Hacker News görüşleri
Geçen yıldan beri Content Defined Chunking üzerine çeşitli deneyler yapıyorum (özellikle bonanza.build). En yaygın kullanılan FastCDC algoritmasında bile iyileştirme alanı olduğunu fark ettim ve lookahead yaklaşımıyla performansın ciddi biçimde arttığını gördüm. Bununla ilgili uygulama için buildbarn/go-cdc'ye bakabilirsiniz
rsync zaten content-defined chunk sınırlarını rolling hash koşuluyla tanımlayıp kullanmıyor mu? (wiki bağlantısı 1, wiki bağlantısı 2). rsync'e göre hız artışının rolling hash verimliliği ve yerel Windows yürütülebilir dosyası kullanımı (Windows dosya sistemi yavaş) gibi etkenlerden kaynaklanıyor olabileceğinden şüpheleniyorum. Her durumda performans artışı ilginç ve açık kaynak yapılmış olması da olumlu. Umarım bu yöntem rsync'in içine de girer
Stadia'nın böyle bir başka uzun vadeli fayda daha bırakmış olmasına sevindim. Self-hosted sürümünün çıkmamış olması üzücü; ama günümüzün DRM dünyasında çıksa muhtemelen hemen korsan ilan edilirdi
Content Defined Chunking'in pratikte nasıl chunk ürettiğini merak edenler için bu blog ve bu blog kavramı çok anlaşılır biçimde açıklıyor
Kilit ifade: "Bu remote diffing algoritması CDC(Content Defined Chunking) tabanlıdır ve testlerde rsync'ten 30 kata kadar daha hızlıdır (1500MB/s'ye karşı 50MB/s)"
Bu özelliği standart rsync aracına entegre etmeye yönelik bir çalışma olup olmadığını bilen var mı merak ediyorum. Bunun yaygın kullanılmasını isterim ama resmi siteye bakınca Linux'tan Linux'a destek hiç yokmuş gibi görünüyor; bu da üzücü
Bu proje de oldukça havalı görünüyor. Benzer işlevi işimdeki ihtiyaçlara göre kendim uyguladığım olmuştu ve koşullar zorlaştığında gerçekten önemli olabiliyor. Yine de rsync'ten başlamak daha kolay olmaz mıydı diye düşündürüyor
Bu teknolojinin git'e de uygulanıp uygulanamayacağını merak ediyorum. git blob, uzunluk bilgisini de içerecek şekilde hash oluşturuyor; bu yüzden verinin küçük bir kısmı değişse bile hash'i baştan hesaplamak gerekiyor. CDC burada çok daha verimli olabilir gibi geliyor
“Son sürümün precompiled binary dosyalarını Windows'a indirip arşivden çıkarmanız yeterli. Linux binary'leri Windows aracı tarafından otomatik olarak ~/.cache/cdc-file-transfer içine dağıtılıyor. Ayrı kurulum gerekmiyor” açıklaması etkileyici. rsync'ten farklı olarak Linux hedefte ayrıca servis kurmadan çalışması güzel. rsync'te bu kısım biraz can sıkıcıydı
IBM Aspera'nın da buna benzer çalışıp çalışmadığını merak ediyorum. Oyun yayıncısı QA işinde çalışırken Aspera ile ekran kayıtları yüklüyordum ve ofisin normal internet yükleme hızından çok daha hızlı görünüyordu (IBM Aspera tanıtımı)