Ders 04 / 12
Depolama Maruziyeti
Genel erişime açık depolama kaleminin iki ayrı ölçüsü: 13 nesne grubunun 7'si açık, 61.697 kayıt ve 7 veri türünden 6'sı okunabilir durumda. Kova düzeyinde genel erişimi kapatmak 9.260 kişisel kaydı kapatır ama yayılma yarıçabını 10'da bırakır; 47 kayıtlık yapılandırma kalemini kapatmak yarıçabı 10'dan 5'e indirir ve günde 9 meşru erişimi durdurur. Tüm genel erişimi kapatmanın bedeli günde 8.655 erişimdir.
İçindekiler
Önceki ders ağ yolunu bir önkoşul olarak ele aldı: yol kapalıysa izin işe yaramıyordu. Ama bazı kalemlerin dış yolu bilerek açıktır — abone portalının varlık deposu günde sekiz bin altı yüz meşru dış erişim alır ve kapatılamaz. O kalem için soru yol değil, izin kümesidir: dışarıdan gelen bir istek hangi kimlikle karşılanıyor ve hiçbir kimlik sunmayan bir istek ne okuyabiliyor.
Bu ders depolama kalemlerinin izin kümesini tarıyor. Bulutta Depolama ve Veri kursu kova erişimini ve imzalı bağlantıyı ölçtü; burada mekanik tekrarlanmaz, yalnız maruziyet sayılır. İki ayrı sayı çıkar ve dersin bulgusu ikisinin ayrılmasıdır: açık kalemden okunabilen kayıt ile o kalemden başlayan yayılma yarıçapı aynı düzeltmeyle düşmüyor.
- BG18. İzin iki düzeyde yazılır: kova düzeyi ve nesne grubu düzeyi. Nesne düzeyinde bir değer yazılıysa etkin izin odur; yazılı değilse kova düzeyi devralınır.
- BG19. Genel erişime açık kalem, hiçbir kimlik sunmayan bir isteğin okuyabildiği ya da listeleyebildiği kalemdir. İmzalı erişim bu derste açık sayılmaz.
- BG20. Her nesne grubunun bir veri türü, bir kayıt sayısı ve günde kaç meşru genel erişim aldığı yazılır. Sayılar kurgudur.
- BG21. Bir nesne grubu bir kimlik referansı taşıyabilir: içindeki dosya, bir rolün adını ve onu kullanan yapılandırmayı içerir. Kimlik bilgisinin kendisi modellenmez, yalnız referansın varlığı ve sonucu sayılır.
- BG22. Maruziyet yarıçapı iki bileşenin birleşimidir: kimliksiz okunan kovalar ve açık bir dosyadaki kimlik referansından başlayan yürüyüşün ulaştığı kalemler.
İzin Kümesi ve Açık Kalem
// bulut/depo.mjs — nesne deposu izin kumesi ve erisim grafigi MODELIDIR. Kurgu bolgesel olcum // agi; depolama sinifi, imzali baglanti mekanigi ve saglayici adi bu derste yoktur. // Sutunlar: kova, nesne grubu, kova duzeyi izin, nesne duzeyi izin ('-' = kovadan devralir), // veri turu, kayit sayisi, gunde mesru genel erisim, gruptaki dosyanin tasidigi kimlik referansi. export const GRUP = ` portal-varlik-deposu site-varliklari genel-oku genel-oku varlik 1400 8600 - portal-varlik-deposu yukleme-onizleme genel-oku - abone-kisisel 9260 0 - olcum-deposu gunluk-yukleme ozel genel-oku olcum 41800 40 - olcum-deposu ham-okuma ozel - olcum 512000 0 - fatura-cikti-deposu abone-faturasi ozel imzali fatura 24500 120 - fatura-cikti-deposu toplu-cikti ozel genel-liste fatura 310 0 - ham-arsiv gecmis-okuma ozel - olcum 1240000 0 - ham-arsiv ortak-cekme ozel genel-oku olcum 8700 6 - yedek-deposu gecelik-yedek ozel - yedek 620 0 - yedek-deposu eski-yedek ozel genel-oku yedek 180 0 - sablon-deposu dagitim-sablonu ozel genel-oku yapilandirma 47 9 rol-dagitim rapor-deposu aylik-rapor ozel imzali fatura 36 30 - gunluk-deposu uygulama-gunlugu ozel - gunluk 88000 0 -` .trim().split('\n').map((s) => { const p = s.trim().split(/\s+/); return { kova: p[0], grup: p[1], kovaIzin: p[2], nesneIzin: p[3], tur: p[4], kayit: Number(p[5]), mesru: Number(p[6]), kimlik: p[7] === '-' ? null : p[7] }; }); export const GENEL = ['genel-oku', 'genel-liste']; // Etkin izin: nesne duzeyi bir deger yaziyorsa o gecerlidir, yoksa kova duzeyi devralinir. export const etkin = (g, d = {}) => { const kova = d.kovaKapali ? 'ozel' : g.kovaIzin; const nesne = d.kapali && d.kapali(g) ? 'ozel' : g.nesneIzin; return nesne === '-' ? kova : nesne; }; export const acik = (g, d) => GENEL.includes(etkin(g, d)); // Erisim grafigi (onceki derslerle ayni): acik bir dosyada bulunan kimlik referansindan yuruyus. const ERISIM = { 'hesap-toplayici': 'olcum-deposu olcum-kuyrugu', 'hesap-dogrulayici': 'olcum-deposu olcum-kuyrugu ham-arsiv', 'hesap-portal': 'abone-veritabani portal-varlik-deposu is-emri-kuyrugu', 'hesap-rapor': 'rapor-deposu fatura-cikti-deposu gunluk-deposu', 'rol-fatura': 'fatura-veritabani fatura-cikti-deposu posta-cikisi abone-veritabani', 'rol-arsiv': 'ham-arsiv yedek-deposu', 'rol-yedek': 'yedek-deposu fatura-veritabani abone-veritabani olcum-deposu', 'rol-dagitim': 'dagitim-yapilandirmasi sablon-deposu ornek-yonetimi', 'rol-gunluk': 'gunluk-deposu denetim-gunlugu', 'rol-yonetim': 'ornek-yonetimi anahtar-yonetimi sir-deposu', }; const USTLENME = [['hesap-toplayici', 'rol-arsiv'], ['hesap-dogrulayici', 'rol-arsiv'], ['rol-arsiv', 'rol-yedek'], ['rol-yedek', 'rol-yonetim'], ['hesap-portal', 'rol-fatura'], ['rol-fatura', 'rol-gunluk'], ['hesap-rapor', 'rol-gunluk'], ['rol-dagitim', 'rol-yonetim']]; export function yuru(baslangic) { const g = new Set([baslangic]), kalem = new Set(); let sira = [baslangic]; while (sira.length) { const s = []; for (const k of sira) { for (const r of ERISIM[k].split(' ')) kalem.add(r); for (const [a, b] of USTLENME) if (a === k && !g.has(b)) { g.add(b); s.push(b); } } sira = s; } return kalem; } // Maruziyet yaricabi: kimliksiz okunan kovalar + acik dosyadaki kimlik referansinin yuruyusu. export function yaricap(d) { const y = new Set(GRUP.filter((g) => acik(g, d)).map((g) => g.kova)); for (const g of GRUP.filter((x) => acik(x, d) && x.kimlik)) for (const r of yuru(g.kimlik)) y.add(r); return y; }
// bulut/kosum1.mjs — kac kalem genel erisime acik, hangi veri turu, kac kayit import { GRUP, acik, etkin, yaricap } from './depo.mjs'; const yaz = (g, ...s) => console.log(s.map((v, i) => g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i])).join('')); const A = [-21, -18, -13, -15, 9, 7]; yaz(A, 'kova', 'nesne grubu', 'etkin izin', 'veri turu', 'kayit', 'mesru'); for (const g of GRUP.filter((x) => acik(x))) yaz(A, g.kova, g.grup, etkin(g), g.tur, g.kayit, g.mesru); const kayit = (f) => GRUP.filter(f).reduce((a, g) => a + g.kayit, 0); console.log(`\nacik kalem ${GRUP.filter((g) => acik(g)).length}/${GRUP.length}, ` + `acik kayit ${kayit((g) => acik(g))} / toplam ${kayit(() => true)} ` + `(%${(kayit((g) => acik(g)) / kayit(() => true) * 100).toFixed(1)})`); const tur = [...new Set(GRUP.map((g) => g.tur))]; console.log(`veri turu ${tur.filter((t) => GRUP.some((g) => g.tur === t && acik(g))).length}/` + `${tur.length} acik; kapali kalan tur: ` + tur.filter((t) => GRUP.every((g) => g.tur !== t || !acik(g))).join(', ')); const y = yaricap({}); console.log(`\nkimliksiz okunan kova ${new Set(GRUP.filter((g) => acik(g)).map((g) => g.kova)).size}` + `; acik dosyadaki kimlik referansi ile yaricap ${y.size}`);
kova nesne grubu etkin izin veri turu kayit mesru portal-varlik-deposu site-varliklari genel-oku varlik 1400 8600 portal-varlik-deposu yukleme-onizleme genel-oku abone-kisisel 9260 0 olcum-deposu gunluk-yukleme genel-oku olcum 41800 40 fatura-cikti-deposu toplu-cikti genel-liste fatura 310 0 ham-arsiv ortak-cekme genel-oku olcum 8700 6 yedek-deposu eski-yedek genel-oku yedek 180 0 sablon-deposu dagitim-sablonu genel-oku yapilandirma 47 9 acik kalem 7/13, acik kayit 61697 / toplam 1926853 (%3.2) veri turu 6/7 acik; kapali kalan tur: gunluk kimliksiz okunan kova 6; acik dosyadaki kimlik referansi ile yaricap 10
On üç nesne grubunun yedisi genel erişime açık. Açık kayıt altmış bir bin altı yüz doksan yedidir ve toplamın yalnız yüzde üç virgül ikisidir — hacim ölçüsü küçük görünüyor. Veri türü ölçüsü aynı şeyi söylemiyor: yedi türden altısı açıktır, kapalı kalan tek tür uygulama günlüğüdür.
Dört satır ayrı ayrı okunmalıdır. site-varliklari bilerek açıktır ve günde sekiz bin altı yüz
meşru erişim alır. yukleme-onizleme aynı kovada durur, kova düzeyi iznini devralır ve dokuz bin
iki yüz altmış abone kişisel kaydı taşır; günde sıfır meşru genel erişim alır. İki grup arasında
tek fark, ikincisinin kendi iznini yazmamış olmasıdır.
gunluk-yukleme ile ortak-cekme ise ters durumdadır: kovaları özeldir, açıklık nesne düzeyinde
tek tek yazılmıştır ve ikisinin de meşru bir gerekçesi vardır. eski-yedek ve toplu-cikti de
nesne düzeyinde açıktır ama hiçbir meşru erişim almaz — yani bir zamanlar bir gerekçesi vardı ve
gerekçe düştüğünde izin düşmedi.
Son satır dersin ikinci ölçüsünü veriyor. Kimliksiz bir istek altı kovaya ulaşıyor. sablon-deposu
içindeki dağıtım şablonu bir kimlik referansı taşıyor ve o referanstan başlayan yürüyüş yarıçabı
ona çıkarıyor. Dört kalem — dağıtım yapılandırması, örnek yönetimi, anahtar yönetimi ve sır deposu
— hiçbir depolama izniyle açılmamıştır; kırk yedi kayıtlık bir yapılandırma dosyasından gelirler.
Beş Düzeltme
// bulut/kosum2.mjs — bes duzeltme: acik kalem, acik kayit, yaricap ve durdurulan mesru erisim import { GRUP, acik, yaricap } from './depo.mjs'; const DUZELTME = [ ['denetim yok', {}], ['kova duzeyinde genel erisim kapanir', { kovaKapali: true }], ['mesru genel erisimi 0 olan kalem kapanir', { kapali: (g) => g.mesru === 0 }], ['yapilandirma turundeki acik kalem kapanir', { kapali: (g) => g.tur === 'yapilandirma' }], ['tum genel erisim kapanir', { kovaKapali: true, kapali: () => true }], ]; const yaz = (g, ...s) => console.log(s.map((v, i) => g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i])).join('')); const A = [-43, 7, 9, 9, 11]; yaz(A, 'duzeltme', 'acik', 'acik', 'yaricap', 'duran is'); yaz(A, '', 'kalem', 'kayit', '', 'gunde'); for (const [ad, d] of DUZELTME) { const a = GRUP.filter((g) => acik(g, d)); yaz(A, ad, a.length, a.reduce((x, g) => x + g.kayit, 0), yaricap(d).size, GRUP.filter((g) => acik(g) && !acik(g, d)).reduce((x, g) => x + g.mesru, 0)); } console.log('\nyaricabin iki bileseni (kimliksiz okunan kova / referanstan eklenen kalem):'); for (const [ad, d] of DUZELTME) { const kova = new Set(GRUP.filter((g) => acik(g, d)).map((g) => g.kova)).size; console.log(` ${ad.padEnd(43)}${String(kova).padStart(2)} / ${yaricap(d).size - kova}`); } const cikan = [...yaricap({})].filter((r) => !yaricap(DUZELTME[3][1]).has(r)).sort(); console.log(`\nyapilandirma turu kapatilinca yaricaptan cikan ${cikan.length} kalem:`); console.log(' ' + cikan.join(', '));
duzeltme acik acik yaricap duran is
kalem kayit gunde
denetim yok 7 61697 10 0
kova duzeyinde genel erisim kapanir 6 52437 10 0
mesru genel erisimi 0 olan kalem kapanir 4 51947 8 0
yapilandirma turundeki acik kalem kapanir 6 61650 5 9
tum genel erisim kapanir 0 0 0 8655
yaricabin iki bileseni (kimliksiz okunan kova / referanstan eklenen kalem):
denetim yok 6 / 4
kova duzeyinde genel erisim kapanir 6 / 4
mesru genel erisimi 0 olan kalem kapanir 4 / 4
yapilandirma turundeki acik kalem kapanir 5 / 0
tum genel erisim kapanir 0 / 0
yapilandirma turu kapatilinca yaricaptan cikan 5 kalem:
anahtar-yonetimi, dagitim-yapilandirmasi, ornek-yonetimi, sablon-deposu, sir-deposu
İkinci satır bu dersin karar taşıyan bulgusudur. Kova düzeyinde genel erişimi kapatmak dokuz bin iki yüz altmış kişisel kaydı kapatır — açık kaydın yüzde on beşi — ve günde tek bir meşru işi durdurmaz. Buna karşılık yayılma yarıçabı onda kalır. Kapatılan tek kalem, kova düzeyi iznini devralan gruptur; nesne düzeyinde açıkça yazılmış beş izin yerinde durur ve kimlik referansını taşıyan grup onlardan biridir.
Dördüncü satır tersini gösteriyor. Yapılandırma türündeki tek açık kalemi kapatmak kırk yedi kayıt kapatır — açık kaydın binde birinden azı — ve yarıçabı ondan beşe indirir. Bedeli günde dokuz meşru erişimdir. Kova düzeyi düzeltmesi bu düzeltmenin yüz doksan altı katı kayıt kapatır ve yarıçabı sıfır kalem düşürür.
Alt blok nedenini ayırıyor. Yarıçap iki bileşenden oluşur: kimliksiz okunan kova sayısı ve kimlik referansından eklenen kalem sayısı. İlk üç düzeltme ikinci bileşene hiç dokunmaz — dört kalem her üçünde de yerinde durur. Dördüncü düzeltme ikinci bileşeni sıfırlar ve birinci bileşeni yalnız bir azaltır. Kayıt hacmini düşüren düzeltme ile yarıçabı düşüren düzeltme aynı düzeltme değildir.
Açık Grupların Tek Tek Payı
Yedi açık grup toplu bir sayı verir; hangisinin ne taşıdığı ayrı ölçülür.
// bulut/kosum3.mjs — acik gruplar tek tek: her biri tek basina kac kalemlik yaricap tasiyor import { GRUP, acik, yaricap, yuru } from './depo.mjs'; const tek = (g) => { // yalniz bu grup acik olsaydi yaricap const y = new Set([g.kova]); if (g.kimlik) for (const r of yuru(g.kimlik)) y.add(r); return y.size; }; const yaz = (g, ...s) => console.log(s.map((v, i) => g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i])).join('')); const A = [-21, -15, 9, 10, 8, 15]; yaz(A, 'tek basina acik grup', 'veri turu', 'kayit', 'yaricap', 'mesru', 'kayit / kalem'); const acikGrup = GRUP.filter((g) => acik(g)); for (const g of acikGrup) yaz(A, g.grup, g.tur, g.kayit, tek(g), g.mesru, Math.round(g.kayit / tek(g))); const toplam = acikGrup.reduce((a, g) => a + tek(g), 0); console.log(`\ntek tek yaricaplarin toplami ${toplam}, birlikte olculen yaricap ` + `${yaricap({}).size}: ${toplam - yaricap({}).size} kalem iki gruptan birden geliyor`);
tek basina acik grup veri turu kayit yaricap mesru kayit / kalem site-varliklari varlik 1400 1 8600 1400 yukleme-onizleme abone-kisisel 9260 1 0 9260 gunluk-yukleme olcum 41800 1 40 41800 toplu-cikti fatura 310 1 0 310 ortak-cekme olcum 8700 1 6 8700 eski-yedek yedek 180 1 0 180 dagitim-sablonu yapilandirma 47 5 9 9 tek tek yaricaplarin toplami 11, birlikte olculen yaricap 10: 1 kalem iki gruptan birden geliyor
Altı grubun yarıçabı birdir: açık olan kova okunur ve orada biter. Yedincisi beştir. Son sütun bunu
tek bir orana çeviriyor — kalem başına düşen kayıt sayısı. gunluk-yukleme kalem başına kırk bir
bin sekiz yüz kayıt taşır; dagitim-sablonu dokuz. İki bin kat fark, iki grubun aynı listede
neden farklı işlem gördüğünü açıklıyor: biri okunacak veri, öteki açılacak kapıdır.
Son satır ölçünün toplanabilirliğini sınıyor. Tek tek yarıçapların toplamı on birdir, birlikte ölçülen yarıçap ondur. Fark bir kalemdir: iki açık grup aynı kovada durduğu için kova iki kez sayılmıştır. Yayılma yarıçapı bir küme büyüklüğüdür ve grup grup toplanamaz.
İki Ölçünün Ayrılması
Maruziyeti tek bir sayıyla vermek mümkün değildir, çünkü iki ayrı zarar biçimi vardır. Kişisel kayıtların okunması doğrudan bir zarardır ve büyüklüğü kayıt sayısıyla ölçülür: dokuz bin iki yüz altmış abone kaydı, hiçbir yürüyüş gerektirmeden okunur. Yapılandırma dosyasının okunması ise kendi başına küçüktür — kırk yedi kayıt — ama başka beş kaleme açılan bir kapıdır.
İki ölçü farklı önceliklendirme üretir. Kayıt hacmine göre sıralandığında ilk düzeltme
yukleme-onizlemedir; yarıçapa göre sıralandığında ilk düzeltme dagitim-sablonudur. Doğru sıra
ikisinin de bedelsize yakın olmasıdır: birincisi günde sıfır, ikincisi günde dokuz meşru erişim
durdurur. Üçüncü satırdaki düzeltme — meşru erişimi hiç olmayan kalemleri kapatmak — dört açık
kaleme iner ve bedeli sıfırdır, ama yapılandırma kalemini kapsamaz çünkü o kalemin günde dokuz
meşru erişimi vardır.
Son satır sınırı çiziyor. Tüm genel erişimi kapatmak yarıçabı sıfırlar; bedeli günde sekiz bin altı yüz elli beş erişimdir ve bunun sekiz bin altı yüzü abone portalının varlıklarıdır. Bu, bir depolama kararı değil, portalın çalışma biçimine ilişkin bir karardır — ve o kalemin açık olması yarıçapa hiçbir katkı yapmaz, çünkü içinde kimlik referansı yoktur.
Özet
- 13 nesne grubunun 7’si genel erişime açıktır; açık kayıt 61.697, toplamın %3,2’sidir. Veri türünde ölçü başkadır: 7 türden 6’sı açıktır, kapalı kalan tek tür uygulama günlüğüdür.
- Etkin izin nesne düzeyinden gelir: aynı kovada duran iki gruptan biri kendi iznini yazmadığı için 9.260 abone kişisel kaydı, günde 0 meşru erişim alarak açık durur.
- Maruziyet yarıçapı iki bileşenlidir: kimliksiz okunan 6 kova ve açık bir yapılandırma dosyasındaki kimlik referansından eklenen 4 kalem — toplam 10.
- Kova düzeyinde genel erişimi kapatmak 9.260 kaydı kapatır, günde 0 iş durdurur ve yarıçabı 10’da bırakır. Kayıt hacmini düşüren düzeltme yarıçabı düşürmeyebilir.
- 47 kayıtlık yapılandırma kalemini kapatmak yarıçabı 10’dan 5’e indirir ve günde 9 meşru erişimi durdurur; kova düzeyi düzeltmesinin 196 katı az kayıt kapatır, yarıçabı 5 kalem düşürür.
- Tüm genel erişimi kapatmak yarıçabı sıfırlar; bedeli günde 8.655 erişimdir ve 8.600’ü yarıçapa hiç katkı yapmayan tek bir kalemden gelir.
Sonraki Adım
Bu derste açık bir dosyanın içeriği okunabilir kabul edildi. Kayıtlar diskte şifreliydi, ama okuyabilen özne için bu bir engel olmadı — çünkü çözme, okuma isteğinin bir parçası olarak sağlayıcı tarafında yapıldı. Sorulmayan soru şudur: çözme anahtarı kimde duruyorsa yarıçap değişir mi? Sonraki ders anahtar sahipliğini üç kipte koşturuyor ve tek bir şeyi ölçüyor: sızan kimliğin okuyabildiği kalem sayısı, anahtar sağlayıcıda iken ve müşteride iken kaç.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.