---
title: 'Kaynak Boyutlandırma'
source: 'https://academia.sh/tr/kurslar/bulut-yonetisimi/kaynak-boyutlandirma'
course: 'Bulut Yönetişimi, Güvenlik ve Maliyet'
language: tr
updated: '2026-08-17T18:06:55+00:00'
license: 'CC BY-SA 4.0'
---

# Kaynak Boyutlandırma

Aşırı sağlamanın fatura tarafı ölçülür: kurgu ağın on kaynağında p95 doluluk ortalaması %31,4'tür ve p95 üzerine %20 pay bırakan küçültme aylık 875 kurgu birimin 401'ini (%45,8) vaat eder. Tasarrufun 353 birimi (%88,0) kesinti gerektirir, yedi adayda geçmiş tepe yeni kademeyi aşar ve en kötü anda %168,4 eksik kalır; hem kesintisiz hem risksiz olan pay yalnızca 10 birimdir. Güvenlik payı %0'dan %100'e çıkarıldığında tasarruf 458'den 64 birime, yetmeyen saat 47'den 3'e iner. Hiçbir kullanım raporunda görünmeyen 147,2 birimlik boşta kaynak ise kesintisiz silinir ve tek başına küçültme tasarrufunun %37'sini verir.

Önceki ders uyarıların beklenmedik artışları yakaladığını, beklenen harcamayı sorgulamadığını
ölçtü: taban bütçeye yaklaşırken hiçbir uyarı tetiklenmez, çünkü ortada olay değil gereğinden
büyük kurulmuş kaynaklar vardır.

Örnek boyutlandırma M23/K02'de ölçüldü ve tekrarlanmaz. Bu dersin ekseni **fatura tarafıdır**:
kullanım geçmişinden hangi kaynağın küçültülebileceği çıkarılır ve her adayın **tasarrufu ile
riski aynı satırda** sayılır.

## Kullanım Geçmişi ve Boyut Merdiveni

Örnek kurgu **bölgesel ölçüm ağı**dır: beş ekip, üç ortam, kiralanmış makine, ağ, depo, işlev ve
kenar katmanı. Kaynaklar, kademeler ve tutarlar kurgudur; **para birimi de kurgudur** ve `br` diye
anılır, gerçek bir fiyat listesine karşılık gelmez.

**BM19:** on kaynak ve beş tür vardır; her türün bir **boyut merdiveni** vardır, her kademe bir
kapasite birimi ile bir aylık bedelden oluşur. **BM20:** kullanım geçmişi 30 gün × 24 saattir;
günlük desen, hafta sonu düşüşü, gürültü ve seyrek tepelerden oluşur. **BM21:** küçültme adayı,
p95 talebine bir **güvenlik payı** eklendikten sonra yeten en küçük kademedir. **BM22:** risk iki
sayıyla ölçülür — yeni kademe geçmişte kaç saat yetmezdi ve **en kötü anda ne kadar eksik**
kalırdı. **BM23:** kademe indirmenin kesinti gerektirip gerektirmediği türe bağlıdır. **BM24:**
boşta kaynağın kullanım oranı tanımsızdır; hiçbir doluluk raporunda görünmez.

Merdiven, geçmiş ve adaylar süreç içi bir **modeldir**; gerçek bir ölçüm kaydı yoktur.

```js
// maliyet/kapasite.mjs — boyut merdiveni ve kullanim gecmisi modeli: gercek bir kayit yok.
// Kademeler [kapasite birimi, aylik br] ciftidir; 30 gun x 24 saatlik gecmis bir uretecten
// turer, tohum gorunurdur, para birimi kurgudur ve `br` diye anilir. Ornek boyutlandirma
// M23/K02'de olculdu; burada olculen sey kademeyi indirmenin tasarrufu ve riskidir.

export const TOHUM = 8814;
export const GUN = 30, SAAT = GUN * 24;

export const MERDIVEN = {
  "kiralanmis makine": [[1, 14], [2, 27], [4, 52], [8, 101], [16, 198]],
  "blok depo":         [[100, 7], [250, 17], [500, 33], [1000, 64], [2000, 126]],
  "islev bellek":      [[1, 3], [2, 6], [4, 11], [8, 21]],
  "ag gecidi":         [[1, 22], [2, 41], [4, 79]],
  "kenar dugumu":      [[1, 9], [2, 17], [4, 32]],
};

// kademeyi indirmek kesinti gerektiriyor mu, gerekiyorsa neden
export const KESINTI = {
  "kiralanmis makine": ["evet", "yeniden baslat"],
  "blok depo":         ["evet", "veri tasima"],
  "islev bellek":      ["hayir", "sonraki cagri"],
  "ag gecidi":         ["hayir", "kademe gecisi"],
  "kenar dugumu":      ["evet", "dugum degisimi"],
};

// ad, tur, mevcut kademe indisi, ekip, taban talep, tepe carpani, tepe olasiligi
export const KAYNAK = [
  ["olcum-alici-1",  "kiralanmis makine", 3, "sayac-okuma", 2.10, 2.1, 0.012],
  ["olcum-alici-2",  "kiralanmis makine", 3, "sayac-okuma", 3.40, 1.6, 0.020],
  ["dogrulayici",    "kiralanmis makine", 2, "dogrulama",   1.15, 2.4, 0.008],
  ["fatura-hazirla", "kiralanmis makine", 4, "faturalama",  4.20, 2.8, 0.006],
  ["rapor-motoru",   "kiralanmis makine", 3, "raporlama",   1.05, 5.2, 0.004],
  ["ham-olcum-diski","blok depo",         3, "sayac-okuma", 340,  1.1, 0.010],
  ["arsiv-diski",    "blok depo",         4, "raporlama",   610,  1.0, 0.000],
  ["olay-islevi",    "islev bellek",      3, "dogrulama",   1.80, 2.0, 0.015],
  ["kuzey-gecidi",   "ag gecidi",         2, "sayac-okuma", 1.30, 2.2, 0.011],
  ["saha-dugumu",    "kenar dugumu",      2, "saha",        0.75, 2.6, 0.007],
];

// hicbir kullanim olcusunde gorunmeyen kalemler: kullanim orani tanimsizdir
// ad, adet, birim aylik br, neden bosta, silmek kesinti gerektiriyor mu
export const BOSTA = [
  ["bagli olmayan blok depo", 4, 17, "makine silindi, depo kaldi", "hayir"],
  ["kullanilmayan sabit adres", 6, 4, "gecis bitti, adres birakilmadi", "hayir"],
  ["eski anlik goruntu", 23, 2.4, "saklama kurali yok", "hayir"],
];

const DESEN = [0.42, 0.38, 0.36, 0.35, 0.38, 0.48, 0.66, 0.84, 0.98, 1.06, 1.10, 1.12,
  1.08, 1.09, 1.11, 1.07, 1.00, 0.92, 0.84, 0.76, 0.68, 0.60, 0.52, 0.46];

export const gecmis = (k) => {
  const [, , , , taban, tepe, p] = k;
  let s = (TOHUM + k[0].length * 7919) >>> 0;
  const r = () => { s = (Math.imul(s, 1664525) + 1013904223) >>> 0; return s / 4294967296; };
  const v = [];
  for (let t = 0; t < SAAT; t++) {
    const hafta = (Math.floor(t / 24) % 7) >= 5 ? 0.74 : 1.0;
    let x = taban * DESEN[t % 24] * hafta * (0.92 + r() * 0.16);
    if (r() < p) x *= tepe;
    v.push(x);
  }
  return v;
};

export const yuzdelik = (v, q) => {
  const s = [...v].sort((a, b) => a - b);
  return s[Math.min(s.length - 1, Math.floor(q * s.length))];
};
export const topla = (v) => v.reduce((a, b) => a + b, 0);
```

```js
// maliyet/olcek.mjs — kullanim gecmisinden kucultme adaylari cikarilir ve her adayin *tasarrufu
// ile riski birlikte* sayilir: onerilen kademe gecmiste kac saat yetmezdi, en kotu anda ne
// kadar eksik kalirdi. Kesinti gerektirenler ayrilir, bosta kaynak ayrica sayilir.
import { KAYNAK, MERDIVEN, KESINTI, BOSTA, SAAT, TOHUM, gecmis, yuzdelik,
  topla } from "./kapasite.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 G = KAYNAK.map(gecmis);
const kap = (t, i) => MERDIVEN[t][i][0], brOf = (t, i) => MERDIVEN[t][i][1];
const T = topla(KAYNAK.map((k) => brOf(k[1], k[2])));
const BOS = topla(BOSTA.map(([, n, b]) => n * b));
console.log(`tohum ${TOHUM}: ${KAYNAK.length} kaynak, ${SAAT} saat gecmis, ` +
  `aylik ${T} br + bosta ${BOS.toFixed(1)} br (kurgu para birimi)`);

console.log("\n1. kullanim gecmisi: mevcut kademe ne kadar dolu");
const A = [-17, -19, 10, 10, 9, 9, 10];
yaz(A, "kaynak", "tur", "kapasite", "aylik br", "p95", "tepe", "p95 dolu");
for (let i = 0; i < KAYNAK.length; i++) {
  const k = KAYNAK[i], c = kap(k[1], k[2]), v = G[i];
  yaz(A, k[0], k[1], c, brOf(k[1], k[2]), yuzdelik(v, 0.95).toFixed(2),
    Math.max(...v).toFixed(2), `%${(100 * yuzdelik(v, 0.95) / c).toFixed(0)}`);
}
const dolu = KAYNAK.map((k, i) => yuzdelik(G[i], 0.95) / kap(k[1], k[2]));
console.log(`  p95 doluluk ortalamasi %${(100 * topla(dolu) / dolu.length).toFixed(1)}; ` +
  `%50'nin altinda ${dolu.filter((x) => x < 0.5).length} kaynak`);

// pay: p95 uzerine eklenen guvenlik payi. Onerilen kademe = yeten en kucuk kademe.
const aday = (pay) => KAYNAK.map((k, i) => {
  const [ad, tur, mev] = k, v = G[i], hedef = yuzdelik(v, 0.95) * (1 + pay);
  let yeni = mev;
  for (let j = 0; j < MERDIVEN[tur].length; j++)
    if (MERDIVEN[tur][j][0] >= hedef) { yeni = Math.min(mev, j); break; }
  const c = kap(tur, yeni);
  const yetmez = v.filter((x) => x > c).length;
  const eksik = Math.max(0, (Math.max(...v) - c) / c);
  return { ad, tur, mev, yeni, tasarruf: brOf(tur, mev) - brOf(tur, yeni), yetmez, eksik,
    inis: mev - yeni, kalan: yeni };
});

console.log("\n2. kucultme adaylari (p95 + %20 guvenlik payi): tasarruf ve risk birlikte");
const B = [-16, 9, 8, 7, 9, 11, 10, 22];
yaz(B, "kaynak", "kademe", "yeni", "inis", "tasarruf", "yetmez sa.", "en kotu", "kesinti");
const AD = aday(0.20);
let tKes = 0, tKessiz = 0;
for (const a of AD) {
  if (a.inis === 0) continue;
  const [kes, neden] = KESINTI[a.tur];
  if (kes === "evet") tKes += a.tasarruf; else tKessiz += a.tasarruf;
  yaz(B, a.ad, kap(a.tur, a.mev), kap(a.tur, a.yeni), a.inis, a.tasarruf,
    a.yetmez, `%${(100 * a.eksik).toFixed(1)}`, `${kes} (${neden})`);
}
const inen = AD.filter((a) => a.inis > 0);
const tt = topla(AD.map((a) => a.tasarruf));
console.log(`  ${inen.length}/${KAYNAK.length} kaynak aday, tasarruf ${tt} br/ay ` +
  `(%${(100 * tt / T).toFixed(1)})`);
console.log(`  kesinti gerektiren ${tKes} br (%${(100 * tKes / tt).toFixed(1)}), ` +
  `kesintisiz ${tKessiz} br`);
const riskli = AD.filter((a) => a.inis > 0 && a.yetmez > 0);
console.log(`  ${riskli.length} adayda gecmis tepe yeni kademeyi asiyor: toplam ` +
  `${topla(riskli.map((a) => a.yetmez))} saat, en kotu eksik ` +
  `%${(100 * Math.max(...AD.map((a) => a.eksik))).toFixed(1)}`);
console.log(`  merdivende kalan inis: ${topla(inen.map((a) => a.kalan))} kademe, ` +
  `${inen.filter((a) => a.kalan === 0).length} kaynak en alt kademede`);

console.log("\n3. guvenlik payi taramasi: tasarruf ile yetmeyen saat birlikte hareket ediyor");
const C = [8, 8, 11, 9, 12, 12, 11];
yaz(C, "pay", "aday", "tasarruf", "pay %", "yetmez sa.", "saat payi", "en kotu");
for (const p of [0, 0.20, 0.35, 0.60, 1.00]) {
  const a = aday(p), i2 = a.filter((x) => x.inis > 0), s = topla(a.map((x) => x.tasarruf));
  const y = topla(a.map((x) => x.yetmez)), e = Math.max(...a.map((x) => x.eksik));
  yaz(C, `%${(100 * p).toFixed(0)}`, i2.length, s, `%${(100 * s / T).toFixed(1)}`, y,
    `%${(100 * y / (SAAT * KAYNAK.length)).toFixed(2)}`, `%${(100 * e).toFixed(1)}`);
}
console.log(`  yetmeyen saat butun taramada ${SAAT} x ${KAYNAK.length} saatin %1'inin`);
console.log(`  altinda kalir: belirleyici olan sayi degil, en kotu andaki eksiktir`);

console.log("\n4. bosta kaynak: hicbir kullanim orani raporunda gorunmez");
const D = [-26, 6, 10, 11, 32, 8];
yaz(D, "kalem", "adet", "birim br", "aylik br", "neden bosta", "kesinti");
for (const [ad, n, b, neden, kes] of BOSTA)
  yaz(D, ad, n, b, (n * b).toFixed(1), neden, kes);
yaz(D, "toplam", topla(BOSTA.map((x) => x[1])), "-", BOS.toFixed(1), "-", "hayir");
console.log(`  bosta ${BOS.toFixed(1)} br/ay, kullanilan faturanin ` +
  `%${(100 * BOS / T).toFixed(1)}'i; tamami kesintisiz silinir`);
console.log(`  ve ${tt} br'lik kucultme tasarrufunun ` +
  `%${(100 * BOS / tt).toFixed(0)}'ini tek basina verir`);

const ms = Number(process.hrtime.bigint() - t0) / 1e6;   // ham olcum basilmaz, bant denetlenir
console.log(`\ndort tablo 2000 ms bandinda: ${ms < 2000 ? "evet" : "hayir"}`);
```

```
tohum 8814: 10 kaynak, 720 saat gecmis, aylik 875 br + bosta 147.2 br (kurgu para birimi)

1. kullanim gecmisi: mevcut kademe ne kadar dolu
kaynak           tur                  kapasite  aylik br      p95     tepe  p95 dolu
olcum-alici-1    kiralanmis makine           8       101     2.42     5.13       %30
olcum-alici-2    kiralanmis makine           8       101     3.92     6.33       %49
dogrulayici      kiralanmis makine           4        52     1.31     3.15       %33
fatura-hazirla   kiralanmis makine          16       198     4.78    13.85       %30
rapor-motoru     kiralanmis makine           8       101     1.19     5.37       %15
ham-olcum-diski  blok depo                1000        64   387.62   438.71       %39
arsiv-diski      blok depo                2000       126   694.29   737.55       %35
olay-islevi      islev bellek                8        21     2.06     4.11       %26
kuzey-gecidi     ag gecidi                   4        79     1.48     2.81       %37
saha-dugumu      kenar dugumu                4        32     0.86     2.23       %21
  p95 doluluk ortalamasi %31.4; %50'nin altinda 10 kaynak

2. kucultme adaylari (p95 + %20 guvenlik payi): tasarruf ve risk birlikte
kaynak             kademe    yeni   inis tasarruf yetmez sa.   en kotu               kesinti
olcum-alici-1           8       4      1       49          6     %28.3 evet (yeniden baslat)
dogrulayici             4       2      1       25          3     %57.5 evet (yeniden baslat)
fatura-hazirla         16       8      1       97          5     %73.1 evet (yeniden baslat)
rapor-motoru            8       2      2       74          2    %168.4 evet (yeniden baslat)
ham-olcum-diski      1000     500      1       31          0      %0.0    evet (veri tasima)
arsiv-diski          2000    1000      1       62          0      %0.0    evet (veri tasima)
olay-islevi             8       4      1       10          1      %2.7 hayir (sonraki cagri)
kuzey-gecidi            4       2      1       38          1     %40.6 hayir (kademe gecisi)
saha-dugumu             4       2      1       15          2     %11.3 evet (dugum degisimi)
  9/10 kaynak aday, tasarruf 401 br/ay (%45.8)
  kesinti gerektiren 353 br (%88.0), kesintisiz 48 br
  7 adayda gecmis tepe yeni kademeyi asiyor: toplam 20 saat, en kotu eksik %168.4
  merdivende kalan inis: 16 kademe, 0 kaynak en alt kademede

3. guvenlik payi taramasi: tasarruf ile yetmeyen saat birlikte hareket ediyor
     pay    aday   tasarruf    pay %  yetmez sa.   saat payi    en kotu
      %0      10        458    %52.3          47       %0.65     %168.4
     %20       9        401    %45.8          20       %0.28     %168.4
     %35       8        370    %42.3          20       %0.28     %168.4
     %60       5        245    %28.0          16       %0.22     %168.4
    %100       2         64     %7.3           3       %0.04      %34.2
  yetmeyen saat butun taramada 720 x 10 saatin %1'inin
  altinda kalir: belirleyici olan sayi degil, en kotu andaki eksiktir

4. bosta kaynak: hicbir kullanim orani raporunda gorunmez
kalem                       adet  birim br   aylik br                     neden bosta kesinti
bagli olmayan blok depo        4        17       68.0      makine silindi, depo kaldi   hayir
kullanilmayan sabit adres      6         4       24.0  gecis bitti, adres birakilmadi   hayir
eski anlik goruntu            23       2.4       55.2              saklama kurali yok   hayir
toplam                        33         -      147.2                               -   hayir
  bosta 147.2 br/ay, kullanilan faturanin %16.8'i; tamami kesintisiz silinir
  ve 401 br'lik kucultme tasarrufunun %37'ini tek basina verir

dort tablo 2000 ms bandinda: evet
```

Sayılar **ölçüm** sınıfındadır; girdileri yukarıdaki varsayımlardır.

## Doluluk Düşük, Tasarruf Büyük Görünüyor

Birinci tablo on kaynağın p95 talebini mevcut kapasiteye böler. Ortalama doluluk **%31,4** ve
**on kaynağın onu da** yarının altındadır. En uçtaki rapor motoru sekiz birimlik kademede oturur,
p95 talebi 1,19'dur — kapasitenin %15'i.

İkinci tablo bunu paraya çevirir. p95 üzerine %20 güvenlik payı bırakıldığında **dokuz kaynak
aday** olur ve aylık 875 birimlik faturadan **401 birim** düşer: **%45,8**. Tek istisna ölçüm
alıcı 2'dir: p95'i kapasitesinin yarısını doldurur ve bir alt kademe yetmez. Aynı satırın
sağındaki iki sütun bu sayıyı değiştirir.

## Tasarrufun Yanında Duran İki Sayı

Birinci sütun **riski** sayar: yeni kademe geçmişte kaç saat yetmezdi. Yedi adayda bu sayı
sıfırdan büyüktür, toplamı 20 saattir — 7.200 saatlik geçmişin binde üçü. İkinci sayı bunu
önemsiz olmaktan çıkarır. **En kötü anda eksik kalan kapasite** rapor motorunda
**%168,4'tür**: iki birimlik yeni kademe, 5,37 birimlik tepenin karşısında yarıdan fazla açık
verir. Fatura hazırlama %73,1, doğrulayıcı %57,5 eksik kalır. Tepe anında hizmet kuyruğa girer ya da
reddedilir; ölçünün "iki saat" demesi bunu hafifletmez.

İkinci sütun **kesintiyi** kalem kalem yazar. Makine kademesi yeniden başlatma, blok depo veri
taşıma, kenar düğümü düğüm değişimi ister; kesintisiz inen yalnız işlev belleği ve ağ geçididir.
Tasarrufun **353 birimi (%88,0)** kesinti gerektirir, kesintisiz olan **48 birimdir**.

İki sütun birlikte okunduğunda tablo daralır. Kesintisiz 48 birimin 38'i ağ geçididir ve o
adayın en kötü eksiği **%40,6'dır**. Geriye hem kesintisiz hem kayda değer açık vermeyen tek
kalem kalır: olay işlevi, **10 birim** — 401 birimlik vaadin bedelsiz kısmı **%2,5**.

Diskler tersini gösterir: iki disk adayının riski tam olarak sıfırdır, ama 93 birimlik tasarrufu
veri taşıma kesintisi ister.

## Güvenlik Payı Neyi Satın Alıyor

Üçüncü tablo payı tarar. Pay sıfırken tasarruf 458 birim (%52,3), yetmeyen saat 47'dir. Pay %20'de
yetmeyen saat 20'ye iner ve tasarruf yalnız 57 birim kaybeder: eğrinin en verimli yeri burasıdır.
Pay %60'ta tasarruf 245 birime düşer, yetmeyen saat ancak 16'ya iner — 156 birim ödenip 4 saat
kazanılır.

En kötü eksik ise **%100 paya kadar hiç değişmez** (%168,4), çünkü pay p95'e eklenir, tepeye
değil. Seyrek ve büyük tepesi olan kaynağın riski güvenlik payıyla satın alınamaz.

## Hiç Dokunulmayan Kalem

Dördüncü tablo doluluk raporunun hiç göstermediği kalemi sayar. Bağlı olmayan dört blok depo,
kullanılmayan altı sabit adres ve saklama kuralı olmayan yirmi üç eski anlık görüntü aylık
**147,2 birim** tutar — kullanılan faturanın **%16,8'i**. Aday listesine hiç girmezler: kullanım
oranları tanımsızdır, bölünecek bir talep yoktur.

Karşılaştırma dersin sonucudur: 147,2 birimin tamamı **kesintisiz** silinir ve tepe riski
taşımaz, küçültmenin bedelsiz payı ise 10 birimdir. Boşta kaynak, küçültme tasarrufunun
**%37'sini** tek başına verir.

## Özet

- On kaynağın **onu da** p95'te yarının altında doludur (ortalama %31,4, en düşüğü %15); p95 +
  %20 payla dokuz kaynak aday olur ve aylık 875 birimin **401'i (%45,8)** tasarruf görünür.
- Tasarrufun **353 birimi (%88,0) kesinti gerektirir**; kesintisiz 48 birimin 38'i en kötü anda
  %40,6 açık veren bir adaydır. Hem kesintisiz hem risksiz pay **10 birim, tasarrufun %2,5'idir**.
  Risk ve kesinti bağımsızdır: iki disk adayı hiç yetmezlik üretmez ama veri taşıma ister.
- Güvenlik payı yetmeyen saati satın alır, **en kötü eksiği satın alamaz**: pay %0'dan %100'e
  çıkarken tasarruf 458'den 64 birime iner ama en kötü eksik %168,4'te kalır — pay p95'e eklenir,
  tepeye değil.
- Boşta kaynak **147,2 birim (%16,8)** tutar ve hiçbir doluluk raporunda görünmez; kesintisiz
  silinir, küçültme tasarrufunun %37'sini tek başına verir.

## Sonraki Adım

Bu dersin bütün sayıları aşağı yönlüdür: neyin küçültülebileceği, neyin silinebileceği. Büyüme
yönünde de bir sayı vardır ve faturada hiç görünmez. Sıradaki ders ölçek planını bir sınır
tablosuna uygular: hangi sınıra kaç birim kaldığı ve hangi sınırın önce dolduğu çıkarılır.
