2 puan yazan GN⁺ 2025-10-02 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2025-10-02
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

    • Bu lookahead yaklaşımı, Lempel-Ziv sıkıştırıcılarındaki “lazy matching”e çok benziyor gibi görünüyor (ilgili blog). Buzhash ile karşılaştırma sonuçlarını merak ediyorum. Genelde gearhash'in yapısı daha basit olduğu için daha hızlı olması beklenir. Bu arada gear init için mt19937 yerine rand/v2'nin seeded generator'ı daha uygun olabilir
    • bonanza.build oldukça etkileyici. Hâlâ Bazel kullanıyor olsaydım kesinlikle denemek isterdim
    • go-cdc, fastcdc yerine cdc_rsync içinde kullanılırsa performans açısından ne kadar fark yaratır merak ediyorum
    • Yapay zekanın bu alana katkı sunma payı olup olamayacağını düşündürüyor. Veri sıkıştırmada (AI tabanlı sıkıştırma örneği), RF modülasyon optimizasyonunda (makale bağlantısı) yapay zeka zaten yararlı biçimde kullanılıyor. Küçük modellerle (özellikle SSM ailesi) chunk sınırı optimizasyonunu öğrenmek de mümkün olabilir diye düşünüyorum
  • 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

    • rsync content-defined chunking kullanmıyor; bunun yerine hedef dosya üzerinde sabit boyutlu bloklar kullanıyor. Rolling hash ile kaynak dosyanın herhangi bir konumunda bu blokları tespit ederek yeniden göndermeyi önleyebiliyor (teknik belge)
    • Repo'nun README dosyası, rsync ile yaklaşım farkını çok anlaşılır biçimde açıklıyor
    • rsync fiilen durmuş bir proje gibi hissettiriyor. Uzun zamandır bakım görüyor ama pek çok kalite iyileştirmesi eksik kaldı; şimdi biraz vim gibi, teoride bakımı sürüyor ama pratikte pek ilerlemiyor izlenimi veriyor
  • 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

    • Self-hosted oyun akışı için moonlight ve sunshine ikilisi önerilir. Çok iyi çalışıyor
    • Stadia'nın self-hosted olamadığını duymuştum. Geliştiricilerin Stadia desteğini ayrıca derlemesi gerekiyordu ve bu ayrı bir DirectX alternatifi platform da olabilir. Proton benzeri hafif bir emülasyon ortamı da olmuş olabilir ama benim oynadığım oyunlarda oyun içinde Stadia'ya özel özel tuş atamaları (Stadia'ya özgü semboller) gösteriliyordu. Yani belirgin bir özelleştirme vardı. Bu yönüyle PlayStation, Xbox ve Nvidia'nın oyun akışı çözümlerinden açıkça ayrılıyordu. Amazon Luna hakkında bilgim yok
    • Self-hosted uzaktan oyun akışı için Moonlight/Sunshine(Apollo)'ya bakın. Stadia ayrı bir özel derleme gerektirdiği için pek anlamlı değil
    • DRM çağında ‘korsan’ın tam olarak ne anlama geldiğini merak ediyorum. Kişinin kendi sahip olduğu PC oyununu buluttan stream etmesi mi kastediliyor?
    • "self-hosting Stadia" aslında zaten çeşitli servis ve araçlarda uygulanmış durumda. Steam'in kendisinde mükemmel bir oyun akışı özelliği var. Nvidia ve AMD de geçmişte GPU sürücülerine bunu eklemişti; Steam Deck'te de oyun stream edilebiliyor. Sony'nin PS4/PC streaming'i ve Microsoft'un Xbox streaming'i gibi çeşitli örnekler de var
  • 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

    • Teşekkürler. Orijinal bağlantıda ayrıntılı açıklama az olduğu için sinir bozucuydu; yakında okuyacağım
  • 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ü

    • Linux'tan Linux'a destek ve daha genel uyumlulukla ilgili tartışmalar burada 1 ve burada 2 özetlenmiş
  • 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

    • “scp yalnızca tüm dosyaları kopyalar, delta modu yoktur; küçük dosya sayısı çoksa yavaştır ve sıkıştırması da yavaştır” deniyor ama rsync'te -z seçeneğiyle sıkıştırma kullanılabiliyor (açıklama). CPU yeterliyse -z seçeneği önerilir ve hız da artar. Çok hızlı olmasa da scp yerine rsync daha iyi bir başlangıç noktası gibi görünüyor
    • “Remote diffing algoritması CDC tabanlıdır ve testlerde rsync'ten 30 kata kadar daha hızlıdır (1500 MB/s vs 50 MB/s)”
    • rsync bazı alanlarda, özellikle oyun geliştirmede, yeterince optimize görünmüyor. Oyun geliştirmede onlarca hatta yüz binlerce dosya ve dizin kopyalamak sık görülür; rsync ise dizin/dosya oluşturmayı seri hale getirme eğilimi yüzünden hızla yavaşlıyor. GNU parallel gibi araçlarla bunu N tane rsync işine bölmeyi ya da dosya listesini elle üretmeyi denedim ama sonunda syncthing gibi önceden indeksleme yapabilen bir araçla çözdüm
  • 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

    • xet, git lfs'nin yerine geçmek için CDC yaklaşımını gerçekten uyguladı (ilgili örnek)
    • restic/borg gibi yedekleme araçları da CDC kullanıyor ama git yerine geçecek bir çözüm için bunun gerçekten denenip denenmediğini merak ediyorum
  • “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ı

    • Aslında rsync'in en yaygın kullanım biçimi, ssh üzerinden uzaktaki alıcı tarafı otomatik başlatmaktır. cdc de aynı şekilde çalıştığı için rsync kullanmak için ayrı bir servis kurmak gerekir kısmı bir yanlış anlama
  • 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ı)