---
title: 'Yeniden İnşa Temelli Güncelleme'
source: 'https://academia.sh/tr/kurslar/calisma-zamani-guvenligi/yeniden-insa-temelli-guncelleme'
course: 'Çalışma Zamanı Güvenliği ve Sır Yönetimi'
language: tr
updated: '2026-08-17T18:06:41+00:00'
license: 'CC BY-SA 4.0'
---

# Yeniden İnşa Temelli Güncelleme

Aynı temel görüntü düzeltmesi otuz bir kopyada üç yolla koşturulur ve yama gecikmesi gün cinsinden ölçülür: yerinde yama bütün filoyu 5,25 günde kapatır ama koruma kopya ağırlıklı ortalama 2,61 gün sonra kaybolur ve otuz günün yüzde 72,8'i açık geçer; kod değişikliğiyle yeniden inşa son kopyayı 14,25 günde kapatır, açık pay yüzde 19,4'tür; zamanlanmış yeniden inşa dokuz servisi de 1,75 günde kapatır ve açık payı yüzde 5,8'e indirir. Bedeli haftalık kopya yeniden başlatmasının 73,5'ten 96,75'e, yani yüzde 31,6 artmasıdır; iki kopyalı servisler her turda doksan saniye boyunca kapasitelerinin yarısını yitirir.

Önceki ders sürekli denetimin bulgularını sahibine göre ayırdı ve erken aşama sütununda otuz iki
bulgu **yapı** yazdı: değişken görüntü etiketi, imzasız görüntü ve eski çalışma zamanı sürümü.
Üçü de yerinde düzeltilemez; kapanmaları için yeni bir görüntü inşa edilip otuz bir kopyanın yeniden
dağıtılması gerekir.

Bu ders o mesafeyi ölçer ve ölçü birimi **gündür**: bir düzeltme yayımlandıktan sonra filonun son
kopyasında koşmaya başlaması kaç gün alıyor ve o süre boyunca kaç kopya açık kalıyor. Değişmez
altyapının gerekçesi — makinelerin ayrışması, geri alma turu, taşınamayan yerel durum — **Kod Olarak
Altyapı** kursunda ölçüldü ve burada girdi olarak alınıyor. Soru başkadır: yama gecikmesi kaç güne
iniyor ve karşılığında kaç yeniden başlatma isteniyor.

- **AD23.** Ortam aynıdır: dokuz servis, otuz bir kopya, bir küme. Gerçek bir yapı ya da dağıtım
  koşturulmuyor; ölçülen şey `node` ile kurulan bir modeldir. Bütün aşama süreleri gün cinsinden
  modelde verilmiştir ve sayılar bunlardan türetilir; duvar saati ölçülmüyor.
- **AD24.** Servis başına dağıtımlar eşit aralıklıdır ve haftalık sürüm toplamı önceki derste
  kullanılan on sekizdir. Gerçekte aralık dağılır; dağılım kuyruğu uzatır, sıralamayı değiştirmez.
- **AD25.** Yerinde yama koşan kapsülün dosya sistemine uygulanır, görüntüye yazılmaz; bir sonraki
  dağıtım yamasız görüntüyü geri getirir. Modelin belirleyici varsayımı budur.
- **AD26.** Kademeli dağıtımda aynı anda en fazla bir kopya kapalıdır ve hazır olma süresi kopya
  başına sabittir; yeniden başlatmanın kendi arıza olasılığı modellenmiyor.

## Üç Yol ve Yama Gecikmesi

```js
// guncelleme.mjs — otuz bir kopya, uc guncelleme yolu ve otuz gunluk pencere. MODELDIR.
// [servis, kopya, haftalik surum]; surum toplami 18, onceki derste kullanilan degerin dagilimi.
export const SERVIS = [
  ['portal-onu', 6, 5], ['abone-servisi', 4, 4], ['faturalama', 3, 3], ['is-emri', 3, 2],
  ['bildirim', 2, 1], ['rapor', 2, 1], ['sayac-toplama', 6, 1], ['dogrulayici', 3, 0.5],
  ['saha-senkron', 2, 0.5],
];
export const PENCERE = 30, HAZIR = 45; // gun; kopya basina hazir olma suresi (sn)
export const aralik = (s) => 7 / s[2];
export const kopya = SERVIS.reduce((a, s) => a + s[1], 0);

// Asama sureleri (gun): yerinde yama = paket deposu 0.5 + onay 1 + bakim penceresi 3.5 +
// uygulama 0.25; yeniden insa = kayit defterine yansima 0.5 + yapi ve hat 0.25; zamanlanmis
// bunlara gecelik tetikleyiciyi (1) ekler.
const YAMA = 0.5 + 1 + 3.5 + 0.25, INSA = 0.25, KAYIT = 0.5, TETIK = 1;
const sonraki = (s, t) => Math.ceil((t + 1e-9) / aralik(s)) * aralik(s);

// Yerinde yama goruntuye yazilmaz: bir sonraki dagitim yamasiz goruntuyu geri getirir.
export function korumali(yol, s) {
  const ara = [];
  if (yol === 'yerinde yama')
    for (let w = YAMA; w < PENCERE; w += 7) ara.push([w, Math.min(sonraki(s, w), PENCERE)]);
  else if (yol === 'kod degisikligiyle yeniden insa')
    ara.push([Math.min(sonraki(s, KAYIT) + INSA, PENCERE), PENCERE]);
  else ara.push([Math.min(KAYIT + TETIK + INSA, PENCERE), PENCERE]);
  return ara.filter(([b, e]) => e > b);
}

export const YOLLAR = ['yerinde yama', 'kod degisikligiyle yeniden insa', 'zamanlanmis yeniden insa'];
export const koruma = (yol, s) => korumali(yol, s).reduce((a, [b, e]) => a + e - b, 0);
export const ilk = (yol, s) => korumali(yol, s)[0] ?? [PENCERE, PENCERE];
export const acik = (yol) => SERVIS.reduce((a, s) => a + s[1] * (PENCERE - koruma(yol, s)), 0);
export const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0])).join('');
```

```js
// kosum1.mjs — ayni yama, uc yol: son kopyanin kapanma gunu ve acik kopya-gun
import { SERVIS, YOLLAR, PENCERE, kopya, aralik, koruma, ilk, acik, gen } from './guncelleme.mjs';

console.log(`${SERVIS.length} servis, ${kopya} kopya, haftada ${SERVIS.reduce((a, s) => a + s[2], 0)} surum; ` +
  `dagitim araligi ${Math.min(...SERVIS.map(aralik)).toFixed(2)} ile ${Math.max(...SERVIS.map(aralik))} gun arasinda\n`);

const yy = gen([32, 12, 12, 17, 11]);
console.log(yy(['yol', 'ilk kopya', 'son kopya', 'acik kopya-gun', 'acik pay']));
for (const y of YOLLAR) {
  const g = SERVIS.map((s) => ilk(y, s)[0]);
  console.log(yy([y, Math.min(...g).toFixed(2), Math.max(...g).toFixed(2), acik(y).toFixed(1),
    `%${(100 * acik(y) / (kopya * PENCERE)).toFixed(1)}`]));
}

const ys = gen([16, 8, 10, 14, 15]);
console.log('\n' + ys(['servis', 'kopya', 'aralik', 'yama dayanir', 'insa ilk gun']));
for (const s of SERVIS) {
  const [b, e] = ilk('yerinde yama', s);
  console.log(ys([s[0], s[1], aralik(s).toFixed(2), (e - b).toFixed(2),
    ilk('kod degisikligiyle yeniden insa', s)[0].toFixed(2)]));
}
const dayan = SERVIS.reduce((a, s) => { const [b, e] = ilk('yerinde yama', s); return a + s[1] * (e - b); }, 0) / kopya;
console.log(`yerinde yama kopya agirlikli ortalama ${dayan.toFixed(2)} gun dayaniyor; ${PENCERE} gunde ` +
  `korumali gecen sure %${(100 * SERVIS.reduce((a, s) => a + s[1] * koruma('yerinde yama', s), 0) / (kopya * PENCERE)).toFixed(1)}`);
```

```
9 servis, 31 kopya, haftada 18 surum; dagitim araligi 1.40 ile 14 gun arasinda

yol                                ilk kopya   son kopya   acik kopya-gun   acik pay
yerinde yama                            5.25        5.25            676.6      %72.8
kod degisikligiyle yeniden insa         1.65       14.25            180.6      %19.4
zamanlanmis yeniden insa                1.75        1.75             54.3       %5.8

servis             kopya    aralik  yama dayanir   insa ilk gun
portal-onu             6      1.40          0.35           1.65
abone-servisi          4      1.75          1.75           2.00
faturalama             3      2.33          1.75           2.58
is-emri                3      3.50          1.75           3.75
bildirim               2      7.00          1.75           7.25
rapor                  2      7.00          1.75           7.25
sayac-toplama          6      7.00          1.75           7.25
dogrulayici            3     14.00          8.75          14.25
saha-senkron           2     14.00          8.75          14.25
yerinde yama kopya agirlikli ortalama 2.61 gun dayaniyor; 30 gunde korumali gecen sure %27.2
```

Üst tablonun ilk iki sütunu yerinde yamayı en iyi seçenek gibi gösteriyor: filonun tamamı beş virgül
iki beş günde kapanıyor, çünkü yama bütün kopyalara aynı bakım penceresinde uygulanıyor. Kod
değişikliğine bağlı yeniden inşanın son kopyası ise on dört virgül iki beş günde kapanıyor.

Üçüncü sütun kararı tersine çeviriyor. Otuz günlük pencerede yerinde yama altı yüz yetmiş altı
virgül altı kopya-gün açık bırakıyor (filonun yüzde yetmiş iki virgül sekizi), yeniden inşa yüz
seksen virgül altı kopya-gün (yüzde on dokuz virgül dört). Aynı yama, aynı filo, aynı otuz gün:
**ilk kapatmayı üç kat hızlı yapan yol, açık kalan süreyi dört kat büyütüyor.**

## Yamanın Dayanmadığı Yer

Alt tablo bunun nedenini servis servis yazıyor. Yerinde yama görüntüye yazılmadığı için bir sonraki
dağıtım yamasız görüntüyü geri getiriyor; yamanın ne kadar dayanacağı bu yüzden yamanın kendisine
değil, **servisin dağıtım sıklığına** bağlı.

Sıralama beklenenin tersidir. Portal önü iki günde birden sık dağıtılıyor ve yaması sıfır virgül
otuz beş gün, yani sekiz saatten kısa dayanıyor: altı kopyalı ve kenarda duran servis, filonun
yamayı en çabuk kaybeden servisidir. Doğrulayıcı ile saha senkronu iki haftada bir dağıtıldığı için
yamayı sekiz virgül yetmiş beş gün taşıyor. Yerinde yamanın en iyi çalıştığı yer, en az dağıtılan ve
genellikle en az açık trafiğe bakan servistir.

Kopya ağırlıklı ortalama iki virgül altı bir gündür; otuz günün yalnız yüzde yirmi yedi virgül ikisi
korumalı geçiyor ve haftalık bakım penceresi tekrarlansa da tablo değişmiyor, çünkü pencere haftada
bir, dağıtım bazı servislerde günde birden sık. Zamanlanmış yeniden inşa sütunu ise dokuz servis
için de aynı sayıyı taşıyor: bir virgül yetmiş beş gün. Tetikleyici temel görüntünün değişmesidir,
servisin kod değişikliği değil; dağıtım sıklığı denklemden çıkıyor.

## Kesintinin Fiyatı

```js
// kosum2.mjs — yeniden insanin getirdigi kesinti ve calisma zamani katmaninin tuttugu pencere
import { SERVIS, YOLLAR, PENCERE, HAZIR, kopya, acik, gen } from './guncelleme.mjs';

const yk = gen([8, 9, 15, 17, 18]);
console.log(yk(['kopya', 'servis', 'pencere (sn)', 'kapasite kaybi', 'haftalik yeniden']));
for (const k of [...new Set(SERVIS.map((s) => s[1]))].sort((a, b) => b - a)) {
  const g = SERVIS.filter((s) => s[1] === k);
  console.log(yk([k, g.length, k * HAZIR, `%${(100 / k).toFixed(1)}`, g.reduce((a, s) => a + s[1] * s[2], 0).toFixed(1)]));
}
const mevcut = SERVIS.reduce((a, s) => a + s[1] * s[2], 0), ek = (3 / 4) * kopya;
const sirali = SERVIS.map((s) => [s[0], s[1] * s[2]]).sort((a, b) => b[1] - a[1]);
console.log(`filo penceresi: dokuz servis paralel ${(Math.max(...SERVIS.map((s) => s[1])) * HAZIR / 60).toFixed(2)} dk, ` +
  `sirayla ${(kopya * HAZIR / 60).toFixed(2)} dk; en cok yeniden baslayan ${sirali[0][0]} (${sirali[0][1]}/hafta), ` +
  `en az ${sirali[8][0]} (${sirali[8][1]}/hafta)`);
console.log(`haftalik kopya yeniden baslatmasi ${mevcut.toFixed(1)}; zamanlanmis yeniden insa (ayda 3 temel ` +
  `goruntu) ${ek.toFixed(2)} ekler: %${(100 * ek / mevcut).toFixed(1)} artis. Yerinde yama sifir yeniden ` +
  `baslatma ekler, karsiliginda ayda 4 bakim penceresi ve ${4 * kopya} kopya dokunusu ister`);

// Yalniz calisma zamaninda durdurulabilen sinif: yamasi cikmamis bilesen acigi, gunde 40 istek
// (bu kursun ilk dersinden). Yama gecikmesi, o sinifi tutan agin genisligidir.
const GUNLUK = 40, ya = gen([32, 16, 22, 15]);
console.log('\n' + ya(['yol', 'acik filo-gun', 'aginin tuttugu istek', 'en iyiye kat']));
const enIyi = acik('zamanlanmis yeniden insa') / kopya;
for (const y of YOLLAR) {
  const g = acik(y) / kopya;
  console.log(ya([y, g.toFixed(2), Math.round(g * GUNLUK), `${(g / enIyi).toFixed(1)}x`]));
}
console.log(`otuz gunluk pencerede toplam ${PENCERE * GUNLUK} istek gelir`);
```

```
kopya      servis   pencere (sn)   kapasite kaybi  haftalik yeniden
6               2            270            %16.7              36.0
4               1            180            %25.0              16.0
3               3            135            %33.3              16.5
2               3             90            %50.0               5.0
filo penceresi: dokuz servis paralel 4.50 dk, sirayla 23.25 dk; en cok yeniden baslayan portal-onu (30/hafta), en az saha-senkron (1/hafta)
haftalik kopya yeniden baslatmasi 73.5; zamanlanmis yeniden insa (ayda 3 temel goruntu) 23.25 ekler: %31.6 artis. Yerinde yama sifir yeniden baslatma ekler, karsiliginda ayda 4 bakim penceresi ve 124 kopya dokunusu ister

yol                                acik filo-gun  aginin tuttugu istek   en iyiye kat
yerinde yama                               21.83                   873          12.5x
kod degisikligiyle yeniden insa             5.83                   233           3.3x
zamanlanmis yeniden insa                    1.75                    70           1.0x
otuz gunluk pencerede toplam 1200 istek gelir
```

Zamanlanmış yeniden inşanın bedeli haftalık kopya yeniden başlatmasının yetmiş üç virgül beşten
doksan altı virgül yetmiş beşe çıkmasıdır: yüzde otuz bir virgül altı artış. Bu artış eşit
dağılmıyor. Portal önü zaten haftada otuz kez yeniden başlıyor ve ek yükü fark etmez; saha senkronu
haftada bir kez yeniden başlarken üstüne bir buçuk kat ekleniyor. Yük **en az dağıtılan servislere**
biniyor ve o servisler yamayı en uzun taşıyan servislerdi.

Kapasite kaybı sütunu ikinci bedeli veriyor. Kademeli dağıtımda aynı anda bir kopya kapalıysa altı
kopyalı serviste kayıp yüzde on altı virgül yedi, iki kopyalı serviste yüzde ellidir. Üç servis her
turda doksan saniye boyunca kapasitesinin yarısıyla koşuyor; dokuz servis paralel dağıtılırsa filo
dört buçuk dakikada dönüyor. Asıl karar bu dakikaların kabul edilebilir olup olmadığıdır ve bu soru
yama gecikmesinden ayrı sorulamaz.

## Ağın Genişliği

Alt tablo kursun bütün ölçümünü tek bir sayıya bağlıyor. İlk derste, uygulama katmanı güvenlik
duvarının durdurduğu altı yüz altmış altı isteğin yalnız kırkı — yüzde altısı — daha erken bir
aşamada kapatılamayan sınıftı: bileşende yaması çıkmamış bir açık, günde kırk istek, yamanın
gelmesini bekliyor.

Yama gecikmesi tam olarak o ağın gerilmek zorunda olduğu süredir. Zamanlanmış yeniden inşada çalışma
zamanı katmanı yetmiş isteği tek başına tutuyor; kod değişikliğine bağlı yeniden inşada iki yüz otuz
üç, yerinde yamada sekiz yüz yetmiş üç — on iki buçuk kat. Aynı kural kümesi, aynı eşik; değişen tek
şey arkasındaki güncelleme yolu. Çalışma zamanı savunmasının değeri kural kümesinin kalitesiyle
değil, **arkasındaki kalemin ne kadar süre açık kaldığıyla** ölçülür.

## Özet

- Üç yolda son kopyanın kapanma günü 5,25 / 14,25 / 1,75'tir; otuz günlük açık kopya-gün 676,6 /
  180,6 / 54,3, yani yüzde 72,8 / 19,4 / 5,8.
- Yerinde yama ilk kapatmayı en hızlı yapar ama görüntüye yazılmadığı için bir sonraki dağıtımda
  düşer; koruma kopya ağırlıklı ortalama 2,61 gün dayanır. En sık dağıtılan servis yamayı 0,35
  günde kaybeder, en seyrek dağıtılan 8,75 gün taşır.
- Zamanlanmış yeniden inşa dokuz servisi de 1,75 günde kapatır: tetikleyici temel görüntünün
  değişmesidir ve dağıtım sıklığı denklemden çıkar.
- Bedeli haftalık kopya yeniden başlatmasının 73,5'ten 96,75'e çıkmasıdır (yüzde 31,6) ve yük en az
  dağıtılan servislere biner; iki kopyalı üç servis her turda 90 saniye boyunca kapasitesinin
  yarısıyla koşar.
- Yalnız çalışma zamanında durdurulabilen sınıf günde 40 istektir; katmanın tek başına tuttuğu istek
  70 / 233 / 873'tür. Yama gecikmesini kısaltmak katmanın yükünü kural yazmadan 12,5 kat azaltır.

## Kurs Kapanışı

| Ders | Katmanın yakaladığı | Kaçırdığı / yanlış kestiği | Daha erken kapatma aşaması |
|---|---|---|---|
| Güvenlik duvarı | 666 kötü istek/gün | 1.460 kaçan, eşik 3'te 8.000 kesilen | 626 kod, yalnız burada 40 |
| Hız sınırlama | 5.760 istek (kayan pencere) | 6.900 kaçan, 880 meşru tepe | 3.910 burada, gerisi kod ve tasarım |
| Doldurma savunması | 5.512 deneme, 13 ele geçirme | doldurmada 0 engel, 91 hesap kilidi | kod 70'ten 5'e, tasarım 0 |
| Güvenlik başlıkları | 55 hücre, isteğin %63,4'ü | 3 uç dışarıda, 24 hücre etkisiz | 3 başlık kod, 3 başlık burada |
| Anormallik tespiti | 3 kötü oturum (eşik 20) | 2/4 meşru işaret, 7.106 kayıt | 1 kod, 1 tasarım, 1'i için yok |
| Sır deposu | 31 kullanılan kalem | 48 karşılıksız kalem (%61) | dağıtım bildirimi, 9 kat ucuz |
| Kısa ömürlü kimlik | 16 kalemde 2.033 kat | 15 kalem sabit, maruziyetin %99,96'sı | tasarım, 8 sır |
| Anahtar döndürme | asgari örtüşmede 0 kesme | 60 dakikada 87.427 kesilen istek | kod, 1.440'tan 240 dakikaya |
| İş yükü kimliği | 20 statik sır kalkıyor | 11 kalem kalıyor, 7 uygulama sırlı | tasarım, 4 geçidin 3'ü |
| Sızıntı müdahalesi | erken iptal 150.934 çağrı | 224.171 çağrı, 68.503 kesilen istek | yapı, 2.880 dakika gecikme |
| Ağ bölütleme | 35 çift kapanır, 7,1'den 4,1'e | depoya 1'den 2 sıçrama, 3,8 çift kesinti | tasarım, çağrı sözleşmesi |
| Çalışma zamanı tespiti | 21 olayın 12'si | 9 kaçan, 4 yanlış pozitif | 9 olay yapı, yalnız burada 3 |
| Kabul denetleyicisi | 22 kusur, ilk 6 kural 19'u | 5 meşru ret, 5/5 ekip | 19 hat kapısı, yalnız burada 3 |
| Yapılandırma denetimi | 107 bulguya sahip bulunur | 40 sahipsiz, 12 haftada 112 | 122 daha erken, 25'i için yok |
| Yeniden inşa | son kopya 1,75 günde | %5,8 açık, +%31,6 yeniden başlatma | yapı, temel görüntü |

Üçüncü sütun bu kursun kuralıdır. On beş dersin hiçbirinde çalışma zamanı katmanı yakaladığı hacmin
tamamına sahip çıkamadı: güvenlik duvarının durdurduğu her yüz istekten doksan dördü kodda, kabul
denetleyicisinin kapattığı yirmi iki kusurun on dokuzu hat kapısında, sürekli denetimin bulduğu yüz
kırk yedi bulgunun yüz yirmi ikisi daha erken bir aşamada kapatılabilirdi. Katmanın kendi payı her
derste küçük ve her derste gerçektir — kırk istek, üç olay, üç kusur, yirmi beş sahipsiz bulgu.
**Çalışma zamanı savunması bir yama değil, daha erken kapatılamayan kalem için gerilen bir ağdır.**
Her kalem için "bu daha ucuza nerede kapanırdı" sorusu sorulmadığında katman bir savunma olmaktan
çıkıp bir bahaneye dönüşür: gösterge tablosundaki büyük sayı, kapatılmamış bir kod kusurunun her gün
yeniden yakalanmasından başka bir şey olmaz.

İkinci sütun da aynı ısrarla okunmalıdır. Yanlış kesilen sekiz bin istek, kilitlenen doksan bir
hesap, reddedilen beş meşru dağıtım, döndürmede kesilen seksen yedi bin dört yüz yirmi yedi istek —
bunlar katmanın yan etkisi değil, fiyatıdır. Yanlış pozitifi yazılmayan bir çalışma zamanı savunması
ölçülmemiş sayılır.

Bir sonraki kurs — **M25/K05 Tespit, Müdahale ve Uyumluluk** — bu tablonun cevaplamadığı soruyu
alıyor. Katmanlar kuruldu ve neyi kaçırdıkları tek tek yazıldı; ama kaçırılanın kaçırıldığını
**hangi kaydın** göstereceği hiç sorulmadı. İhlal gerçekleştiğinde kimin ne yapacağı ve bütün bu
pratiğin bir denetimde nasıl kanıtlanacağı da sorulmadı. Ölçülmüş bir savunma, olay anında
okunabilir bir kayıt ve dışarıdan doğrulanabilir bir kanıt bırakmadığı sürece yalnızca kendi
tablosunda doğrudur.
