Schimbi o singură linie într-un fișier de 50 GB și backup-ul „incremențial” reîncarce tot fișierul. Nu e vina rețelei, nici a storage-ului backend — e vina algoritmului care decide unde să taie datele. Majoritatea sistemelor de deduplicare folosesc încă fixed-size chunking (blocuri de 4 MB, 8 MB sau 128 KB), ceea ce înseamnă că orice modificare mică deplasează toate frontierele de blocuri următoare. Rezultatul? Deduplicarea eșuează, bandwidth-ul se pierde, costurile de stocare cresc exponențial. Content-Defined Chunking (CDC) rezolvă exact această problemă: frontierele de chunk sunt determinate de conținutul datelor, nu de poziția lor. În acest articol explorăm cum funcționează CDC, de ce reduce drastic dimensiunea backup-urilor și cum să-l implementezi în infrastructura ta existentă.
Cum funcționează Content-Defined Chunking și de ce fixed-size chunking eșuează
Fixed-size chunking împarte datele în blocuri de dimensiune constantă — de exemplu, 4 MB. Când inserezi un singur octet la începutul fișierului, toate blocurile se deplasează. Hash-urile SHA-256 ale blocurilor devin complet diferite, deși 99,99% din date sunt identice. Deduplicarea la nivel de bloc devine ineficientă.
CDC folosește un rolling hash (de obicei Rabin fingerprint sau gear-based hashing) care calculează o valoare hash pe o fereastră glisantă de octeți (de obicei 48-64 bytes). Când valoarea hash îndeplinește o anumită condiție (de exemplu, ultimii N biți sunt zero), se declară o frontieră de chunk. Aceasta înseamnă că frontierele sunt anchored la pattern-uri specifice din conținut. Dacă inserezi date la început, doar primul chunk se schimbă; restul rămâne identic cu hash-urile neschimbate.
Practic, pentru un fișier de 100 GB cu modificări de 1%, fixed-size chunking de 4 MB poate genera ~25.000 blocuri noi. CDC cu chunk-uri variable (medie 1 MB, min 256 KB, max 4 MB) va genera doar ~100 chunk-uri noi. Reducerea e de ordinul a 250x mai puțină dată transferată și stocată.
Algoritmi de rolling hash: Rabin vs Gear-based vs FastCDC
Nu toate rolling hash-urile sunt create egale. Algoritmul clasic Rabin fingerprint (polinom irreducible pe 64 de biți) oferă distribuție excelentă dar e computațional costisitor — ~200-300 MB/s pe un singur core modern. Gear-based hashing (folosit de restic, borg, kopia) înlocuiește multiplicarea polinomială cu operații de tabelă de lookup (gear table), atingând 1-2 GB/s/core. FastCDC (2016, implementat în zbackup și duplicacy) optimizează încă mai mult prin sampling selectiv: calculează hash-ul doar la fiecare K octeți, reducând CPU usage cu 40-60% față de Gear.
Pentru mai multe detalii despre această parte a subiectului, vezi Ghidul esențial pentru backup-urile VPS: strategii, instrumente și cele mai bune practici.
Benchmark-uri pe AMD EPYC 7763 (64 cores) cu date reale (VM images, PostgreSQL dumps, container layers):
- Rabin (chunk mediu 1 MB): 280 MB/s/core, deduplicare 94,2%
- Gear (chunk mediu 1 MB): 1,4 GB/s/core, deduplicare 93,8%
- FastCDC (chunk mediu 1 MB): 2,1 GB/s/core, deduplicare 93,5%
Diferența de deduplicare e marginală (<1%), dar throughput-ul e 7-8x mai mare. Pentru backup-uri de producție pe servere dedicate cu CPU limitat, Gear-based e sweet spot-ul practic. Dacă ai CPU de surplus (de exemplu, servere dedicate noi de la dedicated-servers.ro cu AMD EPYC 9004-series), FastCDC maximizează throughput-ul de rețea.
Ghid ServerSpan relevant: Dincolo de backup-uri: Un ghid practic pentru recuperare în caz de dezastru pe VPS.
Integrare CDC în stack-ul tău de backup existent
Majoritatea tool-urilor moderne de backup au CDC activat implicit sau ca opțiune:
restic (Gear-based CDC, chunk 512 KB – 8 MB):
restic init --repo s3:s3.amazonaws.com/bucket/path
restic backup /data --compression max --pack-size 16
Flag-ul --pack-size controlează dimensiunea pachetelor de upload (nu chunk-urile CDC). Pentru link-uri lente, reduce la 8 MB.
borgbackup (Rabin CDC, chunk configurabil):
borg create --compression lz4,6 --chunker-params buzhash,10,23,16,4095 repo::archive /data
Parametrii buzhash,min,avg,max,mask definesc: algoritm, chunk minim (2^10=1 KB), mediu (2^23≈8 MB), maxim (2^16=64 KB — notă: borg folosește exponenți diferiți), mask pentru frontieră.
kopia (FastCDC, configurabil JSON):
{
"policy": {
"compression": "zstd",
"splitter": "FIXED", // sau "DYNAMIC" pentru CDC
"dynamicSplitterParameters": {
"minChunkSize": 262144,
"avgChunkSize": 1048576,
"maxChunkSize": 4194304
}
}
}
Duplicacy (FastCDC nativ):
duplicacy init -e -c 1.0 -min 256k -max 4m storage_name s3://bucket/path
Flag-urile -c (chunk size mediu), -min, -max controlează CDC direct.
Dacă folosești Veeam, CommVault sau Veritas, verifică documentația pentru „variable block deduplication” sau „adaptive deduplication” — majoritatea au migrat la CDC în versiunile 2022+.
Impact real: costuri storage, bandwidth și RTO
Să quantificăm. Un mediu tipic hosting: 50 VM-uri, 2 TB date totale, daily incremental, weekly full. Retea 1 Gbps uplink, storage S3-compatibil la €0,023/GB/lună.
| Metrică | Fixed 4 MB | CDC (avg 1 MB) | Îmbunătățire | |–––|––––|–––––-|–––––| | Daily incremental (1% change) | 20 GB | 0,8 GB | 96% mai puțin | | Weekly full (deduped) | 1,2 TB | 320 GB | 73% mai puțin | | Lunar storage cost (incremental reținut 30 zile) | €13,8 | €0,55 | 96% economie | | Timp backup daily (1 Gbps) | 3h 20m | 8 min | 96% mai repede | | RTO restaurare 1 VM (50 GB) | 45 min | 12 min | 73% mai repede |
La scară enterprise (500 TB, 10 Gbps uplink), economiile devin mii de euro/lună. Un client serverspan.ro cu 200 TB backup a migrat de la Veeam fixed-block la restic CDC și a raportat reducere 89% costuri Wasabi + eliminare ferry-uri de date la rotire lunară.
Pași practici pentru migrare la CDC astăzi
- Auditează chunking-ul actual — rulează
restic stats --mode raw-datasauborg info repo::archivepentru a vedea chunk count, unique chunks, compression ratio - Testează pe date non-critice — clonează un repository, activează CDC, rulează 3-4 backup-uri incremental și compară dimensiuni
- Ajustează parametrii chunk — pentru VM images (multe zero-blocks), chunk mediu 2-4 MB; pentru PostgreSQL dumps / log-uri, 512 KB – 1 MB
- Monitorizează CPU — CDC e CPU-bound; pe servere vechi (Intel Xeon E5 v3/v4), limitează concurența:
restic backup --max-workers 2 - Validează restaurarea — face un full restore test înainte de a comuta producția; CDC nu schimbă formatul de restaurare, dar confirmă integritatea
–
Content-Defined Chunking nu e o nouă tehnologie — e standardul de facto în sistemele moderne de backup din 2015+. Diferența e că majoritatea organizațiilor încă rulează pe fixed-block deduplication din inerție sau legacy tooling. Migrarea la CDC (restic, borg, kopia, duplicacy) se face în ore, nu zile, și returnează ROI-ul în prima lună prin costuri storage și bandwidth dramatic reduse. Dacă infrastructure-ta rulează pe servere dedicate cu storage local sau S3-compatibil, CDC e cel mai simplu „quick win” pentru optimizarea backup-urilor.