---
title: 'Başlatma Şablonları'
source: 'https://academia.sh/tr/kurslar/bulut-hesaplama-ve-ag/baslatma-sablonlari'
course: 'Bulutta Hesaplama ve Ağ'
language: tr
updated: '2026-08-17T18:06:56+00:00'
license: 'CC BY-SA 4.0'
---

# Başlatma Şablonları

Elle başlatılan örneklerle şablondan başlatılanlar bir dönem sonunda alan alan karşılaştırılır ve ayrışan örnek ile ayrı yapılandırma varyantı sayılır; şablon güncellendiğinde geride kalan örnek, aynı anda koşan sürüm sayısı ve bir güvenlik düzeltmesinin ulaşmadığı örnek çıkarılır; şablonun kendi girdi yüzeyi ile geri alınamayan alanları adıyla yazılır.

Önceki ders kesintili kapasitede ayda 1450 örnek açıldığını saydı. O 1450 açılışın her birinde
aynı aile, aynı boyut, aynı imaj, aynı alt ağ ve aynı başlangıç betiği seçilir. Seçim elle
yapılıyorsa her açılış ayrı bir yazma işlemidir; ayrı her yazma, tanımdan ayrılma fırsatıdır.

**Başlatma şablonu** bu kalemleri tek bir tanıma toplar: örnek başlatılırken tek tek alan
verilmez, şablonun adı verilir. Bu ders şablonun ne kadarını kapattığını ölçer. Ölçüm üç yerde
yapılır — başlatma anındaki sapmada, şablon güncellendiğinde geride kalan örnekte ve şablonun
kendi girdi yüzeyinde. M22/K01 sapmayı aynı biçimde, tanımdan ayrışan makine sayısı olarak
ölçmüştü; buradaki büyüklük aynıdır ama kaynağı çalışırken oluşan sürüklenme değil, **başlatma
anında yapılan yazmadır**.

**BH19.** Şablon 12 alanlıdır; alanlar ve sapma olasılıkları kurgudur. **BH20.** Dönem boyunca
bölgesel ölçüm ağının — su sayaçlarından okuma toplayan kurgu yazılımın — 140 örneği başlatılır;
tohum 20260915 görünürdür ve üreteç kendi yazılmıştır. **BH21.** Filo 60 örnektir, 90 gün koşar,
her örneğin günlük değiştirilme olasılığı 0,02'dir ve şablon 21 günde bir güncellenir; tohum
20260921. **BH22.** Bir güvenlik düzeltmesi şablonun ikinci sürümüyle gelir. **BH23.** Yerinde
düzeltme 4, yeniden yaratma 35 dakikadır ve aynı anda 2 örnek ele alınır. **BH24.** Geçersiz kılma
bilerek yapılan bir iştir ve kaza sapmasından ayrı modellenir.

## Aynı Tanımı Kaç Kez Yazmak

Elle başlatmada her alan her seferinde ayrı verilir; şablonda alan bir kez verilir ve başlatma
anında yalnız **geçersiz kılınabilir**. İki yol aynı dönemde koşturulup alan alan sayıldığında
farkın nerede olduğu görünür.

```js
// olcum-agi/sablon-alanlari.mjs — elle baslatma ile sablondan baslatmanin sapmasi (model)

export const uretec = (tohum) => () =>
  (tohum = (tohum * 1103515245 + 12345) % 2147483648) / 2147483648;

export const BASLATMA = 140;    // donem boyunca baslatilan ornek (kurgu)

// [ad, zorunlu mu, gecersiz kilinabilir mi, yaratildiktan sonra degisir mi, elle sapma, gecersiz kilma]
export const ALAN = [
  ["ornek ailesi ve boyutu", true, true, true, 0.09, 0.020],
  ["makine imaji", true, true, false, 0.11, 0.010],
  ["alt ag", true, true, false, 0.06, 0.005],
  ["guvenlik grubu", true, true, true, 0.08, 0.010],
  ["anahtar kimligi", true, true, true, 0.05, 0.005],
  ["kok disk boyutu", false, true, true, 0.12, 0.020],
  ["kok disk sifrelemesi", false, true, false, 0.07, 0.005],
  ["baslangic betigi", false, true, false, 0.10, 0.015],
  ["kiralama bicimi", false, true, false, 0.04, 0.030],
  ["yerlestirme tercihi", false, false, false, 0.05, 0.000],
  ["etiketler", false, true, true, 0.18, 0.040],
  ["izleme aracisi", false, true, true, 0.09, 0.005],
];

// Yaratildiktan sonra degismeyen alanlar: sapmasi yerinde duzeltilemez, ornek yeniden yaratilir.
export const GERI_YOK = ALAN.map(([, , , deg], j) => (deg ? -1 : j)).filter((j) => j >= 0);

export const donem = (tohum) => {
  const r = uretec(tohum), sapan = ALAN.map(() => [0, 0]), imza = [new Set(), new Set()];
  const duzeltme = [[0, 0], [0, 0]];        // [yeniden yaratma, yerinde duzeltme]
  for (let i = 0; i < BASLATMA; i++) {
    const iz = [[], []];
    ALAN.forEach(([, , gecersiz, , elle, sab], j) => {
      if (r() < elle) { sapan[j][0]++; iz[0].push(j); }
      if (gecersiz && r() < sab) { sapan[j][1]++; iz[1].push(j); }
    });
    imza[0].add(iz[0].join(",")); imza[1].add(iz[1].join(","));
    [0, 1].forEach((k) => {
      if (iz[k].some((j) => GERI_YOK.includes(j))) duzeltme[k][0]++;
      else if (iz[k].length) duzeltme[k][1]++;
    });
  }
  return { sapan, duzeltme, varyant: imza.map((s) => s.size) };
};

if (import.meta.url === `file://${process.argv[1]}`) {
  const d = donem(20260915);
  console.log(`${BASLATMA} ornek baslatildi; tohum 20260915\n`);
  console.log("alan".padEnd(24) + "zorunlu".padEnd(9) + "gecersiz kilinir".padEnd(18) +
    "sonradan degisir".padEnd(18) + "elle sapan".padEnd(12) + "sablonla sapan");
  ALAN.forEach(([ad, zor, gec, deg], j) =>
    console.log(ad.padEnd(24) + (zor ? "evet" : "hayir").padEnd(9) +
      (gec ? "evet" : "hayir").padEnd(18) + (deg ? "evet" : "hayir").padEnd(18) +
      `${d.sapan[j][0]}/${BASLATMA}`.padEnd(12) + `${d.sapan[j][1]}/${BASLATMA}`));
  const t = [0, 1].map((k) => d.sapan.reduce((s, x) => s + x[k], 0));
  console.log(`\ntoplam alan sapmasi: elle ${t[0]}, sablonla ${t[1]} (${(t[0] / t[1]).toFixed(1)} kat)`);
  console.log(`ayri yapilandirma varyanti: elle ${d.varyant[0]}, sablonla ${d.varyant[1]}`);
}
```

```
140 ornek baslatildi; tohum 20260915

alan                    zorunlu  gecersiz kilinir  sonradan degisir  elle sapan  sablonla sapan
ornek ailesi ve boyutu  evet     evet              evet              8/140       5/140
makine imaji            evet     evet              hayir             12/140      4/140
alt ag                  evet     evet              hayir             10/140      0/140
guvenlik grubu          evet     evet              evet              9/140       1/140
anahtar kimligi         evet     evet              evet              8/140       2/140
kok disk boyutu         hayir    evet              evet              18/140      2/140
kok disk sifrelemesi    hayir    evet              hayir             6/140       1/140
baslangic betigi        hayir    evet              hayir             12/140      2/140
kiralama bicimi         hayir    evet              hayir             5/140       7/140
yerlestirme tercihi     hayir    hayir             hayir             4/140       0/140
etiketler               hayir    evet              evet              30/140      9/140
izleme aracisi          hayir    evet              evet              12/140      1/140

toplam alan sapmasi: elle 134, sablonla 34 (3.9 kat)
ayri yapilandirma varyanti: elle 38, sablonla 13
```

Toplam sapma 134'ten 34'e iner — dört kata yakın. Ama asıl sayı son satırdadır: elle başlatılan
140 örnek **38 ayrı yapılandırma varyantı** üretir, şablondan başlatılanlar 13. Varyant sayısı
filonun kaç farklı şeyden oluştuğunu söyler; bir sorun araştırılırken karşılaşılan soru "bu makine
diğerlerinden nasıl farklı" olduğunda cevabın kaç yerde aranacağını belirleyen budur.

`alt ag` ve `yerlestirme tercihi` satırları şablonun ne kadar kapatabildiğinin sınırını çizer.
Yerleştirme tercihi geçersiz kılınamayan tek alandır ve şablon yolunda sapması **sıfırdır** — tam
korunan tek alan odur. Alt ağ geçersiz kılınabilir olduğu halde yine sıfır çıkar, çünkü kimse onu
bilerek değiştirmez; koruma buradaki gibi çoğu zaman yeterlidir ama garanti değildir.

`kiralama bicimi` satırı tersini gösterir ve dikkatle okunmalıdır: şablon yolunda sapma **elleden
yüksektir** — 7'ye karşı 5. Bu bir hata değil, bir kullanımdır. Önceki dersin sonucu iş türüne göre
kalıcı ile kesintili arasında seçim yapmayı gerektirir ve o seçim örnek başına verilir. Şablon
kaza sapmasını kaldırır; **bilerek yapılan geçersiz kılmayı kaldırmaz** ve kaldırmamalıdır. Ölçünün
işi ikisini ayırmaktır, ikisini birden bastırmak değil.

## Şablon Güncellenince Ne Oluyor

Şablon bir tanımdır; tanımın değişmesi çalışan örnekleri değiştirmez. Bir örnek hangi sürümle
başlatıldıysa ömrü boyunca o sürümü taşır. Bu yüzden şablonun sürümü ile filonun sürümü aynı şey
değildir.

```js
// olcum-agi/sablon-surumu.mjs — sablon guncellenince kac ornek geride kaliyor (model)
import { uretec } from "./sablon-alanlari.mjs";

const FILO = 60, GUN = 90, DEGISIM = 0.02, ARALIK = 21;   // gunluk ornek degistirme olasiligi
const DUZELTME = 2;                                       // guvenlik duzeltmesinin girdigi surum

export const kosum = (tohum = 20260921) => {
  const r = uretec(tohum);
  const ornek = Array.from({ length: FILO }, () => ({ surum: 0, dogum: 0 }));
  const surumler = [{ no: 0, gun: 0, baslatilan: FILO }];
  for (let g = 1; g <= GUN; g++) {
    if (g % ARALIK === 0) surumler.push({ no: surumler.length, gun: g, baslatilan: 0 });
    const su = surumler[surumler.length - 1];
    for (const o of ornek)
      if (r() < DEGISIM) { o.surum = su.no; o.dogum = g; su.baslatilan++; }
  }
  return { ornek, surumler };
};

if (import.meta.url === `file://${process.argv[1]}`) {
  const { ornek, surumler } = kosum();
  console.log(`${FILO} ornek, ${GUN} gun, gunluk degistirme olasiligi ${DEGISIM}, ` +
    `sablon ${ARALIK} gunde bir guncelleniyor; tohum 20260921\n`);
  console.log("surum".padEnd(9) + "cikis gunu".padEnd(13) + "bu surumle baslatilan".padEnd(23) +
    "donem sonunda kosan".padEnd(21) + "en eski ornegin yasi");
  for (const s of surumler) {
    const k = ornek.filter((o) => o.surum === s.no);
    console.log(`v${s.no}`.padEnd(9) + `gun ${s.gun}`.padEnd(13) +
      String(s.baslatilan).padEnd(23) + `${k.length}/${FILO}`.padEnd(21) +
      (k.length ? `${GUN - Math.min(...k.map((o) => o.dogum))} gun` : "—"));
  }
  const eski = ornek.filter((o) => o.surum < DUZELTME).length;
  const son = surumler[surumler.length - 1];
  console.log(`\nson surum v${son.no} gun ${son.gun}'de cikti; ${GUN - son.gun} gun sonra ` +
    `${FILO - ornek.filter((o) => o.surum === son.no).length}/${FILO} ornek hala geride`);
  console.log(`guvenlik duzeltmesi v${DUZELTME} ile geldi (gun ${surumler[DUZELTME].gun}); ` +
    `${GUN - surumler[DUZELTME].gun} gun sonra ${eski}/${FILO} ornek hala eski degerde`);
  console.log(`ayni anda kosan surum sayisi: ` +
    `${new Set(ornek.map((o) => o.surum)).size}/${surumler.length}`);
}
```

```
60 ornek, 90 gun, gunluk degistirme olasiligi 0.02, sablon 21 gunde bir guncelleniyor; tohum 20260921

surum    cikis gunu   bu surumle baslatilan  donem sonunda kosan  en eski ornegin yasi
v0       gun 0        78                     14/60                90 gun
v1       gun 21       30                     8/60                 69 gun
v2       gun 42       29                     15/60                46 gun
v3       gun 63       21                     14/60                26 gun
v4       gun 84       9                      9/60                 5 gun

son surum v4 gun 84'de cikti; 6 gun sonra 51/60 ornek hala geride
guvenlik duzeltmesi v2 ile geldi (gun 42); 48 gun sonra 22/60 ornek hala eski degerde
ayni anda kosan surum sayisi: 5/5
```

Şablon beş kez sürümlendi ve dönem sonunda **beş sürüm de koşuyor**. Filonun tamamı tek bir tanımdan
başlatıldığı halde, o tanımın beş farklı anı aynı anda ayakta durmaktadır. Bu, önceki bölümün
varyant sayısıyla aynı büyüklüğün zaman boyutudur: orada sapma başlatma anında doğuyordu, burada
**şablon değişmediği halde** filo ayrışıyor.

En eski örnek 90 günlüktür ve ilk sürümü taşımaktadır. Günlük değiştirme olasılığı 0,02 olan bir
filoda bir örneğin 90 gün yaşama olasılığı düşüktür ama sıfır değildir; 60 örneğin 14'ü hiç
değişmeden dönemi tamamlar. Ortalamaya bakan bir plan bu örnekleri görmez, çünkü ortalama örnek
yaşı 50 günün altındadır.

Güvenlik satırı bunun bedelidir. Düzeltme 42. günde ikinci sürümle geldi; **48 gün sonra 60 örneğin
22'si hâlâ eski değerdedir**. Şablonu güncellemek bir düzeltmeyi yayımlamak değildir, yalnız bundan
sonra başlatılacak örnekler için geçerli kılmaktır. Düzeltmenin filoya ulaşması ancak örneklerin
değiştirilmesiyle olur ve o hızı şablon değil, filonun yenilenme politikası belirler.

## Şablonun Kendi Yüzeyi

Şablon sapmayı azaltır ama kendisi de bir girdi yüzeyidir: on iki alan bir yerde durur ve o yerdeki
her alan yanlış olabilir. Yüzeyin büyüklüğü alan sayısıyla değil, **kaç alanın geçersiz
kılınabildiğiyle** ve sapmanın düzeltilebilirliğiyle ölçülür.

```js
// olcum-agi/sablon-yuzeyi.mjs — sablonun kendi girdi yuzeyi ve duzeltme bedeli (model)
import { ALAN, BASLATMA, GERI_YOK, donem } from "./sablon-alanlari.mjs";

const YENIDEN = 35, YERINDE = 4, PENCERE = 2;   // dakika, dakika, ayni anda ele alinan ornek
const say = (f) => ALAN.filter(f).length;

if (import.meta.url === `file://${process.argv[1]}`) {
  console.log(`sablonun girdi yuzeyi: ${ALAN.length} alan — ${say((a) => a[1])} zorunlu, ` +
    `${say((a) => !a[1])} varsayilanli, ${say((a) => a[2])} gecersiz kilinabilir, ` +
    `${GERI_YOK.length} yaratildiktan sonra degismez`);
  console.log(`gecersiz kilinamayan alan: ` +
    ALAN.filter((a) => !a[2]).map((a) => a[0]).join(", ") + "\n");
  const d = donem(20260915);
  console.log("yol".padEnd(11) + "ayrisan ornek".padEnd(16) + "yerinde duzelir".padEnd(17) +
    "yeniden yaratilir".padEnd(19) + "duzeltme duvar saati");
  ["elle", "sablonla"].forEach((ad, k) => {
    const [yen, yer] = d.duzeltme[k];
    const dk = Math.ceil(yen / PENCERE) * YENIDEN + Math.ceil(yer / PENCERE) * YERINDE;
    console.log(ad.padEnd(11) + `${yen + yer}/${BASLATMA}`.padEnd(16) + String(yer).padEnd(17) +
      String(yen).padEnd(19) + `${(dk / 60).toFixed(1)} sa`);
  });
  const ELDE = ["sablonun alanlari", "hangi alan gecersiz kilinabilir", "varsayilan degerler",
    "surum politikasi", "sablonu kimin guncelleyebildigi"];
  const DEVIR = ["sablonun saklanmasi", "surum gecmisinin tutulma suresi",
    "baslatma cagrisinin dogrulama kurallari"];
  console.log(`\nkarar defteri: ${ELDE.length} kalem elde, ${DEVIR.length} kalem saglayicida`);
  console.log(`  saglayicida: ${DEVIR.join(", ")}`);
  console.log(`  geri alinamayan ${GERI_YOK.length} alan: ` +
    GERI_YOK.map((j) => ALAN[j][0]).join(", "));
}
```

```
sablonun girdi yuzeyi: 12 alan — 5 zorunlu, 7 varsayilanli, 11 gecersiz kilinabilir, 6 yaratildiktan sonra degismez
gecersiz kilinamayan alan: yerlestirme tercihi

yol        ayrisan ornek   yerinde duzelir  yeniden yaratilir  duzeltme duvar saati
elle       92/140          47               45                 15.0 sa
sablonla   32/140          18               14                 4.7 sa

karar defteri: 5 kalem elde, 3 kalem saglayicida
  saglayicida: sablonun saklanmasi, surum gecmisinin tutulma suresi, baslatma cagrisinin dogrulama kurallari
  geri alinamayan 6 alan: makine imaji, alt ag, kok disk sifrelemesi, baslangic betigi, kiralama bicimi, yerlestirme tercihi
```

İlk satır şablonun sınırını tek sayıda verir: **12 alanın 11'i başlatma anında geçersiz
kılınabilir**. Şablon bir kapı değil, bir varsayılan kümesidir; sapmanın geri kapısı kapalı
değildir, dardır. Tam kapalı tek alan yerleştirme tercihidir ve o alanın şablon yolunda sıfır sapma
vermesi tesadüf değildir.

İkinci tablo düzeltmenin fiyatını iki kaleme ayırır. Elle başlatmada 140 örneğin 92'si ayrışır;
bunların 47'si yerinde düzelir, **45'i yeniden yaratılmalıdır**, çünkü sapma yaratıldıktan sonra
değişmeyen bir alandadır. Toplam duvar saati 15,0'tir. Şablon yolunda ayrışan örnek 32'ye, yeniden
yaratılacak örnek 14'e ve duvar saati 4,7'ye iner. Şablonun kazandırdığı asıl şey sapma sayısındaki
düşüş değil, **düzeltilemez sapmadaki** düşüştür: 45'ten 14'e.

Geri alınamayan altı alan bu ayrımın kaynağıdır ve üçü bu kursun önceki derslerinden gelir: makine
imajı, alt ağ ve kök disk şifrelemesi örnek yaratılırken verilir, başlangıç betiği o örnek için
donar, kiralama biçimi kalıcı başlatılan örneği kesintiliye çeviremez, yerleştirme tercihi ise
örneğin nereye konduğunu belirler ve sonradan taşınmaz. Bu altı alandan birinde yanlış değer,
düzeltme değil **değiştirme** ister.

Yüzeyin bir de yazılmayan tarafı vardır. Şablonda **kaç örnek başlatılacağı** yoktur; şablon bir
örneğin nasıl olacağını söyler, kaç tane olacağını söylemez. Sayı hâlâ her başlatmada dışarıdan
verilir ve dönem boyunca 140 kez verilmiştir. Aynı biçimde şablon, başlatılan örneğin **ne zaman**
sonlandırılacağını da yazmaz; 90 günlük koşumda 14 örneğin hiç değişmemesinin nedeni budur.

Karar defterinde sekiz kalemin **beşi elde, üçü sağlayıcıdadır**. Sağlayıcıda kalan üçü —
şablonun saklanması, sürüm geçmişinin ne kadar tutulacağı ve başlatma çağrısının hangi alanı
doğruladığı — şablonun kendisini bir bağımlılık haline getirir: elde kalan beş kalem ancak o üçü
çalışırken anlamlıdır.

## Özet

- Şablon toplam alan sapmasını 134'ten 34'e indirir, ama daha anlamlı sayı varyanttır: 140 örnek
  elle başlatıldığında 38, şablondan başlatıldığında 13 ayrı yapılandırma çıkar.
- Şablon kaza sapmasını kaldırır, bilerek yapılan geçersiz kılmayı kaldırmaz: `kiralama bicimi`
  alanında şablon yolunda 7, elle yolda 5 sapma vardır ve bu bir hata değil, iş türüne göre
  verilen bir karardır.
- Şablon güncellenince hiçbir çalışan örnek değişmez: beş sürüm aynı anda koşar, son sürüm
  çıktıktan 6 gün sonra 60 örneğin 51'i hâlâ geridedir.
- Güvenlik düzeltmesi ikinci sürümle geldiği halde 48 gün sonra 22 örnek eski değerdedir;
  düzeltmenin hızını şablon değil, filonun yenilenme politikası belirler.
- Şablonun girdi yüzeyi 12 alandır ve 11'i başlatma anında geçersiz kılınabilir; tam korunan tek
  alan yerleştirme tercihidir.
- Şablonun asıl kazancı düzeltilemez sapmadadır: yeniden yaratılması gereken örnek 45'ten 14'e,
  düzeltme duvar saati 15,0'ten 4,7'ye iner; geri alınamayan alan sayısı 6'dır.

## Sonraki Adım

Bu ders örnek başlatmayı tek bir tanıma indirdi, ama başlatma kararını hâlâ bir kişi veriyor:
şablon var, düğmeye basan var. Önceki derslerin sayıları bu düğmeye ayda binlerce kez basıldığını
gösterdi — kesintili kapasitede 1450 kesinti, 90 günde 180 örnek değişimi.

Bir grup örneği tek bir şablondan üretmek, o gruba iki iş daha devretmeyi mümkün kılar: sayıyı
talebe göre değiştirmek ve sağlıksız örneği kendiliğinden yenilemek. M22/K03 yatay ölçeklemeyi ve
ölçütün gecikmesinden doğan salınımı ölçmüştü; o tarama tekrarlanmaz. Sonraki ders bu iki işin
**birlikte** davranışını ölçer ve sorar: sağlıksız örnek değiştirilirken ölçekleme de tetiklenirse
grup boyutu ne yapıyor, aynı anda kaç örnek değişiyor ve kapasitenin altına kaç turda düşülüyor?
