---
title: 'Sunucusuz Güvenlik'
source: 'https://academia.sh/tr/kurslar/bulut-guvenligi/sunucusuz-guvenlik'
course: 'Bulut ve Sanallaştırma Güvenliği'
language: tr
updated: '2026-08-17T18:08:34+00:00'
license: 'CC BY-SA 4.0'
---

# Sunucusuz Güvenlik

Kısa ömürlü iş yüklerinde kanıtın toplanabildiği pencerenin ölçülmesi: 400 çağrının ortanca ömrü 447 ms, uyarıya bağlı elle toplama 400 çağrının hiçbirine, otomatik toplama 15'ine yetişiyor. Ortam içinden sürekli akıtma 3.600 kanıt kaleminin 3.541'ini alıyor; 60 saniyelik tutma aynı sonucu çalışma süresinin 34 katı ortam-saniyeyle veriyor. Kimliğin geçerlilik süresi ise ömrün 8.054 katıdır ve açık kalem-saniyenin yüzde yüzü iş yükü sonlandıktan sonra geçiyor.

Önceki dersin bütün ölçümü iş yükünün **ayakta** olduğunu varsaydı: konakta duruyordu, kimliği
kullanılabiliyordu, komşusu sayılabiliyordu. Bir iş yükü sınıfı bu varsayımı sağlamaz. Bir işlev
çalıştırma ortamında iş yükü yüz milisaniye ile birkaç saniye arasında yaşar, işi biter ve ortam
geri alınır. Uyarı geldiğinde bakılacak bir süreç, açılacak bir kabuk ve imajı alınacak bir disk
yoktur.

Bu dersin ölçtüğü şey o yüzden **penceredir**: iş yükü kaç saniye yaşıyor ve kanıt kalemlerinin
kaçı, o pencere kapanmadan toplanmazsa geri gelmiyor. Kısa ömürlü iş yüklerinin çalışma zamanı
kısıtları, soğuk başlangıç ve ölçekleme davranışı **Sunucusuz ve Kenar Bilişim** kursunda ölçüldü;
burada tekrarlanmaz. Ölçüm **bölgesel ölçüm ağı** üzerindedir, **kurgudur** ve `node` ile yazılmış bir
**modeldir**; üreteç kendi yazılmıştır, tohum çıktıda görünür.

**BT19.** Model 400 çağrıdan oluşur; ömürler üç banttan üretilir ve milisaniye cinsindendir (kurgu).
**BT20.** Dokuz kanıt kalemi üç sınıfa ayrılır: beşi yalnız iş yükü **yaşarken** alınabilir, üçü
**sonradan** da alınabilir, biri iş yükünün kendi kaydıdır ve ancak sonlanmadan önce
**boşaltılmışsa** teslim edilir.
**BT21.** Toplama gecikmesi $T$, uyarıdan toplamanın başlamasına kadar geçen süredir; tutma $H$,
çağrı bittikten sonra ortamın canlı bırakıldığı süredir.
**BT22.** Yaşarken alınabilen kalemler ancak $T < \text{ömür} + H$ ise toplanır.
**BT23.** Her çağrı kendi kısa ömürlü kimliğini alır; belirtecin geçerlilik süresi $V$ saniyedir
(kurgu).
**BT24.** Açık kalem-saniye, kimliğin eriştiği kalem sayısı ile belirtecin geçerli kaldığı sürenin
çarpımıdır. Erişilen kalem sayısı birinci dersteki yürüyüşten alınmıştır.

## Kanıtın Toplanabildiği Pencere

```js
// omur.mjs — kisa omurlu is yuklerinde kanitin toplanabildigi pencere. MODELDIR.
// Bolgesel olcum agi KURGUDUR. Uretec kendi yazilmistir; tohum asagida gorunur.
export const TOHUM = 20260805;
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };

// Kanit kalemi: ad|sinif. yasarken: is yuku ayaktayken alinabilir; sonradan: sonra da alinabilir;
// bosaltma: is yukunun kendi kaydi, ancak sonlanmadan once bosaltilmissa teslim edilir.
export const KANIT = `
  bellek-icerigi|yasarken          surec-listesi|yasarken
  acik-baglanti|yasarken           ortam-degiskeni-degeri|yasarken
  gecici-dosya|yasarken            cagri-ust-verisi|sonradan
  yonetim-duzlemi-kaydi|sonradan   islev-surumu|sonradan
  islev-kendi-kaydi|bosaltma`.trim().split(/\s{2,}|\n/).map((x) => x.trim().split("|"))
  .map(([ad, sinif]) => ({ ad, sinif }));

const r = uretec(TOHUM);
// 400 cagri: omur milisaniye cinsinden, uc bant. Bosaltma bayragi kaydin teslim edilip
// edilmedigini soyler (kurgu oran).
export const CAGRI = Array.from({ length: 400 }, () => {
  const u = r();
  const omur = u < 0.72 ? 80 + Math.floor(r() * 520)
    : u < 0.94 ? 600 + Math.floor(r() * 3400)
    : 4000 + Math.floor(r() * 41000);
  return { omur, bosaltildi: r() > 0.14 };
});

export const YASARKEN = KANIT.filter((k) => k.sinif === "yasarken").length;
export const SONRADAN = KANIT.filter((k) => k.sinif === "sonradan").length;

// Bir ayarda kac kanit kalemi toplaniyor. T: toplama gecikmesi (ms), H: cagri sonrasi tutma (ms).
export function topla(T, H) {
  let canli = 0, kalem = 0;
  for (const c of CAGRI) {
    const pencere = c.omur + H;
    if (T < pencere) { canli++; kalem += YASARKEN; }
    kalem += SONRADAN + (c.bosaltildi ? 1 : 0);
  }
  return { canli, kalem, tam: CAGRI.length * KANIT.length,
    ortamSaniye: Math.round((CAGRI.length * H) / 1000) };
}

const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))
  .join("");

if (import.meta.url === `file://${process.argv[1]}`) {
  const sirali = [...CAGRI].map((c) => c.omur).sort((a, b) => a - b);
  const yuzde = (p) => sirali[Math.floor(p * sirali.length)];
  console.log(`model (tohum ${TOHUM}): ${CAGRI.length} cagri, ${KANIT.length} kanit kalemi ` +
    `(${YASARKEN} yasarken, ${SONRADAN} sonradan, 1 bosaltmaya bagli)`);
  console.log(`omur (ms): ortanca ${yuzde(0.5)}, %90 ${yuzde(0.9)}, %99 ${yuzde(0.99)}, ` +
    `en uzun ${sirali.at(-1)}; toplam yasam ${Math.round(sirali.reduce((a, b) => a + b) / 1000)} sn`);

  const yz = gen([30, 10, 10, 18, 16, 18]);
  console.log("\n" + yz(["ayar", "gecikme", "tutma", "kanit alinabilen", "toplanan kalem",
    "bedel"]));
  const AYAR = [
    ["uyari + elle toplama", 300000, 0, "-"],
    ["otomatik toplama", 10000, 0, "-"],
    ["otomatik toplama + tutma", 10000, 60000, "ortam-saniye"],
    ["otomatik toplama + uzun tutma", 2000, 300000, "ortam-saniye"],
    ["ortam icinden surekli akitma", 0, 0, "cagri basina 8 ms"],
  ];
  for (const [ad, T, H, bedel] of AYAR) {
    const s = topla(T, H);
    console.log(yz([ad, `${T / 1000} sn`, `${H / 1000} sn`,
      `${s.canli}/${CAGRI.length} cagri`, `${s.kalem}/${s.tam}`,
      H ? `${s.ortamSaniye} ortam-sn` : bedel]));
  }

  const elle = topla(300000, 0), oto = topla(10000, 0), akit = topla(0, 0);
  console.log(`\nelle toplama ${elle.canli}/${CAGRI.length} cagride yetisiyor, otomatik toplama ` +
    `${oto.canli}/${CAGRI.length}; ikisi arasindaki fark ${oto.kalem - elle.kalem} kalem`);
  console.log(`ortam icinden akitma ${akit.canli}/${CAGRI.length} cagriya yetisir ve ` +
    `${akit.kalem}/${akit.tam} kalem toplar: eksik kalan ${akit.tam - akit.kalem} kalem, ` +
    `sonlanmadan once bosaltilmamis kendi kaydidir`);
  const tut = topla(10000, 60000);
  console.log(`60 sn tutma kanit alinabilen cagriyi ${oto.canli} -> ${tut.canli} cikariyor; ` +
    `bedeli ${tut.ortamSaniye} ortam-saniyedir, yani calisma suresinin ` +
    `${Math.round(tut.ortamSaniye / (sirali.reduce((a, b) => a + b) / 1000))} kati`);
}
```

```
model (tohum 20260805): 400 cagri, 9 kanit kalemi (5 yasarken, 3 sonradan, 1 bosaltmaya bagli)
omur (ms): ortanca 447, %90 3249, %99 29130, en uzun 40604; toplam yasam 703 sn

ayar                             gecikme     tutma  kanit alinabilen  toplanan kalem             bedel
uyari + elle toplama              300 sn      0 sn       0/400 cagri       1541/3600                 -
otomatik toplama                   10 sn      0 sn      15/400 cagri       1616/3600                 -
otomatik toplama + tutma           10 sn     60 sn     400/400 cagri       3541/3600    24000 ortam-sn
otomatik toplama + uzun tutma       2 sn    300 sn     400/400 cagri       3541/3600   120000 ortam-sn
ortam icinden surekli akitma        0 sn      0 sn     400/400 cagri       3541/3600 cagri basina 8 ms

elle toplama 0/400 cagride yetisiyor, otomatik toplama 15/400; ikisi arasindaki fark 75 kalem
ortam icinden akitma 400/400 cagriya yetisir ve 3541/3600 kalem toplar: eksik kalan 59 kalem, sonlanmadan once bosaltilmamis kendi kaydidir
60 sn tutma kanit alinabilen cagriyi 15 -> 400 cikariyor; bedeli 24000 ortam-saniyedir, yani calisma suresinin 34 kati
```

Ortanca çağrı 447 milisaniye yaşıyor; çağrıların onda dokuzu 3,2 saniyenin altında bitiyor. Bu
dağılımda uyarıya bağlı elle toplama — beş dakikalık bir gecikmeyle — 400 çağrının **hiçbirine**
yetişmiyor. Sıfır. Otomatik toplama gecikmeyi on saniyeye indirdiğinde 15 çağrıya yetişiyor, yani
%3,75'ine; kazandırdığı 75 kanıt kalemi, toplam 3.600 kalemin %2'sinden azdır.

## Yetişilemeyen Kalem

Sayının bu kadar sert olması, gecikmenin kısaltılmasıyla düzelen bir sorun olmadığını gösteriyor.
On saniyelik gecikme zaten hızlı bir tepkidir ve yine de çağrıların %96'sını kaçırıyor; iki
saniyeye inmek de yetmez, çünkü ortanca ömür yarım saniyedir. **Toplama gecikmesini kısaltmak bu
iş yükü sınıfında çalışmayan bir kaldıraçtır.**

Birinci dersteki kör önek burada başka bir biçime giriyor. Orada kaydın gecikmesi yürüyüşün ilk
adımlarını görünmez kılıyordu ama adımlar sonradan kayıtta duruyordu; burada gecikme, kanıtın
**hiç var olmamasına** yol açıyor. Uyarının 5 dakika sonra gelmesi kaydı geciktirmiyor, toplanacak
şeyi ortadan kaldırıyor. Toplanan 1.541 kalem yalnızca sonradan da alınabilen üç sınıftan ve
boşaltılmış kendi kayıtlarından geliyor; yaşarken alınabilen 2.000 kalemin tamamı kayıp.

Çalışan iki kaldıraç var ve ikisi de pencereyi uzatmıyor, pencereyi **kaldırıyor.** Birincisi
tutmadır: çağrı bittikten sonra ortam altmış saniye canlı bırakılırsa kanıt alınabilen çağrı
15'ten 400'e çıkıyor ve toplanan kalem 1.616'dan 3.541'e. Bedeli 24.000 ortam-saniyedir — 400
çağrının toplam çalışma süresi 703 saniyeyken, tutma **34 katı** kadar ortam-saniye tüketiyor.
Üstelik tutmayı 300 saniyeye çıkarmak hiçbir ek kalem getirmiyor ve bedeli 120.000 ortam-saniyeye
çıkarıyor: aynı sonucun beş katı fiyatı.

İkincisi ortam içinden sürekli akıtmadır: yaşarken alınabilen kalemler, iş yükü koşarken dışarı
yazılır. Aynı 3.541 kalemi çağrı başına 8 milisaniyelik ek gecikmeyle veriyor. Eksik kalan 59
kalem her üç ayarda da aynıdır ve tek bir sınıftan gelir — sonlanmadan önce boşaltılmamış kendi
kaydı. Onu ne tutma ne akıtma kurtarır; kaydın sonlanmadan önce boşaltılmasını **iş yükünün kendisi**
yapmak zorundadır.

## Yarıçap Penceresi Kanıt Penceresinden Uzun

```js
// belirtec.mjs — is yukunun omru ile aldigi kimligin gecerlilik suresi karsilastirilir. MODELDIR.
import { CAGRI } from "./omur.mjs";

// Kimligin eristigi kalem sayisi, birinci derste kosturulan yuruyusten alinmistir: MODEL girdisi.
const ERISIM = { toplama: 5, daraltilmis: 2 };
const TOPLAM_OMUR = CAGRI.reduce((t, c) => t + c.omur, 0) / 1000;   // saniye

// Bir ayarda acik kalem-saniye: her cagri icin kalem sayisi x belirtecin gecerli kaldigi sure.
// Iptal secenegi belirteci is yuku sonlanir sonlanmaz gecersiz kilar.
function olc({ V, iptal = false, dar = false }) {
  const kalem = ERISIM[dar ? "daraltilmis" : "toplama"];
  let acik = 0, oluAcik = 0;
  for (const c of CAGRI) {
    const sure = iptal ? c.omur / 1000 : V;
    acik += kalem * sure;
    oluAcik += kalem * Math.max(0, sure - c.omur / 1000);
  }
  return { acik: Math.round(acik), oluAcik: Math.round(oluAcik), kalem,
    pay: `%${Math.round(100 * oluAcik / acik)}` };
}

const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))
  .join("");
const yz = gen([32, 12, 8, 18, 10, 28]);

console.log(`${CAGRI.length} cagri, toplam calisma ${TOPLAM_OMUR.toFixed(0)} sn; her cagri ` +
  `kendi kisa omurlu kimligini aliyor`);
console.log("\n" + yz(["ayar", "gecerlilik", "kalem", "acik kalem-saniye", "olu pay", "bedel"]));
const AYAR = [
  ["varsayilan belirtec", { V: 3600 }, "yok"],
  ["gecerlilik 900 sn", { V: 900 }, "yenileme 4 kat"],
  ["gecerlilik 300 sn", { V: 300 }, "yenileme 12 kat"],
  ["is yuku bitince iptal", { V: 3600, iptal: true }, `${CAGRI.length} iptal cagrisi`],
  ["iptal + daraltilmis kimlik", { V: 3600, iptal: true, dar: true }, "1 mesru is yeniden yazilir"],
];
for (const [ad, a, bedel] of AYAR) {
  const s = olc(a);
  console.log(yz([ad, a.iptal ? "omur kadar" : `${a.V} sn`, s.kalem, s.acik, s.pay, bedel]));
}

const varsayilan = olc({ V: 3600 }), iptalli = olc({ V: 3600, iptal: true });
const dar = olc({ V: 3600, iptal: true, dar: true });
const ortanca = [...CAGRI].map((c) => c.omur).sort((a, b) => a - b)[CAGRI.length >> 1];
console.log(`\nkanit penceresi ile yaricap penceresi ayni olcekte degil: ortanca cagri ` +
  `${ortanca} ms yasiyor, aldigi belirtec 3600 sn gecerli — ` +
  `${Math.round(3600000 / ortanca)} kat`);
console.log(`varsayilan ayarda acik kalem-saniyenin ${varsayilan.pay}'i is yuku sonlandiktan ` +
  `SONRA gecen suredir; gecerliligi 300 sn yapmak bu payi ${olc({ V: 300 }).pay} yapiyor`);
console.log(`is yuku bitince iptal acik kalem-saniyeyi ${varsayilan.acik} -> ${iptalli.acik} ` +
  `indiriyor, yani ${Math.round(varsayilan.acik / iptalli.acik)} kat; bedeli cagri basina bir ` +
  `iptal cagrisidir`);
console.log(`kimligi daraltmak (5 -> 2 kalem) ayni pencereyi ${iptalli.acik} -> ${dar.acik} ` +
  `indiriyor; iki denetim carpim halinde calisir, toplam ` +
  `${Math.round(varsayilan.acik / dar.acik)} kat`);
```

```
400 cagri, toplam calisma 703 sn; her cagri kendi kisa omurlu kimligini aliyor

ayar                              gecerlilik   kalem acik kalem-saniye   olu pay                       bedel
varsayilan belirtec                  3600 sn       5           7200000      %100                         yok
gecerlilik 900 sn                     900 sn       5           1800000      %100              yenileme 4 kat
gecerlilik 300 sn                     300 sn       5            600000       %99             yenileme 12 kat
is yuku bitince iptal             omur kadar       5              3514        %0           400 iptal cagrisi
iptal + daraltilmis kimlik        omur kadar       2              1405        %0  1 mesru is yeniden yazilir

kanit penceresi ile yaricap penceresi ayni olcekte degil: ortanca cagri 447 ms yasiyor, aldigi belirtec 3600 sn gecerli — 8054 kat
varsayilan ayarda acik kalem-saniyenin %100'i is yuku sonlandiktan SONRA gecen suredir; gecerliligi 300 sn yapmak bu payi %99 yapiyor
is yuku bitince iptal acik kalem-saniyeyi 7200000 -> 3514 indiriyor, yani 2049 kat; bedeli cagri basina bir iptal cagrisidir
kimligi daraltmak (5 -> 2 kalem) ayni pencereyi 3514 -> 1405 indiriyor; iki denetim carpim halinde calisir, toplam 5125 kat
```

Tablo dersin asıl sayısını veriyor. İş yükü 447 milisaniye yaşıyor, aldığı belirteç 3.600 saniye
geçerli: **8.054 kat**. Kanıt penceresi milisaniyeyle ölçülürken yarıçap penceresi saatle ölçülüyor
ve ikisi aynı olayın iki yüzü. Varsayılan ayarda açık kalem-saniyenin tamamına yakını — yuvarlanmış
haliyle yüzde yüzü — iş yükü **sonlandıktan sonra** geçen süredir. Ortada koşan bir şey yokken
geçerli bir kimlik bilgisi duruyor.

## İki Pencerenin Ayrılması

Geçerlilik süresini kısaltmak doğru yönde ama yavaş bir kaldıraçtır: 3.600 saniyeden 300 saniyeye
inmek açık kalem-saniyeyi on iki kat düşürüyor, ölü payı ise %100'den ancak %99'a iniyor ve
karşılığında belirteç yenileme sayısı on iki katına çıkıyor. Oran değişmiyor çünkü sorun sürenin
uzunluğu değil, sürenin iş yükünün ömrüne bağlı olmamasıdır.

Bağlamak işe yarıyor. İş yükü sonlanır sonlanmaz belirtecin iptal edilmesi açık kalem-saniyeyi
7.200.000'den 3.514'e indiriyor — **2.049 kat** — ve ölü payı sıfırlıyor. Bedeli çağrı başına bir
iptal çağrısıdır, yani günde 400 ek yönetim düzlemi çağrısı. Son satır ikinci kaldıracı ekliyor:
kimliğin eriştiği kalem sayısını 5'ten 2'ye indirmek pencereyi 1.405'e çekiyor. İki denetim
**çarpım halinde** çalışıyor; birlikte 5.125 kat. Bedeli bir meşru işin yeniden yazılmasıdır.

Dersin iki tablosu böylece aynı cümleye çıkıyor: kısa ömürlü iş yükünde kanıt penceresi kendiliğinden
kapanır, yarıçap penceresi kendiliğinden kapanmaz. Birincisini açık tutmak için ödeme yapılır,
ikincisini kapatmak için karar verilir.

## Özet

- 400 çağrının ortanca ömrü 447 ms, %90'ı 3,2 saniyenin altında; dokuz kanıt kaleminin beşi yalnız
  iş yükü yaşarken alınabiliyor.
- Beş dakikalık gecikmeyle elle toplama 400 çağrının hiçbirine yetişmiyor; on saniyelik otomatik
  toplama 15'ine yetişiyor ve toplam 3.600 kalemin %2'sinden azını kazandırıyor.
- Ortamı 60 saniye tutmak kanıt alınabilen çağrıyı 400'e çıkarır ve 3.541 kalem toplar; bedeli
  24.000 ortam-saniye, yani toplam çalışma süresinin 34 katıdır ve 300 saniyeye çıkarmak hiçbir ek
  kalem getirmez.
- Ortam içinden sürekli akıtma aynı 3.541 kalemi çağrı başına 8 ms ek gecikmeyle verir; her üç
  ayarda da eksik kalan 59 kalem, sonlanmadan önce boşaltılmamış kendi kaydıdır.
- Belirtecin geçerlilik süresi ortanca ömrün 8.054 katıdır ve varsayılan ayarda açık kalem-saniyenin
  tamamına yakını iş yükü sonlandıktan sonra geçer.
- Süreyi kısaltmak oranı değiştirmez (300 saniyede ölü pay hâlâ %99); iş yükü bitince iptal
  pencereyi 2.049 kat, kimliği daraltmak birlikte 5.125 kat indirir.

## Sonraki Adım

Buraya kadar her ders tek bir yanlış kalemi seçip yarıçapını ölçtü: aşırı yetkili bir rol, açık bir
kova, tutulmayan bir ortam, uzun ömürlü bir belirteç. Bunlar tek tek ölçüldü ama birbirine nasıl
bağlandıkları yazılmadı. Sonraki ders bu bağları kalıp düzeyinde toplar: hangi kalem yanlışsa hangi
yol açılıyor, o yol boyunca hangi kayıt düşüyor ve hangi denetim yolu kapatıyor.
