Ders 18 / 18
Kapasite ve Maliyet İzleme
İşletim maliyetinin soru kümesine bağlanması: günlük 753 kurgu biriminin %30'unun sahipsiz kalması yüzünden sekiz maliyet sorusundan yalnız dördünün tam yanıtlanması, izleme verisinin kendi payının %16 olması, %90 hedef kullanımın 30 günün sekizinde doyup 360 dakika kesinti üretmesine karşılık %75'te doyumun sıfırlanıp kaçınılan dakikanın 5,1 birime mal olması, ölçek sekiz katına çıkarken altyapının milyon istek başına 507'den 344 birime inmesi ama izlemenin 100'den 244'e çıkıp payını %41'e taşıması.
İçindekiler
Önceki ders hata bütçesini bir kurala çevirdi: hat durdu, kuyruk birikti ve duruştan çıkışın biçimi kesintiyi ikiye katladı ya da yarıya indirdi. O sayıların hepsi dakika ve değişiklik cinsindendi. Hiç sorulmayan soru şuydu: bunların hepsi ne kadara koşuyor.
Kapasite kararının kendisi M19/K06’da ölçüldü. Burada kapasite bir işletim maliyeti olarak ele alınır: kaynak kullanımı bir fiyata dönüşür, o fiyat bir soru kümesine uygulanır ve toplanan izleme verisinin kendi maliyeti ayrı bir kalem olarak sayılır. Gözlemlenebilirlik bu tabloda hem ölçen taraftır hem ölçülen.
Maliyet Soru Kümesi
Örnek yine kurgu bölgesel ölçüm ağıdır. Kalemler, fiyatlar ve talep kurgudur; para birimi de
kurgudur ve br diye anılır, gerçek bir fiyat listesine karşılık gelmez.
OY31: dokuz maliyet kalemi vardır; her kalemin bir sabit ve bir değişken günlük bedeli, bir de
ölçek üssü yazılıdır. Dönem 30 gündür. OY32: kalemlerin bir bölümü sahip etiketi taşır;
paylaşılan veri deposu ile bölgeler arası aktarım etiketsizdir ve servislere bölüştürülemez.
OY33: fatura verisi üç gün gecikmelidir; son üç günün ayrıntısı hiç yoktur. OY34: günlük
talep ortalaması 1,0 olan bir dizidir (üreteç kendi yazılır, tohum 20260826); kapasite hedef
kullanım oranından türetilir — kapasite hesabının kendisi M19/K06’da ölçüldü, burada girdidir.
OY35: talebin kapasiteyi aştığı her gün doyum sayılır ve 45 dakika kesinti üretir.
OY36: ölçek k katına çıktığında örnek sayısı k, etiket kardinalite çarpanı √k katına
çıkar; izleme serisi ikisinin çarpımıdır, yani ölçek üssü 1,5’tir.
Kalemler, talep ve fatura süreç içi bir modeldir; gerçek bir fatura yoktur.
// maliyet/kalem.mjs — isletim maliyeti modeli: gercek bir fatura yok; kalemler, fiyatlar ve // talep bir veri yapisidir. Para birimi kurgudur ve `br` diye anilir. Tohum gorunur. export const DONEM = 30, TOHUM = 20260826, GECIKME = 3, DOYUM_DK = 45; // kalem: ad, sabit br/gun, degisken br/gun, olcek ussu, sahip etiketi var mi, izleme kalemi mi export const KALEM = [ ["servis ornekleri", 40, 134, 1.00, true, false], ["bellek ve yerel disk", 0, 86, 1.00, true, false], ["blok depolama", 12, 58, 1.00, true, false], ["gecelik toplu is kumesi", 55, 20, 0.70, true, false], ["paylasilan veri deposu", 90, 60, 0.80, false, false], ["bolgeler arasi aktarim", 0, 74, 1.00, false, false], ["zaman serisi deposu", 8, 46, 1.50, true, true], ["gunluk deposu", 6, 38, 1.50, true, true], ["iz deposu", 4, 22, 1.50, true, true], ]; export const ISTEK = 1240000; // olcek 1'de gunluk istek sayisi export const KAPASITE_BR = 278; // kapasiteye bagli kalemlerin gunluk br'si export const br = (k, x) => x[1] + x[2] * Math.pow(k, x[3]); export const gunluk = (k, f = () => true) => KALEM.filter(f).reduce((t, x) => t + br(k, x), 0); export function uretec(tohum) { // dogrusal eslesmeli uretec let x = tohum >>> 0; return () => ((x = (x * 1664525 + 1013904223) >>> 0) / 2 ** 32); } // gunluk talep: ortalamasi 1,0 olan bir dizi; tepe taban orani varsayimdan gelir export const talep = (() => { const z = uretec(TOHUM); return Array.from({ length: DONEM }, () => 0.78 + 0.44 * z()); })(); // hedef kullanim oraninin bedeli: bosta duran kapasite ile doyum gunu birlikte export function kullanim(hedef) { const ort = talep.reduce((a, b) => a + b, 0) / DONEM; const kapasite = ort / hedef; const doyum = talep.filter((t) => t > kapasite).length; const maliyet = KAPASITE_BR * kapasite * DONEM; return { hedef, kapasite, maliyet, bosta: maliyet * (1 - hedef), doyum, kesinti: doyum * DOYUM_DK, tepe: Math.max(...talep) }; }
// maliyet/olc.mjs — maliyet soru kumesi, izleme verisinin kendi payi, bosta kaynak ile doyum, // ve olcek buyudukce birim maliyetin hangi kalemde dusmedigi. import { KALEM, DONEM, GECIKME, DOYUM_DK, ISTEK, br, gunluk, kullanim } from "./kalem.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 t0 = process.hrtime.bigint(); const G1 = gunluk(1), etiketli = gunluk(1, (x) => x[4]), izleme = gunluk(1, (x) => x[5]); const pay = (a) => `%${(100 * a / G1).toFixed(0)}`; console.log(`${DONEM} gun, ${KALEM.length} maliyet kalemi, gunluk ${G1.toFixed(0)} br ` + `(kurgu para birimi); fatura ${GECIKME} gun gecikmeli`); // soru kumesi: [soru, yanit, kapsanan maliyet payi, yanitlanamamanin nedeni] const SORU = [ ["toplam ne kadar tutuyor", "evet", 1, "-"], ["hangi servis ne kadar tutuyor", "kismi", etiketli / G1, "etiketsiz kaynak"], ["dunku artis nereden geldi", "hayir", 0, "gecikmeli fatura verisi"], ["hangi kaynak bosta duruyor", "evet", 1, "-"], ["bir istek kaca mal oluyor", "evet", 1, "-"], ["bir servisin istegi kaca mal oluyor", "hayir", etiketli / G1, "paylasilan kalem bolusturulemez"], ["izleme verisi ne kadar tutuyor", "evet", 1, "-"], ["olcek iki katina ciksa fiyat ne olur", "kismi", 1, "faturadan okunmaz"], ]; console.log("\n1. maliyet soru kumesi"); const A = [-37, 8, 11, 32]; yaz(A, "soru", "yanit", "kapsanan", "yanitlanamamanin nedeni"); for (const [s, y, p, n] of SORU) yaz(A, s, y, `%${(100 * p).toFixed(0)}`, n); const tam = SORU.filter((s) => s[1] === "evet").length; console.log(` ${tam}/${SORU.length} soru tam yanitlanir; ` + `${SORU.filter((s) => s[1] === "kismi").length} kismi, ` + `${SORU.filter((s) => s[1] === "hayir").length} yanitsiz`); console.log("\n2. kalem dokumu ve izlemenin kendi payi"); const B = [-26, 11, 8, 10, 12]; yaz(B, "kalem", "gunluk br", "pay", "sahip", "tur"); for (const x of KALEM) yaz(B, x[0], br(1, x).toFixed(0), pay(br(1, x)), x[4] ? "etiketli" : "yok", x[5] ? "izleme" : "altyapi"); yaz(B, "toplam", G1.toFixed(0), "%100", pay(etiketli), pay(izleme)); console.log(` (son satir: etiketli pay, izleme payi) izleme ${izleme.toFixed(0)} br/gun`); console.log("\n3. hedef kullanim orani: bosta kaynak ile doyum yan yana"); const C = [-9, 11, 12, 11, 9, 11, 14]; yaz(C, "hedef", "kapasite", "donem br", "bosta br", "doyum", "kesinti", "bosta br/dk"); const K = [0.30, 0.45, 0.60, 0.75, 0.90].map(kullanim); const taban = K[K.length - 1]; for (const r of K) { const kacinilan = taban.kesinti - r.kesinti, fark = r.bosta - taban.bosta; yaz(C, `%${(100 * r.hedef).toFixed(0)}`, r.kapasite.toFixed(2), r.maliyet.toFixed(0), r.bosta.toFixed(0), `${r.doyum}/${DONEM}`, `${r.kesinti} dk`, kacinilan > 0 ? (fark / kacinilan).toFixed(1) : "-"); } console.log(` talep tepesi ${taban.tepe.toFixed(2)}; doyan gun ${DOYUM_DK} dk kesinti uretir`); console.log("\n4. olcek buyurken birim maliyet"); const D = [-7, 12, 13, 13, 12, 12]; yaz(D, "olcek", "gunluk br", "br/M istek", "altyapi/M", "izleme/M", "izleme pay"); for (const k of [1, 2, 4, 8]) { const t = gunluk(k), iz = gunluk(k, (x) => x[5]), M = (ISTEK * k) / 1e6; yaz(D, `${k}x`, t.toFixed(0), (t / M).toFixed(1), ((t - iz) / M).toFixed(1), (iz / M).toFixed(1), `%${(100 * iz / t).toFixed(0)}`); } const ms = Number(process.hrtime.bigint() - t0) / 1e6; // ham olcum basilmaz, bant denetlenir console.log(`\ndort tablo ve olcek taramasi 2000 ms bandinda: ${ms < 2000 ? "evet" : "hayir"}`);
30 gun, 9 maliyet kalemi, gunluk 753 br (kurgu para birimi); fatura 3 gun gecikmeli 1. maliyet soru kumesi soru yanit kapsanan yanitlanamamanin nedeni toplam ne kadar tutuyor evet %100 - hangi servis ne kadar tutuyor kismi %70 etiketsiz kaynak dunku artis nereden geldi hayir %0 gecikmeli fatura verisi hangi kaynak bosta duruyor evet %100 - bir istek kaca mal oluyor evet %100 - bir servisin istegi kaca mal oluyor hayir %70 paylasilan kalem bolusturulemez izleme verisi ne kadar tutuyor evet %100 - olcek iki katina ciksa fiyat ne olur kismi %100 faturadan okunmaz 4/8 soru tam yanitlanir; 2 kismi, 2 yanitsiz 2. kalem dokumu ve izlemenin kendi payi kalem gunluk br pay sahip tur servis ornekleri 174 %23 etiketli altyapi bellek ve yerel disk 86 %11 etiketli altyapi blok depolama 70 %9 etiketli altyapi gecelik toplu is kumesi 75 %10 etiketli altyapi paylasilan veri deposu 150 %20 yok altyapi bolgeler arasi aktarim 74 %10 yok altyapi zaman serisi deposu 54 %7 etiketli izleme gunluk deposu 44 %6 etiketli izleme iz deposu 26 %3 etiketli izleme toplam 753 %100 %70 %16 (son satir: etiketli pay, izleme payi) izleme 124 br/gun 3. hedef kullanim orani: bosta kaynak ile doyum yan yana hedef kapasite donem br bosta br doyum kesinti bosta br/dk %30 3.33 27785 19449 0/30 0 dk 51.5 %45 2.22 18523 10188 0/30 0 dk 25.7 %60 1.67 13892 5557 0/30 0 dk 12.9 %75 1.33 11114 2778 0/30 0 dk 5.1 %90 1.11 9262 926 8/30 360 dk - talep tepesi 1.21; doyan gun 45 dk kesinti uretir 4. olcek buyurken birim maliyet olcek gunluk br br/M istek altyapi/M izleme/M izleme pay 1x 753 607.3 507.3 100.0 %16 2x 1356 546.7 418.5 128.2 %23 4x 2706 545.5 370.9 174.6 %32 8x 5832 587.9 344.3 243.6 %41 dort tablo ve olcek taramasi 2000 ms bandinda: evet
Sayılar ölçüm sınıfındadır; girdileri yukarıdaki varsayımlardır.
Faturanın Yüzde Otuzu Sahipsiz
Birinci tablo sekiz maliyet sorusunu kayda bağlar ve her sorunun faturanın hangi payı için yanıtlandığını yazar: dördü tam, ikisi kısmi, ikisi yanıtsız.
Nedenler ayrı ayrı adlandırılır. Etiketsiz kaynak: paylaşılan veri deposu (%20) ile bölgeler arası aktarım (%10) sahip etiketi taşımaz; “hangi servis ne kadar tutuyor” sorusu faturanın yalnız %70’i için yanıtlanır. Paylaşılan kalemin bölüştürülememesi: aynı %30, “bir servisin isteği kaça mal oluyor” sorusunu tümüyle kapatır — toplam birim maliyet hesaplanabilir, servis başına olan hesaplanamaz. Gecikmeli fatura verisi: ayrıntı üç gün geriden geldiği için “dünkü artış nereden geldi” %0 kapsamla yanıtsızdır ve o üç günde aynı artış her gün yeniden ödenir.
İzleme Kendi Faturasını Taşıyor
İkinci tablo kalemleri döker. Günlük toplam 753 birimdir; bunun 124 birimi (%16) izleme verisinin kendi maliyetidir — zaman serisi deposu 54, günlük deposu 44, iz deposu 26. Üçü de ölçen taraftır ve hiçbir isteği karşılamaz.
Ölçen tarafın ölçülmesi kursun kendi kuralının kendine uygulanmasıdır. İki sayı bunun yanında okunur: hiçbir soru açmayan tek etiketin kaldırılması tam serinin %89’unu kazandırıyordu, hiçbir soruya yanıt vermeyen paneller sorgu maliyetinin %95’ini tarıyordu. Karşılıksız veri bu tabloda bir kalem olarak görünür.
Boşta Kaynak ile Doyum
Üçüncü tablo iki bedeli aynı satıra koyar. Hedef kullanım oranı yükseldikçe kapasite küçülür, dönem maliyeti 27.785 birimden 9.262’ye, boşta duran kapasitenin bedeli 19.449’dan 926 birime iner. Buna karşılık %90 hedefte otuz günün sekizinde talep kapasiteyi aşar ve 360 dakika kesinti çıkar; talep tepesi 1,21, kapasite 1,11’dir.
Son sütun kararın kendisidir: doyumdan kaçınmanın dakika başına fiyatı. %75 hedefte doyum sıfırdır ve fazladan boşta duran kapasite kaçınılan dakika başına 5,1 birim tutar. Aynı sıfır doyum %60 hedefte 12,9, %45’te 25,7, %30’da 51,5 birime mal olur. Boşta kaynak bir sigortadır ve aynı korumanın fiyatı on kat değişir; hedefi %75’in altına çekmek tek bir doyum dakikası kazandırmaz.
Bu tablonun bir yanı ölçülemeyendir: kesinti dakikasının kaç birime karşılık geldiği yazılı değildir. Kaynak fiyatı faturadan okunur, kesintinin fiyatı okunmaz.
Ölçek Ekonomisinin Çalışmadığı Kalem
Dördüncü tablo ölçeği sekiz katına çıkarır. Altyapı beklendiği gibi davranır: milyon istek başına 507,3 birimden 344,3 birime iner, çünkü sabit tabanlar amortize olur ve paylaşılan veri deposu ile toplu iş kümesi ölçek üssü birin altındadır.
İzleme tersine gider. Milyon istek başına 100,0 birimden 243,6 birime çıkar ve payı %16’dan
%41’e yükselir. Nedeni varsayımda açıkça yazılıdır: örnek sayısı k katına çıkarken etiket
kardinalitesi de büyür, seri sayısı ikisinin çarpımıdır ve ölçek üssü 1,5’e oturur. Ölçüt hattı
büyüyen sistemden daha hızlı büyür.
Toplam birim maliyet bu iki eğrinin toplamıdır ve dönüş noktası tablodadır: 607,3’ten 546,7’ye, sonra 545,5’e iner ve sekiz katta 587,9’a geri çıkar. Ölçek ekonomisi dört kat büyümede tükenir; ondan sonra sistemi büyütmek birim maliyeti düşürmez, çünkü tasarrufu izleme kalemi geri alır. Ölçek ekonomisinin çalışmadığı kalem gözlemlenebilirliğin kendisidir.
Özet
- Sekiz maliyet sorusundan dördü tam, ikisi kısmi yanıtlanır, ikisi yanıtsız kalır; üç neden adıyla yazılır — etiketsiz kaynak (%30), paylaşılan kalemin bölüştürülememesi, üç gün gecikmeli fatura verisi.
- Günlük 753 birimin 124’ü (%16) izleme verisinin kendi maliyetidir; ölçen taraf faturada ayrı bir kalemdir ve hiçbir isteği karşılamaz.
- %90 hedef kullanımda 30 günün 8’i doyar ve 360 dakika kesinti çıkar; %75’te doyum sıfırlanır ve kaçınılan dakika 5,1 birime, %30’da aynı koruma 51,5 birime mal olur.
- Ölçek sekiz katına çıkarken altyapı milyon istek başına 507,3’ten 344,3 birime iner, izleme 100,0’dan 243,6’ya çıkar ve payı %41’e gider; toplam birim maliyet dört katta dibi bulur (545,5) ve sekiz katta 587,9’a döner.
Kurs Kapanışı
| Ders | Yanıtlanan soru | Yanıtlanamayan soru ve nedeni | Verinin bedeli |
|---|---|---|---|
| Ölçüt Toplama Modelleri | 9/12 (itme) | S12, taşınmayan işlem kimliği | 1,2 MB/soru |
| Zaman Serisi Verisi | 11/12 | S12, etiketle çözülmez | 634,82 GB karşılıksız etiket |
| Sorgu ve Toplulaştırma | 2/4 ölçü birebir | 729 istek, özet siler | 3,6M kayıt taraması |
| Günlük Toplama | 9/12 (1x yük) | 3 soru, kırpılan hata satırı | 75 MB/soru (2x yük) |
| Günlük Ayrıştırma | 4/6 doğru | 2 soru, bakımsız kural | 35.233 bayt/doğru yanıt |
| Saklama ve Maliyet | 11/12 | S12, hiçbir basamakta yok | 2,76 GB/soru |
| Dağıtık İzleme Altyapısı | 9/11 (iz) | 1 soru, enstrümantasyon derinliği | 43,7 MB/soru |
| Enstrümantasyon Standartları | 6/10 (sözleşme) | 4 soru, uyumsuz servis | 20 alan değişikliği |
| Gösterge Tablosu Tasarımı | 11/12 (düzenden sonra) | 1 soru, toplanmamış boyut | 814/859 karşılıksız seri |
| Uyarı Kuralları | 7/8 olay (üç kural) | 1 olay, ölçütün kendisi | 21 yanlış alarm |
| Uyarı Yorgunluğu | 13/20 olay | 7 olay, sıradaki gecikme | 191 bildirim, %93 boş |
| Sentetik İzleme | 10/10 (ikisi birlikte) | 3 arıza, sabit girdili yoklama | 480 yoklama/gün |
| Nöbet Düzeni | 5/8 | 3 soru, ölçülmeyen toparlanma | 118,7 toparlanma saati |
| Olay Sınıflandırma | 4/7 | 3 soru, olay kapanmadan | 11.040 etki-dakika |
| Çalışma Yordamları | 5/8 | 3 soru, yordamın geçerliliği | 384 dakika gecikme |
| Olay Sonrası İnceleme | 7/8 | 1 soru, karşı olgu | 10.971 bayt/soru |
| Hata Bütçesi Yönetimi | 5/6 | 1 soru, karşı olgu | 5.952 bayt/soru |
| Kapasite ve Maliyet İzleme | 4/8 tam | 2 soru, etiketsiz kaynak | 124 br/gün izleme |
Kursun kuralı on sekiz satırın hepsinde aynı biçimde okunur: veri sorunun yanıtı kadar değerlidir; hiçbir soruyu yanıtlamayan veri maliyet, yanıtsız kalan soru risktir. Birinci sütun hiçbir derste tam değildir, dördüncü sütun her derste bir sayı taşır.
Üçüncü sütunda dört neden tekrar eder. Toplanmamış boyut on satırda çıkar: alan hiç yazılmamıştır ve ne saklamayı uzatmak ne etiket eklemek onu açar — işlem kimliği, abone grubu, toparlanma penceresi, etiketsiz kaynak hep aynı boşluktur. Silinmiş ayrıntı üç satırdadır: veri toplanmış, sonra bir katmanda kaybolmuştur — özetin sildiği eşik sorusu, kırpılan hata satırı, bakımsız kuralın boş bıraktığı alan. Geç gelen yanıt üç satırdadır: veri vardır ama sorulduğu anda orada değildir. Karşı olgu iki satırdadır ve hiçbir kayıtla açılmaz: kapanan maddenin önlediği kesinti, durdurmanın önlediği olay. İlk üçü bir tasarım kararıyla kapatılabilir; dördüncüsü kapatılamaz ve yerine önlenmeyenin sayılması geçer.
Sistem artık görünür ve olaylar yönetiliyor. Bir sonraki kurs, M22/K07 Sunucu, Ağ ve Sertleştirme, görünen şeyin altına iner: bu on sekiz dersin ölçtüğü her şey bir makinenin ve bir ağın üstünde koşuyordu ve ikisi de hâlâ varsayılan ayarlarıyla duruyor. Açık duran port, yazılmamış kural, değiştirilmemiş öntanımlı hesap — oradaki yüzey ne kadar geniş?
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.