Ders 09 / 12
Konteyner ve Hipervizör Güvenliği
Kaçış yarıçapının çok kiracılı ortamda ölçülmesi: 18 iş yükü, üç kiracı ve altı konak üzerinde paylaşık yerleşimde bir konteyner kaçışı en kötü durumda 18 kaleme ulaşıyor ve sekiz iş yükünün yedisinde başka bir kiracıya taşıyor. Kiracıya göre ayırma çapraz kaçışı sıfırlarken kendi en kötü yarıçapını 21'e çıkarıyor, kimliğe göre ayırma en kötüyü 18'de bırakıp ortalamayı 12,5'ten 8,5'e indiriyor ve konak sayısını 6'dan 13'e çıkarıyor. Yalıtımı güçlendirmek geçmek için gereken kalemi 1'den 3'e çıkarıyor ama yarıçapı hiç indirmiyor.
İçindekiler
Buraya kadar her yanlış kalem kiracının kendi hesabının içindeydi. Bir kalem bu tanıma uymuyor: iş yükünün üzerinde koştuğu bölmenin ya da konuk sistemin sınırı. O sınırı kiracı yazmaz, sağlayıcı kurar; ve düştüğünde ulaşılan kalem kümesi kiracının hesabıyla sınırlı kalmaz, çünkü aynı fiziksel konakta başka kiracıların iş yükleri de koşuyor olabilir.
Konuk ile konak arasındaki paylaşılan kalemler, sınırı geçmek için aynı anda yanlış olması gereken kalem sayısı ve konteyner ile konuk sistemin bu ölçüde ayrışması Bilgi Teknolojileri ve Sistem Temelleri kursunda ölçüldü. Burada tekrarlanmaz; girdi olarak alınır. Bu dersin sorusu tektir: sınır düştüğünde kaç kaleme ulaşılıyor ve bu sayı tek kiracılı bir konakta ile paylaşılan bir konakta nasıl değişiyor. Kaçış bir modeldir: hiçbir istismar adımı, çağrı dizisi ya da kod yazılmaz, yalnızca sınırın düştüğü varsayılır ve sonrası sayılır. Bir bölme ya da konuk sınırını gerçek bir sistemde sınamak, yazılı yetki ve tanımlı kapsam olmadan yapıldığında hem yasadışı hem de meslek dışıdır.
BT13. Model üç kiracı, 18 iş yükü ve sekiz çekirdeklik konaklardan oluşur; her iş yükü bir kiracıya, bir kimliğe ve bir çekirdek talebine bağlıdır (kurgu). BT14. Yerleştirme ilk uygun konaktır; ayırma ölçütü yok, kiracıya göre ya da kimliğe göre olur. BT15. Kaçış modeli şudur: bir iş yükünde sınır düşer ve aynı konaktaki tüm iş yüklerine ulaşılır. Konaklar arası yayılma modele dahil değildir. BT16. Ulaşılan kendi iş yüklerinin kimlikleri erişim grafiğine girdi olur; yarıçap o kimliklerden erişilen kalem sayısıdır. BT17. Başka kiracıların grafiği kiracıya kapalıdır; o taraf yalnız ulaşılan iş yükü ve kiracı sayısı olarak sayılır. BT18. Yalıtım türünün paylaşılan kalem ve gereken kalem sayıları önceki kurstan alınmıştır; konuk sistemin iş yükü başına bir çekirdeklik ek yükü modelde yazılıdır.
Kaçışın Ulaştığı Komşu
// yerlesim.mjs — konteyner kacisinin yaricapi: ayni konaktaki is yukleri ve onlarin kimlikleri. // MODELDIR. Kacis bir MODEL adimidir; hicbir istismar adimi, cagri dizisi ya da kod yazilmaz. const bol = (s) => s.trim().split("\n").map((l) => l.trim().split("|")); // Is yuku: ad|kiraci|kimlik|cekirdek talebi. Uc kiraci, 18 is yuku (kurgu). export const IS = bol(` portal-1|olcum|portal-ornek-kimligi|2 b-portal|kiraci-b|b-kimlik-1|3 c-kapi|kiraci-c|c-kimlik-1|3 toplama-1|olcum|toplama-is-yuku-kimligi|3 b-akis|kiraci-b|b-kimlik-2|3 c-hesap|kiraci-c|c-kimlik-2|3 portal-2|olcum|portal-ornek-kimligi|2 b-toplu|kiraci-b|b-kimlik-3|4 toplama-2|olcum|toplama-is-yuku-kimligi|3 c-rapor|kiraci-c|c-kimlik-3|2 fatura-toplu|olcum|fatura-toplu-is-rolu|4 b-arsiv|kiraci-b|b-kimlik-3|2 yedekleme|olcum|yedekleme-rolu|2 b-pano|kiraci-b|b-kimlik-4|1 c-yedek|kiraci-c|c-kimlik-3|1 rapor|olcum|okuma-rolu|1 b-sinama|kiraci-b|b-kimlik-4|1 pano|olcum|izleme-rolu|1` .replace(/\s{2,}/g, "\n")).map(([ad, kiraci, kimlik, c]) => ({ ad, kiraci, kimlik, c: +c })); // Erisim grafigi (onceki derslerdeki grafik, sure sutunu olmadan): kaynak|hedef const KENAR = bol(` portal-hizmet-hesabi|portal-ornegi portal-hizmet-hesabi|okuma-rolu portal-ornegi|portal-ornek-kimligi portal-ornek-kimligi|abone-veritabani portal-ornek-kimligi|sir-deposu sir-deposu|toplama-is-yuku-kimligi toplama-is-yuku-kimligi|sayac-ham-kova toplama-is-yuku-kimligi|olcum-kuyrugu toplama-is-yuku-kimligi|izleme-rolu izleme-rolu|olcum-panosu portal-ornek-kimligi|fatura-toplu-is-rolu fatura-toplu-is-rolu|fatura-arsiv-kovasi fatura-toplu-is-rolu|anahtar-yonetimi anahtar-yonetimi|musteri-anahtari fatura-toplu-is-rolu|yedekleme-rolu yedekleme-rolu|yedek-kovasi yedekleme-rolu|dagitim-rolu dagitim-rolu|sablon-deposu dagitim-rolu|yapilandirma-kovasi dagitim-rolu|is-yuku-ornegi okuma-rolu|rapor-kovasi okuma-rolu|gunluk-kovasi okuma-rolu|yapilandirma-kovasi`.replace(/\s{2,}/g, "\n")); // Bir kimlikten erisilen kalem kumesi (enine arama). export function erisim(baslangic) { const g = new Set(baslangic), kuyruk = [...baslangic]; while (kuyruk.length) { const n = kuyruk.shift(); for (const [k, h] of KENAR) if (k === n && !g.has(h)) { g.add(h); kuyruk.push(h); } } return g; } // Yerlestirme: ilk uygun konak. Ayirma olcutu "yok", "kiraci" ya da "kimlik" olabilir. export function yerlestir(ayirma, ek = 0, KAP = 8) { const konak = []; for (const is of IS.map((i) => ({ ...i, c: i.c + ek }))) { const etiket = ayirma === "yok" ? null : ayirma === "kiraci" ? is.kiraci : is.kimlik; let k = konak.find((x) => x.kalan >= is.c && (etiket === null || x.etiket === etiket)); if (!k) { k = { ad: `konak-${konak.length + 1}`, etiket, kalan: KAP, is: [] }; konak.push(k); } k.kalan -= is.c; k.is.push(is); } return konak; } // Kacis modeli: bir is yukunde sinir dusuyor, ayni konaktaki tum is yuklerine ulasiliyor. export function kacis(konak, baslangicIs) { const k = konak.find((x) => x.is.some((i) => i.ad === baslangicIs)); const ulasilan = k.is; const kendi = ulasilan.filter((i) => i.kiraci === "olcum"); const baska = ulasilan.filter((i) => i.kiraci !== "olcum"); const kalem = erisim(kendi.map((i) => i.kimlik)); return { konak: k.ad, is: ulasilan.length, kendiIs: kendi.length, baskaIs: baska.length, baskaKiraci: new Set(baska.map((i) => i.kiraci)).size, kimlik: new Set(ulasilan.map((i) => i.kimlik)).size, kalem: kalem.size }; } const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0])) .join(""); if (import.meta.url === `file://${process.argv[1]}`) { const yz = gen([22, 8, 10, 14, 16, 14, 10]); console.log(`${IS.length} is yuku, ${new Set(IS.map((i) => i.kiraci)).size} kiraci, ` + `konak kapasitesi 8 cekirdek; toplam talep ${IS.reduce((t, i) => t + i.c, 0)} cekirdek`); console.log("\n" + yz(["ayirma olcutu", "konak", "doluluk", "kacis konagi", "ulasilan is", "baska kiraci", "yaricap"])); for (const [ad, ayirma] of [["yok (paylasik)", "yok"], ["kiraciya gore", "kiraci"], ["kimlige gore", "kimlik"]]) { const k = yerlestir(ayirma); const r = kacis(k, "portal-1"); const doluluk = Math.round(100 * IS.reduce((t, i) => t + i.c, 0) / (k.length * 8)); console.log(yz([ad, k.length, `%${doluluk}`, r.konak, `${r.is} (${r.kendiIs} kendi)`, r.baskaKiraci, `${r.kalem}/28`])); } // Her is yukunden kacis: en kotu ve ortalama yaricap, paylasik ve kiraciya gore ayrilmis duzende. console.log(); const yo = gen([22, 12, 12, 16, 18]); console.log(yo(["ayirma olcutu", "en kotu", "ortalama", "baska kiraciya", "kendi kalemine"])); for (const [ad, ayirma] of [["yok (paylasik)", "yok"], ["kiraciya gore", "kiraci"], ["kimlige gore", "kimlik"]]) { const k = yerlestir(ayirma); const r = IS.filter((i) => i.kiraci === "olcum").map((i) => kacis(k, i.ad)); const ort = (r.reduce((t, x) => t + x.kalem, 0) / r.length).toFixed(1); console.log(yo([ad, `${Math.max(...r.map((x) => x.kalem))}/28`, ort, `${r.filter((x) => x.baskaIs > 0).length}/${r.length} kacis`, `${(r.reduce((t, x) => t + x.baskaIs, 0) / r.length).toFixed(1)} is yuku`])); } }
18 is yuku, 3 kiraci, konak kapasitesi 8 cekirdek; toplam talep 41 cekirdek ayirma olcutu konak doluluk kacis konagi ulasilan is baska kiraci yaricap yok (paylasik) 6 %85 konak-1 3 (1 kendi) 2 18/28 kiraciya gore 7 %73 konak-1 4 (4 kendi) 0 21/28 kimlige gore 13 %39 konak-1 2 (2 kendi) 0 18/28 ayirma olcutu en kotu ortalama baska kiraciya kendi kalemine yok (paylasik) 18/28 12.5 7/8 kacis 1.3 is yuku kiraciya gore 21/28 16.9 0/8 kacis 0.0 is yuku kimlige gore 18/28 8.5 0/8 kacis 0.0 is yuku
Üst tablo tek bir kaçışa bakıyor. Paylaşık yerleşimde portal iş yükünün konağında üç iş yükü var ve bunların yalnız biri kendi kiracımızın; kaçış iki başka kiracıya taşıyor. Kendi kalemlerimizden 18’ine ulaşılıyor. Kiracıya göre ayrılmış yerleşimde aynı konakta dört iş yükünün dördü de bizim ve yarıçap 21’e çıkıyor. Çapraz kaçış sıfır, kendi yarıçapımız daha büyük.
Kendi Kalemi ve Başka Kiracı
Alt tablo sekiz iş yükünün her birinden kaçışı ayrı ayrı koşturuyor ve iki sütunun ters yönde hareket ettiğini gösteriyor. Paylaşık yerleşimde kendi en kötü yarıçapımız 18, ortalama 12,5; ama sekiz kaçışın yedisi başka bir kiracıya taşıyor ve kaçış başına ortalama 1,3 yabancı iş yüküne ulaşılıyor. Kiracıya göre ayırma o yedi kaçışı sıfıra indiriyor — hiçbir kaçış kiracı sınırını geçmiyor — ama kendi en kötü yarıçapımızı 18’den 21’e, ortalamayı 12,5’ten 16,9’a çıkarıyor.
Neden yükseldiği açıktır ve söylenmelidir: kiracıya göre ayırma, kendi iş yüklerimizi aynı konaklarda yoğunlaştırır. Yabancı komşu kaldırıldığında yerine kendi komşumuz gelir ve kendi komşumuzun kimliği erişim grafiğinde bir düğümdür. Kiracı ayrımı, ölçüyü düşürdüğü için değil, başka birinin ölçüsünü düşürdüğü için yapılır.
Kimliğe göre ayırma da en kötü durumu kurtarmıyor: orada da 18 yazıyor. Nedeni tek bir kimliğin grafikte bir kavşak olmasıdır — portalın örneğe bağlı kimliği tek başına 18 kaleme ulaşır, yanında komşu olsun ya da olmasın. Kimliğe göre ayırmanın indirdiği sayı ortalamadır: 12,5’ten 8,5’e. Yerleşimle oynamak, kavşak kimliğin kendi yarıçapını hiçbir zaman kısaltmaz.
Komşunun Görünmezliği
Tablodaki üç sütunun hepsi ölçülebilir görünüyor, ama kiracı tarafından ölçülebilen yalnız biri var. Kiracı hangi konakta durduğunu ve o konakta başka kimin bulunduğunu sayamaz: yerleşim ölçütü sağlayıcıya verilen bir istektir, karşılığı ise ne bir kayıtta ne bir envanterde görünür. “Başka kiracıya” sütunu bu modelde hesaplanabiliyor çünkü yerleşimi biz kurduk; gerçek bir kiracı o sayıyı hiçbir zaman doğrudan göremez.
Bunun tespit tarafındaki karşılığı birinci dersin kayıtsız adım sınıfının bir başka biçimidir. Kaçış gerçekleştiğinde kiracının kaydında görünebilecek tek şey kendi kimliklerinin kullanımıdır: komşu iş yüküne geçiş, konak üzerindeki hareket ve yabancı kiracıya taşma kiracının hiçbir kaydına düşmez. Bu yüzden çapraz kaçışın ölçüsü kiracı için bir tespit sayısı değil, bir sözleşme sorusudur: hangi ayırma ölçütünün uygulandığı, bunun nasıl doğrulandığı ve komşu kümesinde bir olay olduğunda kiracının bilgilendirilip bilgilendirilmeyeceği önceden yazılmalıdır. Yazılmamışsa tablodaki son sütun kiracı için boştur.
Yalıtım Gücü mü, Yerleşim mi
// yalitim.mjs — yalitim gucu ile yerlesim ayrimi ayri ayri olculur. MODELDIR. import { IS, yerlestir, kacis } from "./yerlesim.mjs"; // Yalitim turu: paylasilan kalem sayisi ve siniri gecmek icin AYNI ANDA yanlis olmasi gereken // kalem sayisi, Bilgi Teknolojileri ve Sistem Temelleri kursunda olculmustur; burada GIRDIDIR. // ek: is yuku basina ek cekirdek talebi (konuk sistemin kendi yuku). const YALITIM = { "konteyner (ayni cekirdek)": { paylasilan: 12, gereken: 1, ek: 0 }, "konuk (hipervizor)": { paylasilan: 5, gereken: 3, ek: 1 }, }; const AYIRMA = [["yok", "yok"], ["kiraci", "kiraci"], ["kimlik", "kimlik"]]; const KENDI = IS.filter((i) => i.kiraci === "olcum"); const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0])) .join(""); const yz = gen([25, 10, 10, 8, 10, 12, 16]); console.log(yz(["yalitim", "ayirma", "gereken", "konak", "doluluk", "en kotu", "baska kiraciya"])); const sonuc = {}; for (const [ad, y] of Object.entries(YALITIM)) for (const [etiket, ayirma] of AYIRMA) { const konak = yerlestir(ayirma, y.ek); const talep = IS.reduce((t, i) => t + i.c + y.ek, 0); const r = KENDI.map((i) => kacis(konak, i.ad)); const capraz = r.filter((x) => x.baskaIs > 0).length; sonuc[`${ad}|${ayirma}`] = { ust: Math.max(...r.map((x) => x.kalem)), capraz, konak: konak.length, ort: (r.reduce((s, x) => s + x.kalem, 0) / r.length).toFixed(1) }; console.log(yz([ad, etiket, y.gereken, konak.length, `%${Math.round(100 * talep / (konak.length * 8))}`, `${Math.max(...r.map((x) => x.kalem))}/28`, `${capraz}/${KENDI.length} kacis`])); } const b = sonuc["konteyner (ayni cekirdek)|yok"], k = sonuc["konuk (hipervizor)|yok"]; const ba = sonuc["konteyner (ayni cekirdek)|kiraci"], ka = sonuc["konuk (hipervizor)|kimlik"]; console.log(`\nyalitimi guclendirmek gereken kalemi 1 -> 3 yapiyor; ayni yerlesim uzerinde iki ` + `yalitim turu ayni yaricapi verir (${b.ust}/28). Yalitim turu gecilme kosulunu degistirir, ` + `gecildiginde ulasilan kalemi degil`); console.log(`konuk sisteminin is yuku basina 1 cekirdeklik ek yuku konak sayisini ` + `${b.konak} -> ${k.konak} cikariyor; en kotu yaricap ${k.ust}/28 ile ayni kaliyor`); console.log(`ayirmayi kiraciya gore yapmak capraz kacisi ${b.capraz}/${KENDI.length} -> ` + `${ba.capraz}/${KENDI.length} indiriyor ama kendi yaricapini buyutuyor: en kotu ` + `${b.ust} -> ${ba.ust}, ortalama ${b.ort} -> ${ba.ort}`); console.log(`kimlige gore ayirma en kotu yaricapi indirmiyor (${ka.ust}/28) cunku en genis ` + `kimlik tek basina o kadar kaleme ulasiyor; indirdigi sey ortalamadir: ${b.ort} -> ${ka.ort}. ` + `Bedeli ${b.konak} -> ${ka.konak} konaktir`);
yalitim ayirma gereken konak doluluk en kotu baska kiraciya konteyner (ayni cekirdek) yok 1 6 %85 18/28 7/8 kacis konteyner (ayni cekirdek) kiraci 1 7 %73 21/28 0/8 kacis konteyner (ayni cekirdek) kimlik 1 13 %39 18/28 0/8 kacis konuk (hipervizor) yok 3 8 %92 18/28 8/8 kacis konuk (hipervizor) kiraci 3 9 %82 18/28 0/8 kacis konuk (hipervizor) kimlik 3 13 %57 18/28 0/8 kacis yalitimi guclendirmek gereken kalemi 1 -> 3 yapiyor; ayni yerlesim uzerinde iki yalitim turu ayni yaricapi verir (18/28). Yalitim turu gecilme kosulunu degistirir, gecildiginde ulasilan kalemi degil konuk sisteminin is yuku basina 1 cekirdeklik ek yuku konak sayisini 6 -> 8 cikariyor; en kotu yaricap 18/28 ile ayni kaliyor ayirmayi kiraciya gore yapmak capraz kacisi 7/8 -> 0/8 indiriyor ama kendi yaricapini buyutuyor: en kotu 18 -> 21, ortalama 12.5 -> 16.9 kimlige gore ayirma en kotu yaricapi indirmiyor (18/28) cunku en genis kimlik tek basina o kadar kaleme ulasiyor; indirdigi sey ortalamadir: 12.5 -> 8.5. Bedeli 6 -> 13 konaktir
İki Kaldıraç
Tablo iki kaldıracı yan yana koyuyor ve bunların aynı sütuna yazılmadığını gösteriyor. Yalıtım gücü “gereken” sütununu değiştirir: aynı çekirdeği paylaşan bir bölmede sınırı geçmek için tek bir kalemin yanlış olması yetiyor, konuk sistem sınırında üç kalemin aynı anda yanlış olması gerekiyor. Bu, sınırın geçilme koşuludur. Yerleşim ayrımı ise “en kötü” ve “başka kiracıya” sütunlarını değiştirir; sınır geçildikten sonra ne bulunacağını belirler.
İkisinin karıştırılmaması gerektiği altı satırda birden görülüyor: “en kötü” sütununda konteyner ve konuk yalıtımı aynı sayıyı veriyor. Konuk sistemine geçmek konak sayısını 6’dan 8’e çıkarıyor, doluluğu %85’ten %92’ye taşıyor ve yarıçapı 18’de bırakıyor. Bu, kursun ikinci “yarıçapı düşürmeyen denetim” örneğidir; ilkinden — kayıttan — farkı, bu kez denetimin gerçekten bir şey yapmasıdır: sınırın geçilme koşulunu bir kalemden üç kaleme çıkarır, ama geçildiğinde ulaşılan kalem sayısına dokunmaz.
Bedel sütunu da okunmalıdır. Kimliğe göre ayırma çapraz kaçışı sıfırlar ve ortalamayı 12,5’ten 8,5’e indirir, ama en kötü durumu 18’de bırakır; karşılığında konak sayısı 6’dan 13’e çıkar ve doluluk %85’ten %39’a düşer. Ortadaki seçenek — kiracıya göre ayırma — çapraz kaçışı yedi kaçıştan sıfıra indirir, bir konak ekler ve kendi en kötü yarıçapımızı üç kalem büyütür. Üç satırın hiçbiri en kötü durumu 18’in altına indirmiyor; onu indirmenin tek yolu bu dersin dışındadır ve kavşak kimliğin kendi yetkisini daraltmaktan geçer.
Özet
- Paylaşık yerleşimde bir konteyner kaçışı kendi kalemlerimizden en kötü durumda 18’ine ulaşıyor; sekiz kaçışın yedisi başka bir kiracıya taşıyor ve kaçış başına ortalama 1,3 yabancı iş yükü ulaşılabilir oluyor.
- Kiracıya göre ayırma çapraz kaçışı yediden sıfıra indirir ama kendi en kötü yarıçapını 18’den 21’e, ortalamayı 12,5’ten 16,9’a çıkarır: yabancı komşu kaldırıldığında yerine kendi komşumuz gelir.
- Kimliğe göre ayırma en kötü durumu 18’de bırakır ve yalnız ortalamayı 12,5’ten 8,5’e indirir; bedeli konak sayısının 6’dan 13’e çıkması ve dolulukta %85’ten %39’a düşüştür.
- Yalıtım gücü sınırın geçilme koşulunu değiştirir: aynı çekirdeği paylaşan bölmede bir kalem yeterken konuk sistem sınırında üç kalemin aynı anda yanlış olması gerekir.
- Yarıçap altı satırın hepsinde 18 ya da 21’dir; ne yalıtım türü ne de konuk sisteminin ek çekirdek yükü onu indirir, çünkü kavşak kimlik tek başına o kadar kaleme ulaşır.
- Kiracı komşu kümesini sayamaz: yerleşim ölçütü sağlayıcıya verilen bir istektir ve kaçışın komşuya taşan kısmı kiracının hiçbir kaydına düşmez, bu yüzden sözleşmede yazılmalıdır.
Sonraki Adım
Bu dersin bütün ölçümü, iş yükünün kaçış anında ayakta olduğunu varsaydı: konakta duruyor, kimliği kullanılabiliyor, komşusu görülebiliyor. Bazı iş yükleri bu varsayımı sağlamaz. Bir işlev çalıştırma ortamında iş yükü saniyeler sürer, işi biter ve ortadan kalkar; geride ne bir konak kaydı ne de incelenecek bir süreç bırakır. Sonraki ders bu iş yüklerinde kaydın toplanabildiği pencereyi ölçer: iş yükü kaç saniye yaşıyor, kaç kalem yaşarken toplanmazsa kayboluyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.