- CDC File Transfer ist ein von Google entwickeltes Open-Source-Tool, das Dateisynchronisierung und Streaming zwischen Windows und Linux unterstützt
- Es nutzt die Content Defined Chunking (CDC)-Technologie, die nur geänderte Teile einer Datei überträgt, und erreicht damit im Vergleich zu herkömmlichem
rsync bis zu 30-mal höhere Geschwindigkeiten
- Es bietet zwei zentrale Werkzeuge, cdc_rsync und cdc_stream, die jeweils Dateisynchronisierung und Echtzeit-Streaming übernehmen
- Es wurde dafür entwickelt, dass Windows-basierte Entwickler Dateien effizient in Linux-Umgebungen bereitstellen und testen können, und ist daher besonders stark in Remote-Development- und Game-Development-Umgebungen
- Unterstützt ssh- und sftp-basierte Authentifizierung, ist intuitiv nutzbar und stellt Binärdateien für verschiedene Plattformen bereit
Überblick und Bedeutung des Projekts
- CDC File Transfer ist eine von Google als Open Source veröffentlichte Sammlung von Dateiübertragungswerkzeugen, die Dateisynchronisierung und Streaming zwischen Windows und Linux oder zwischen Windows-Systemen schnell und effizient verarbeitet
- Das Projekt wurde für die Stadia-Spielentwicklungsumgebung entwickelt und entstand, um die Grenzen von scp und rsync (langsame Übertragung, vollständiges Kopieren von Dateien, fehlender Delta-Modus) zu überwinden
- Die Kerntechnologie ist der FastCDC-Algorithmus für Content Defined Chunking, der bei Dateiänderungen nur die tatsächlich geänderten Daten überträgt und damit für wiederholte Synchronisierung großer Datenmengen optimiert ist
- Trotz Open Source bietet es Performance auf kommerziellem Niveau (z. B. 1500 MB/s Synchronisierungsgeschwindigkeit, 2- bis 5-mal schnelleres Streaming als
sshfs) und weist in Cloud- und Remote-Development-Umgebungen eine deutlich höhere Effizienz als konkurrierende Dienste auf
Beschreibung der wichtigsten Werkzeuge
cdc_rsync
- Ein Werkzeug zur Dateisynchronisierung von Windows nach Linux, das die Schwächen des bestehenden Linux-
rsync überwindet
- Dateien mit übereinstimmender Zeit und Dateigröße werden schnell übersprungen, und nur geänderte Dateien werden effizient übertragen
- Mit FastCDC wird nur die Position geänderter Daten erkannt und übertragen, was minimalen Traffic und schnelle Transfers ermöglicht
- Synchronisationstests zeigen eine etwa dreimal höhere Leistung als unter Cygwin ausgeführtes
rsync sowie deutlich bessere Performance als Standard-Linux-rsync
- Es unterstützt schnelle Komprimierung und verfügt über eine einfache, aber effiziente Algorithmusstruktur, die Dateien bis auf Byte-Ebene verifiziert
cdc_stream
- Macht Ordner und Dateien unter Windows in Linux per Echtzeit-Streaming so zugänglich, als wären sie lokale Dateien
- Ähnelt strukturell
sshfs, ist aber bei Dateilesegeschwindigkeit und Cache-Performance optimiert
- Durch Änderungserkennung und differenzielles Streaming werden nur geänderte Daten erneut übertragen, auch Metadaten werden schnell verarbeitet
- Linux-Verzeichnisse werden schreibgeschützt bereitgestellt; unter Windows geänderte Dateien werden nahezu sofort (innerhalb von bis zu wenigen Sekunden) in Linux übernommen
- In Entwicklungsumgebungen, die Zugriff auf große Dateien wie Spieldaten benötigen, zeigt es in der Praxis eine 2- bis 5-mal bessere Performance als
sshfs
Unterstützte Plattformen
- cdc_rsync: hauptsächlich unterstützt zwischen Windows x86_64 ↔ Ubuntu 22.04 x86_64, Unterstützung für Remote-Synchronisierung und lokale Synchronisierung wird schrittweise erweitert
- cdc_stream: unterstützt Streaming von Windows x86_64 nach Ubuntu 22.04 x86_64, die Gegenrichtung oder andere Plattformen werden nicht unterstützt
Authentifizierungs- und Konfigurationsmethoden
- Passwortlose Authentifizierung über ssh.exe und sftp.exe (schlüsselbasierte Authentifizierung empfohlen)
- Unter Windows können detaillierte Pfade zu Befehlen per Kommandozeile oder Umgebungsvariablen angegeben werden
- Zusätzliche SSH-Befehlsoptionen und benutzerspezifische Konfigurationsdateien (
%USERPROFILE%\.ssh\config) können verwendet werden
- Für interne Google-Nutzer stehen Umgebungsvariablen für eine separate sicherheitsschlüsselbasierte Authentifizierungsumgebung bereit
Nutzungsbeispiele
Beispiele für cdc_rsync
- Dateisynchronisierung:
cdc_rsync C:\path\to\file.txt user@linux.device.com:~
- Unterstützung für Wildcards und rekursive Synchronisierung ganzer Verzeichnisse:
cdc_rsync C:\path\to\assets\* user@linux.device.com:~/assets -r
- Echtzeitprüfung des Synchronisierungsstatus (Option
-v), Synchronisierung auch zwischen lokalen Dateien möglich
Beispiele für cdc_stream
- Starten des Verzeichnis-Streamings:
cdc_stream start C:\path\to\assets user@linux.device.com:~/assets
- Beenden einer Streaming-Sitzung:
cdc_stream stop user@linux.device.com:~/assets
- Verwaltung mehrerer Sitzungen per Wildcard möglich
Fehlerbehebung und Logging
cdc_stream arbeitet auf Basis eines Hintergrunddienstes; Logs werden standardmäßig unter %APPDATA%\cdc-file-transfer\logs gespeichert
- Detaillierte Logs und Debugging-Optionen werden bereitgestellt (JSON-Konfiguration mit verbosity-Level)
cdc_rsync gibt Konsolenlogs aus, detaillierte Logs sind mit -vvv und -vvvv möglich
- Fehlgeschlagene SSH-/SFTP-Befehle lassen sich nachverfolgen und direkt ausführen, was die Ursachenanalyse erleichtert
Technologie-Stack und Betriebsinformationen
- Die wichtigste Entwicklungssprache ist C++, teilweise kommen Python sowie Starlark für das Build-Management zum Einsatz
- Apache-2.0-Lizenz, mehr als 8 Mitwirkende, auf GitHub 3,3k Stars erreicht
- Seit 2023 ohne weitere Entwicklung im Archived-Status
Zusammenfassung
- CDC File Transfer bietet bei wiederholter Übertragung großer Dateien und Verzeichnisse zwischen Windows und Linux Effizienz und Geschwindigkeit auf Spitzenniveau
- In plattformübergreifenden Arbeitsumgebungen wie Remote Development, Games, Medien und Datenanalyse verkürzt es Synchronisierungs- und Streaming-Prozesse erheblich
- Im Vergleich zu anderen Synchronisierungs- und Streaming-Tools besitzt es durch Einfachheit, schnelle Erkennung partieller Änderungen und starke Cache-Funktionen eine hohe Wettbewerbsfähigkeit
- Dank SSH-/SFTP-Authentifizierung sowie flexibler Umgebungsanpassung über Kommandozeile oder Konfigurationsdateien können Engineers es leicht einführen und betreiben
- Der Quellcode kann eingesehen und angepasst werden; in der Open-Source-Community hat das Projekt bereits einen hohen Ruf und eine breite Nutzung erreicht
1 Kommentare
Hacker-News-Kommentare
Ich experimentiere seit letztem Jahr auf verschiedene Weise mit Content Defined Chunking (insbesondere bonanza.build). Dabei habe ich festgestellt, dass selbst beim am weitesten verbreiteten FastCDC-Algorithmus noch Raum für Verbesserungen besteht und dass sich die Leistung mit einem Lookahead-Ansatz deutlich steigern lässt. Eine Implementierung dazu findet sich unter buildbarn/go-cdc
Nutzt rsync nicht bereits Content-Defined-Chunk-Grenzen, die über eine Rolling-Hash-Bedingung definiert sind? (Wiki-Link 1, Wiki-Link 2). Ich vermute, dass die Geschwindigkeitsverbesserung gegenüber rsync eher an der Effizienz des Rolling Hashs und daran liegt, dass native Windows-Binärdateien verwendet werden (das Windows-Dateisystem ist langsam). Trotzdem ist der Performancegewinn interessant, und auch dass es Open Source ist, ist positiv. Hoffentlich findet diese Methode auch ihren Weg in rsync
Es freut mich, dass Stadia auf diese Weise noch einen weiteren langfristigen Nutzen hinterlassen hat. Schade, dass keine Self-Hosting-Version erschienen ist, aber in der heutigen DRM-Welt würde sie, falls sie käme, wohl sofort als Piraterie abgestempelt werden
Falls sich jemand gefragt hat, wie Content Defined Chunking in der Praxis tatsächlich Chunks erzeugt: dieser Blog und dieser Blog erklären das Konzept sehr anschaulich
Kernsatz: „Dieser Remote-Diffing-Algorithmus basiert auf CDC (Content Defined Chunking) und ist in Tests bis zu 30-mal schneller als rsync (1500MB/s gegenüber 50MB/s)“
Ich würde gern wissen, ob an einer Integration dieser Funktion in das Standardwerkzeug rsync gearbeitet wird. Es wäre schön, wenn das breit genutzt würde, aber der offiziellen Website nach scheint es zwischen Linux und Linux gar nicht unterstützt zu werden
Ich finde auch dieses Projekt ziemlich cool. Ich habe einmal etwas mit ähnlicher Funktionalität für meine Arbeit selbst implementiert, und unter schwierigen Bedingungen ist so etwas ziemlich wichtig. Trotzdem frage ich mich, ob es nicht einfacher gewesen wäre, von rsync aus zu starten
Ich frage mich, ob sich diese Technik auch auf git anwenden ließe. Git-Blobs bilden ihren Hash unter Einbeziehung der Längeninformation, daher muss bei jeder noch so kleinen Datenänderung der Hash von Anfang an neu berechnet werden. Mit CDC wäre das vermutlich viel effizienter
Die Erklärung „Lade einfach das vorkompilierte Binary des neuesten Releases unter Windows herunter und entpacke es. Das Linux-Binary wird vom Windows-Tool automatisch nach ~/.cache/cdc-file-transfer verteilt. Es ist keine zusätzliche Installation erforderlich“ fand ich beeindruckend. Im Gegensatz zu rsync funktioniert es ohne Installation eines separaten Dienstes auf dem Linux-Zielsystem. Das war bei rsync immer etwas umständlich
Ich frage mich, ob IBM Aspera auf ähnliche Weise arbeitet. Als ich als QA bei einem Spiele-Publisher gearbeitet habe, habe ich Bildschirmaufzeichnungen mit Aspera hochgeladen, und das war deutlich schneller als die normale Upload-Geschwindigkeit des Büro-Internets (IBM Aspera Einführung)