Ders 08 / 12
Yapılandırma Duruş Yönetimi
Yanlış kalemin dağıtımdan önce mi sonra mı kapandığının ölçülmesi: 23 kenarın 13'ü bir yanlış kaleme bağlı, bunların 7'si şablonda, 2'si kabulde, 4'ü ancak koşarken görülüyor. Şablon kapısı yarıçapı 23'ten 8'e indiriyor, kabul kapısı iki kalem daha kapatıp yarıçapı hiç indirmiyor, koşan tarama tek başına 4'e indiriyor. Bir haftalık pencerede günlük tarama ile onaylı düzeltme yarıçapı 39 saat, saatlik tarama 25 saat, otomatik düzeltme 2 saat açık bırakıyor; sürekli taramaya geçmek 12 kat değerlendirme karşılığında 1 saat kazandırıyor.
İçindekiler
Önceki ders bir yön bıraktı: yarıçapı düşüren şey yürüyüş başladıktan sonra bakan bir düzenek değil, yürüyüş başlamadan önce kapatılmış bir kalemdi. Rol zincirini kapatmak kaydı hiç beklemeden yarıçapı 23’ten 18’e indirdi. Bu ders o yönü sonuna kadar ölçer ve tek soruya bağlar: yanlış kalem, kullanılmadan önce mi kapanıyor, kullanıldıktan sonra mı.
Yapılandırma duruş yönetimi (posture management), kaynak kümesini sürekli okuyup istenen durumdan sapan kalemi işaretleyen düzenektir. Uyum kurallarının nasıl yazıldığı, kural başına kaç gerçek uyumsuzluğun yakalandığı ve kaçının yanlış işaret olduğu Bulut Yönetişimi, Güvenlik ve Maliyet kursunda ölçüldü; burada tekrarlanmaz. Burada ölçülen tek şey zamandır: kalemin görülebildiği evre, tespit ile düzeltme arasındaki gecikme ve bu gecikmenin yarıçapı kaç saat açık bıraktığı.
Grafik önceki dersle aynıdır: bölgesel ölçüm ağı, kurgudur, node ile yazılmış bir
modeldir.
BT7. Grafiğin 23 kenarından 13’ü bir yanlış yapılandırma kalemine bağlıdır; kalem kapalıysa o kenar yürünemez. Kalan 10 kenar meşrudur ve kapatılamaz. BT8. Yanlış kalem üç evreden birinde görülür: şablon (dağıtımdan önce, kod olarak altyapı metninde), kabul (dağıtım anında, istenen durum değerlendirilirken), koşan (ancak koşan kaynağa bakan bir taramayla). BT9. Dört koşan kalem bir hafta içinde doğar; doğuş dakikaları modelde yazılıdır (kurgu). BT10. Tarama aralığı ve düzeltme gecikmesi verildiğinde kalem dakikasında kapanır; doğuş anıdır. BT11. Ölçüm penceresi bir haftadır (10.080 dakika) ve yarıçap her dakika ayrı hesaplanır. BT12. Her tarama 13 kalemi değerlendirir; haftalık değerlendirme sayısı kurgu bir kaynak bedelidir.
Yanlış Kalemin Görülebildiği Evre
// durus.mjs — yanlis kalemlerin gorulebilecegi evre ve her evrenin kapattigi adim. MODELDIR. // Grafik onceki dersinkiyle aynidir; burada her kenar bir yanlis yapilandirma kalemine baglidir. const bol = (s) => s.trim().split("\n").map((l) => l.trim().split("|")); // Kenar: kaynak|hedef|sure(dk)|kenari mumkun kilan yanlis kalem ("-" ise mesru kenar) export const KENAR = bol(` portal-hizmet-hesabi|portal-ornegi|3|- portal-hizmet-hesabi|okuma-rolu|4|- portal-ornegi|portal-ornek-kimligi|2|ornek-kimligi-oturumsuz portal-ornek-kimligi|abone-veritabani|6|- portal-ornek-kimligi|sir-deposu|4|portal-kimligine-sir-okuma sir-deposu|toplama-is-yuku-kimligi|3|sirda-uzun-omurlu-kimlik toplama-is-yuku-kimligi|sayac-ham-kova|5|- toplama-is-yuku-kimligi|olcum-kuyrugu|4|- toplama-is-yuku-kimligi|izleme-rolu|4|is-yukune-rol-ustlenme izleme-rolu|olcum-panosu|3|- portal-ornek-kimligi|fatura-toplu-is-rolu|3|portal-kimligine-toplu-is-rolu fatura-toplu-is-rolu|fatura-arsiv-kovasi|6|- fatura-toplu-is-rolu|anahtar-yonetimi|4|anahtar-kullanimi-kosulsuz anahtar-yonetimi|musteri-anahtari|2|anahtar-politikasinda-kosul-yok fatura-toplu-is-rolu|yedekleme-rolu|3|zincirli-rol-ustlenme yedekleme-rolu|yedek-kovasi|7|- yedekleme-rolu|dagitim-rolu|4|yedekleme-rolune-dagitim dagitim-rolu|sablon-deposu|5|sablon-deposu-yazmaya-acik dagitim-rolu|yapilandirma-kovasi|4|- dagitim-rolu|is-yuku-ornegi|9|dagitim-rolu-ornek-baslatabiliyor okuma-rolu|rapor-kovasi|4|- okuma-rolu|gunluk-kovasi|5|gunluk-kovasi-okumaya-acik okuma-rolu|yapilandirma-kovasi|6|yapilandirma-kovasi-genis-okuma`) .map(([k, h, d, y]) => ({ k, h, d: +d, y })); // Yanlis kalemin hangi evrede gorulebildigi. MODEL girdisi. // sablon: dagitimdan once, kod olarak altyapi metninde okunur // kabul: dagitim aninda, istenen durum degerlendirilirken okunur // kosan: ancak kosan kaynaga bakilarak, tarama ile bulunur export const EVRE = Object.fromEntries(bol(` portal-kimligine-sir-okuma|sablon is-yukune-rol-ustlenme|sablon portal-kimligine-toplu-is-rolu|sablon anahtar-politikasinda-kosul-yok|sablon zincirli-rol-ustlenme|sablon yedekleme-rolune-dagitim|sablon dagitim-rolu-ornek-baslatabiliyor|sablon anahtar-kullanimi-kosulsuz|kabul sablon-deposu-yazmaya-acik|kabul ornek-kimligi-oturumsuz|kosan sirda-uzun-omurlu-kimlik|kosan yapilandirma-kovasi-genis-okuma|kosan gunluk-kovasi-okumaya-acik|kosan` .replace(/\s{2,}/g, "\n"))); export const BASLANGIC = "portal-hizmet-hesabi"; export const TOPLAM = 28; // grafikte toplam kalem; besi hicbir yuruyusle ulasilamaz // Acik yanlis kalem kumesi verildiginde yaricap: yalnizca mesru ya da acik kenarlar yurunur. export function yaricap(acik) { const varis = { [BASLANGIC]: 0 }; for (;;) { let en = null; for (const e of KENAR) { if (!(e.k in varis) || e.h in varis) continue; if (e.y !== "-" && !acik.has(e.y)) continue; const t = varis[e.k] + e.d; if (en === null || t < en.t) en = { e, t }; } if (en === null) return { kalem: Object.keys(varis).length, varis }; varis[en.e.h] = en.t; } } const KALEMLER = [...new Set(KENAR.map((e) => e.y).filter((y) => y !== "-"))]; const evreli = (...e) => new Set(KALEMLER.filter((y) => e.includes(EVRE[y]))); 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 say = (e) => KALEMLER.filter((y) => EVRE[y] === e).length; console.log(`${KENAR.length} kenarin ${KALEMLER.length} tanesi bir yanlis kaleme bagli, ` + `${KENAR.length - KALEMLER.length} tanesi mesru`); console.log(`evre dagilimi: sablon ${say("sablon")}, kabul ${say("kabul")}, ` + `kosan ${say("kosan")}`); const yz = gen([34, 14, 12, 10, 20]); console.log("\n" + yz(["kapi", "kapanan kalem", "acik kalem", "yaricap", "kapanma ani"])); const asama = [ ["kapi yok (hepsi acik)", evreli("sablon", "kabul", "kosan"), "-"], ["yalniz kosan taramasi", evreli("sablon", "kabul"), "dagitimdan sonra"], ["sablon kapisi", evreli("kabul", "kosan"), "dagitimdan once"], ["sablon + kabul kapisi", evreli("kosan"), "dagitimdan once"], ["ucu birden", new Set(), "once ve sonra"], ]; for (const [ad, acik, an] of asama) { const r = yaricap(acik); console.log(yz([ad, KALEMLER.length - acik.size, acik.size, `${r.kalem}/${TOPLAM}`, an])); } // Her yanlis kalem tek basina kapatilsaydi yaricap kaca inerdi. const tam = yaricap(new Set(KALEMLER)).kalem; const tekil = KALEMLER.map((y) => { const a = new Set(KALEMLER); a.delete(y); return { y, dus: tam - yaricap(a).kalem, evre: EVRE[y] }; }).sort((a, b) => b.dus - a.dus); const yt = gen([36, 10, 10]); console.log("\n" + yt(["tek basina kapatilan kalem", "evre", "yaricap"])); for (const t of tekil.slice(0, 5)) console.log(yt([t.y, t.evre, `${tam} -> ${tam - t.dus}`])); console.log(`kalan ${tekil.length - 5} kalemin her biri yaricapi bir kalem indiriyor ` + `ya da hic indirmiyor`); }
23 kenarin 13 tanesi bir yanlis kaleme bagli, 10 tanesi mesru evre dagilimi: sablon 7, kabul 2, kosan 4 kapi kapanan kalem acik kalem yaricap kapanma ani kapi yok (hepsi acik) 0 13 23/28 - yalniz kosan taramasi 4 9 4/28 dagitimdan sonra sablon kapisi 7 6 8/28 dagitimdan once sablon + kabul kapisi 9 4 8/28 dagitimdan once ucu birden 13 0 4/28 once ve sonra tek basina kapatilan kalem evre yaricap ornek-kimligi-oturumsuz kosan 23 -> 6 portal-kimligine-toplu-is-rolu sablon 23 -> 14 portal-kimligine-sir-okuma sablon 23 -> 17 sirda-uzun-omurlu-kimlik kosan 23 -> 18 zincirli-rol-ustlenme sablon 23 -> 18 kalan 8 kalemin her biri yaricapi bir kalem indiriyor ya da hic indirmiyor
Üst tablo iki sütunu ayrı okumayı zorunlu kılar: kapanan kalem ile yarıçap aynı yönde hareket etmiyor. Şablon kapısı on üç kalemin yedisini, yani yarısından fazlasını, dağıtımdan önce kapatıyor ve yarıçap 23’ten 8’e iniyor. Kabul kapısı iki kalem daha kapatıyor — dokuza çıkıyor — ve yarıçap 8’de kalıyor. Kapatılan iki kalem, kapalıyken de başka bir kenardan ulaşılan kalemleri koruyordu; anahtar yönetimine giden yol zaten fatura rolü kapandığında kesilmişti. Bu, önceki dersteki kayıt satırının yapılandırma tarafındaki karşılığıdır: kalem saymak yarıçap saymak değildir.
Ters yönde daha keskin bir sayı var. Yalnız koşan taraması dört kalem kapatıyor ve yarıçap 4’e iniyor — üç kapının hepsini birden açmakla aynı sonuç. Nedeni alt tablodadır: örneğe bağlı kimliğin oturum başına doğrulama istemeden verilmesi tek başına yarıçapı 23’ten 6’ya indiren kalemdir ve o kalem koşan sınıftadır. Şablon metni doğru yazılmıştır; eski bir görüntüden başlatılmış örnek eski davranışı taşır ve bunu ancak koşan örneğe bakan bir tarama görebilir.
Kapının Kapattığı ve Kapatamadığı
Alt tablo sıralamayı da veriyor. On üç kalemin dördü yarıçapı gerçekten hareket ettiriyor; kalan sekizi bir kalem indiriyor ya da hiç indirmiyor. Sıralamanın başındaki kalem koşan sınıfta, sonraki üçü şablon sınıfında. Dağıtımdan önce kapatmanın değeri buradadır ve zamanla ölçülür: şablonda kapatılan bir kalem hiç var olmaz, dolayısıyla açık kaldığı süre sıfırdır. Koşan sınıftaki kalem ise doğar, bir süre yaşar ve ancak sonra kapanır. Bir sonraki bölüm o süreyi sayar.
Düzeltme Gecikmesinin Açtığı Pencere
// pencere.mjs — tespit ve duzeltme gecikmesinin yaricapi kac saat acik biraktigi. MODELDIR. import { EVRE, TOPLAM, yaricap } from "./durus.mjs"; const HAFTA = 7 * 24 * 60; // 10080 dakikalik pencere const KOSAN = Object.keys(EVRE).filter((y) => EVRE[y] === "kosan"); // Yanlis kalemin dogdugu dakika (kurgu): sapmanin ortaya ciktigi an. const DOGUS = { "yapilandirma-kovasi-genis-okuma": 900, "ornek-kimligi-oturumsuz": 2600, "sirda-uzun-omurlu-kimlik": 4300, "gunluk-kovasi-okumaya-acik": 7100 }; const SABIT = Object.keys(EVRE).filter((y) => EVRE[y] !== "kosan"); // Tarama araligi S ve duzeltme gecikmesi R ile bir kalem ne zaman kapanir. const kapanis = (dogus, S, R) => S === Infinity ? Infinity : Math.ceil(dogus / S) * S + R; function kos({ S, R, kapi }) { const kapanma = Object.fromEntries(KOSAN.map((y) => [y, kapanis(DOGUS[y], S, R)])); const bellek = new Map(); let toplam = 0, ust = 0, acikDk = 0, agirDk = 0; const taban = yaricap(kapi ? new Set() : new Set(SABIT)).kalem; for (let t = 0; t < HAFTA; t++) { const acik = new Set(kapi ? [] : SABIT); for (const y of KOSAN) if (t >= DOGUS[y] && t < kapanma[y]) acik.add(y); const anahtar = [...acik].sort().join(","); if (!bellek.has(anahtar)) bellek.set(anahtar, yaricap(acik).kalem); const r = bellek.get(anahtar); toplam += r; ust = Math.max(ust, r); if (r > taban) acikDk++; if (r >= 10) agirDk++; } return { ort: (toplam / HAFTA).toFixed(1), ust, taban, acik: (acikDk / 60).toFixed(0), agir: (agirDk / 60).toFixed(0), degerlendirme: S === Infinity ? 0 : Math.round((HAFTA / S) * Object.keys(EVRE).length) }; } const AYAR = [ ["tarama yok, kapi yok", { S: Infinity, R: 0, kapi: false }], ["gunluk tarama + onayli duzeltme", { S: 1440, R: 480, kapi: false }], ["saatlik tarama + onayli duzeltme", { S: 60, R: 480, kapi: false }], ["saatlik tarama + otomatik duzeltme", { S: 60, R: 10, kapi: false }], ["+ sablon ve kabul kapisi", { S: 60, R: 10, kapi: true }], ["surekli tarama + otomatik duzeltme", { S: 5, R: 10, kapi: true }], ]; const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0])) .join(""); const yz = gen([36, 9, 9, 9, 12, 13, 15]); console.log(yz(["ayar", "taban", "ortalama", "en ust", "acik saat", "yaricap>=10", "degerlendirme"])); for (const [ad, a] of AYAR) { const r = kos(a); console.log(yz([ad, `${r.taban}/${TOPLAM}`, r.ort, `${r.ust}/${TOPLAM}`, `${r.acik} sa`, `${r.agir} sa`, r.degerlendirme])); } const onayli = kos({ S: 60, R: 480, kapi: false }), oto = kos({ S: 60, R: 10, kapi: false }); const gunluk = kos({ S: 1440, R: 480, kapi: false }); console.log(`\ntarama araligini 1440 -> 60 dk yapmak acik sureyi ${gunluk.acik} -> ` + `${onayli.acik} saate indiriyor; duzeltme gecikmesini 480 -> 10 dk yapmak ` + `${onayli.acik} -> ${oto.acik} saate indiriyor`); const kapili = kos({ S: 60, R: 10, kapi: true }); console.log(`kapi eklendiginde taban ${oto.taban} -> ${kapili.taban} ve en ust ` + `${oto.ust} -> ${kapili.ust} oluyor; acik saat ${oto.acik} -> ${kapili.acik}`); const surekli = kos({ S: 5, R: 10, kapi: true }); console.log(`tarama araligini 60 -> 5 dk yapmak acik saati ${kapili.acik} -> ${surekli.acik} ` + `indiriyor ve haftalik degerlendirmeyi ${kapili.degerlendirme} -> ` + `${surekli.degerlendirme} yapiyor: ${(surekli.degerlendirme / kapili.degerlendirme).toFixed(0)} ` + `kat is, ${kapili.acik - surekli.acik} saat kazanc`); console.log(`dort kosan kalemin dogus dakikalari ${Object.values(DOGUS).join(", ")}; ` + `ornek kimligi kalemi 2600. dakikada dogar ve acikken yaricap kapili duzende ${kapili.ust}, ` + `kapisiz duzende ${oto.ust} olur`);
ayar taban ortalama en ust acik saat yaricap>=10 degerlendirme tarama yok, kapi yok 4/28 17.0 23/28 153 sa 125 sa 0 gunluk tarama + onayli duzeltme 4/28 5.1 17/28 39 sa 13 sa 91 saatlik tarama + onayli duzeltme 4/28 4.8 17/28 25 sa 9 sa 2184 saatlik tarama + otomatik duzeltme 4/28 4.1 17/28 2 sa 1 sa 2184 + sablon ve kabul kapisi 4/28 4.0 6/28 2 sa 0 sa 2184 surekli tarama + otomatik duzeltme 4/28 4.0 6/28 1 sa 0 sa 26208 tarama araligini 1440 -> 60 dk yapmak acik sureyi 39 -> 25 saate indiriyor; duzeltme gecikmesini 480 -> 10 dk yapmak 25 -> 2 saate indiriyor kapi eklendiginde taban 4 -> 4 ve en ust 17 -> 6 oluyor; acik saat 2 -> 2 tarama araligini 60 -> 5 dk yapmak acik saati 2 -> 1 indiriyor ve haftalik degerlendirmeyi 2184 -> 26208 yapiyor: 12 kat is, 1 saat kazanc dort kosan kalemin dogus dakikalari 900, 2600, 4300, 7100; ornek kimligi kalemi 2600. dakikada dogar ve acikken yaricap kapili duzende 6, kapisiz duzende 17 olur
Hiçbir düzenek yokken yarıçap haftanın 153 saatinde tabanın üstünde duruyor ve ortalaması 17’dir. Sapma doğduğu anda açılıyor ve kapanmıyor; ölçüm penceresinin tamamı bir açık penceredir.
Sıklık mı, Gecikme mi
İki sayı sıralamayı belirliyor ve ikisi aynı düğmeye bağlı değil. Tarama aralığını günden saate indirmek açık süreyi 39 saatten 25 saate çekiyor: on dört saatlik kazanç, yirmi dört kat tarama. Düzeltme gecikmesini sekiz saatten on dakikaya indirmek ise 25 saati 2 saate çekiyor: yirmi üç saatlik kazanç, hiç ek tarama yok. Açık pencereyi belirleyen şey taramanın sıklığı değil, işaretlenen kalemin ne zaman kapandığıdır. Sekiz saatlik onay penceresi, saatlik taramanın kazandırdığının çoğunu geri veriyor.
Bu, otomatik düzeltmeyi bedava yapmaz. Otomatik düzeltmenin kiralanan katmanda geniş bir yazma yetkisi istediği ve meşru yapılandırmaları bozabildiği daha önceki kursta sayıldı; buradaki katkı, o bedelin karşılığının yirmi üç saatlik bir pencere olduğunu yazmaktır. Onay penceresini kısa tutmak ile düzeltmeyi otomatikleştirmek aynı sütuna yazılır.
Son iki satır kapıyı ekliyor. Şablon ve kabul kapısı açık süreyi hiç değiştirmiyor — 2 saat, aynı — çünkü açık süreyi koşan kalemler belirliyor. Değiştirdiği şey en üst yarıçaptır: 17’den 6’ya iniyor. Kapı, pencerenin uzunluğunu değil derinliğini kısar. İki denetim aynı tabloda iki ayrı işi yapıyor ve biri diğerinin yerine geçmiyor. En alttaki satır sınırı gösteriyor: tarama aralığını saatten beş dakikaya indirmek haftalık değerlendirmeyi 2.184’ten 26.208’e, on iki katına çıkarıyor ve karşılığında bir saat kazandırıyor.
Özet
- 23 kenarın 13’ü bir yanlış yapılandırma kalemine bağlıdır; kalemlerin 7’si şablonda, 2’si kabulde, 4’ü ancak koşan kaynağa bakılarak görülür.
- Şablon kapısı yedi kalemi dağıtımdan önce kapatıp yarıçapı 23’ten 8’e indiriyor; kabul kapısı iki kalem daha kapatıyor ve yarıçapı hiç indirmiyor — kalem saymak yarıçap saymak değildir.
- Yarıçapı en çok indiren tek kalem, örneğe bağlı kimliğin oturum başına doğrulama istemeden verilmesidir (23’ten 6’ya) ve bu kalem şablonda değil, ancak koşarken görülür.
- Hiçbir düzenek yokken yarıçap haftanın 153 saatinde tabanın üstündedir; günlük tarama ile onaylı düzeltme bunu 39 saate, saatlik tarama 25 saate indirir.
- Açık pencereyi belirleyen tarama sıklığı değil düzeltme gecikmesidir: sekiz saatlik onay penceresini on dakikaya indirmek 25 saati 2 saate çekiyor, hiç ek tarama istemeden.
- Şablon ve kabul kapısı açık süreyi değiştirmez ama en üst yarıçapı 17’den 6’ya indirir; tarama aralığını saatten beş dakikaya çekmek on iki kat değerlendirme karşılığında bir saat kazandırır.
Sonraki Adım
Buraya kadar her yanlış kalem kiracının kendi hesabının içindeydi ve kapatılabilir bir yapılandırmaydı. Bir kalem bu tanıma uymuyor: iş yükünün üzerinde koştuğu bölme ya da konuk sistemin sınırı. O sınır kiracının yazdığı bir yapılandırma değildir ve düştüğünde ulaşılan kalem kümesi kiracının hesabıyla da sınırlı kalmaz. Sonraki ders bu sınırı çok kiracılı ortamda ölçer: bölme kaçışının yarıçapı tek kiracıda kaç, aynı donanımı paylaşan kiracılar hesaba katıldığında kaç.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.