İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat