Content-addressed storage — obyekt manzilini uning joylashuvi yoki foydalanuvchi bergan nomdan emas, mazmunidan hisoblangan cryptographic hash orqali aniqlaydigan saqlash modelidir. Bir xil byte ketma-ketligi bir xil digest beradi; mazmundagi kichik o‘zgarish esa boshqa identifikator hosil qiladi.
Address hosil qilish
Client yoki storage tizimi payload ustida SHA-256 kabi hash hisoblaydi. Natija key yoki object ID sifatida ishlatiladi. Object o‘qilganda byte’lar yana hash qilinib, kutilgan manzil bilan solishtirilishi mumkin.
payload → SHA-256 → digest → storage address
Hash objectning ma’nosini emas, aynan byte representationni ifodalaydi. Bir xil rasm turli metadata yoki compression bilan saqlansa vizual mazmun bir xil bo‘lsa ham digest boshqacha chiqadi. Canonical serialization mantiqiy bir xil strukturani barqaror byte ko‘rinishga keltiradi.
Immutable model
Mavjud digest ostidagi object o‘zgartirilmaydi, chunki yangi mazmun eski hashga mos kelmaydi. Update yangi object yaratadi, yuqori qatlamdagi reference esa yangi digestga o‘tadi. Bu immutable model cache va replicationni soddalashtiradi.
Git blob, tree va commit obyektlarini mazmun identifikatori bilan bog‘laydi. Container image layerlari va package artifactlari ham digest orqali tekshiriladi. Manifest nomlangan versiyani bir nechta content addressga bog‘lashi mumkin.
Integrity va trust
Digest download buzilmaganini tekshiradi. Ammo kutilgan digest ishonchli kanal orqali olinmagan bo‘lsa attacker payload bilan birga boshqa digestni ham almashtirishi mumkin. Digital signature digestni publisher identity va metadata bilan bog‘laydi.
Collision ikki turli payload bir digest berishi holatidir. Cryptographic hash collisionga chidamli tanlanadi. MD5 va SHA-1 yangi xavfsizlik dizaynlarida collision qarshiligi uchun yetarli emas. Algorithm nomi address formatida saqlansa keyinchalik boshqa hashga migration qilish mumkin.
Deduplication
Bir xil content qayta yozilganda mavjud digest topilib, byte’lar yana saqlanmasligi mumkin. Reference count yoki reachability graph objectdan nechta manifest foydalanishini kuzatadi. Bu backup, artifact registry va distributed filesystemda storage tejaydi.
Hashni butun fayl bo‘yicha olish faqat aynan bir xil fayllarni deduplicate qiladi. Chunk-level CAS faylni bo‘laklab, o‘zgarmagan qismlarni qayta ishlatadi. Content-defined chunking insert sabab barcha keyingi fixed-size chunk chegaralari siljishini kamaytiradi.
Garbage collection
Object nomi contentdan kelgani uchun “o‘chirish” ko‘pincha reference’ni olib tashlashdir. Hech bir root manifestdan yetib bo‘lmaydigan object garbage hisoblanadi. Mark-and-sweep reachabilityni hisoblab, grace perioddan keyin byte’larni o‘chiradi.
Distributed tizimda yangi reference hali barcha nodega tarqalmagan paytda erta GC data loss keltirishi mumkin. Lease, generation yoki safe-point ishlatiladi. Reference count crash va concurrent update’da noto‘g‘ri bo‘lishi mumkin, shu sabab davriy graph scan bilan tekshiriladi.
Maxfiylik va mavjudlik
Hash deterministik bo‘lgani uchun attacker ma’lum fayl digestini hisoblab, storage’da mavjudligini tekshirishi mumkin. Global cross-user deduplication existence side-channel yaratadi. Tenant bo‘yicha salt yoki alohida namespace bu xavfni kamaytiradi, ammo dedup ko‘lamini toraytiradi.
CAS metadata index yoki manifest yo‘qolsa payloadlar mavjud bo‘lsa ham nomlangan holatni tiklash qiyin. Root reference, signature va mapping alohida backup qilinadi. Ko‘p nusxa yoki erasure coding object durabilityni ta’minlaydi; hashning o‘zi availability bermaydi.
Bog‘liq tushunchalar
Cryptographic hash, Immutable data, Deduplication, Merkle tree, Object storage, Garbage collection, Digital signature