---
title: 'Kenar Sınırları'
source: 'https://academia.sh/tr/kurslar/sunucusuz/kenar-sinirlari'
course: 'Sunucusuz ve Kenar Bilişim'
language: tr
updated: '2026-08-17T18:06:57+00:00'
license: 'CC BY-SA 4.0'
---

# Kenar Sınırları

Kenarın üç eşiği on iki işlik bir kümeye uygulanır; parçalamanın bedeli ek tur ve hata noktasıyla, kenarın kazandırmadığı üç durum sayıyla çıkarılır. Kurs kapanışı yirmi dersin devredilen kararını ve kısıtını toplar.

Bir önceki ders kaynaklara erişimi bildirimsel hâle getirdi. Sınanmayan bir şey kaldı: kenarda
**ne kadar iş yapılabileceği**. İstek işlendi, durum tutuldu, kuyruk kuruldu, kaynak bağlandı —
hepsinin kenara sığdığı varsayıldı. Bu ders üç eşiği bir iş kümesine uygular ve sığmayanı sığdırmanın
faturasını çıkarır.

Ölçüm **bölgesel ölçüm ağı** üzerindedir ve **kurgudur**; eşikler, iş kümesi ve kullanıcı grupları
`node` ile kurulmuş bir **modeldir** ve fiyatlar kurgu birimdir.

**KE37.** Üç eşik kurgudur: istek başına 50 ms işlem, 128 MB bellek, ve ilk derste sayılan eksik
arayüz kalemleri.
**KE38.** İş kümesi on iki iştir; her iş için işlem süresi, tepe bellek ve istenen kalemler yazılı.
**KE39.** Parçalanan iş eşiğin %80'ini kullanır; parçalar arasında ara durum depoya yazılır (64 ms)
ve okunur (2 ms). Hata noktası adım artı geçiş sayısıdır.
**KE40.** Uyumluluğa takılan iş parçalanamaz; merkeze düşer, kenar yalnız yönlendirir.
**KE41.** Altı kullanıcı grubu için uçta sonlanan ve doğrudan merkeze giden istek turu yazılıdır;
uçtan geçip merkeze giden istek ikisinin toplamını öder.
**KE42.** Sürekli sunucu aynı işi 0,55 katsayıyla yapar; işlevde soğuk oran %2, soğuk ek 900 ms'dir.

## Üç Eşik, On İki İş

```js
// sinir.mjs — kenar calisma zamaninin uc esigi ve kurgu is kumesi (model).
export const ESIK = { islem: 50, bellek: 128 };     // istek basina ms islem, MB bellek
export const YOK = ["dosya sistemi", "yerel disk", "uzun surec", "ham yuva", "ikili eklenti"];
export const ISLER = [                              // islem ms, bellek MB, istenen arayuz kalemleri
  { ad: "istek yonlendirme", islem: 3, bellek: 6 },
  { ad: "baslik duzenleme", islem: 2, bellek: 4 },
  { ad: "oturum dogrulama", islem: 9, bellek: 12 },
  { ad: "tarife arama", islem: 6, bellek: 22 },
  { ad: "okuma bicim cevirimi", islem: 18, bellek: 40 },
  { ad: "sayac imza dogrulama", islem: 34, bellek: 48 },
  { ad: "anomali esigi", islem: 62, bellek: 90 },
  { ad: "tuketim egrisi", islem: 140, bellek: 260 },
  { ad: "gunluk arsivleme", islem: 40, bellek: 96, ister: ["dosya sistemi", "yerel disk"] },
  { ad: "fatura belgesi", islem: 220, bellek: 180, ister: ["dosya sistemi", "ikili eklenti"] },
  { ad: "gecelik uzlastirma", islem: 40000, bellek: 700, ister: ["uzun surec", "dosya sistemi"] },
  { ad: "cihaz kalici baglantisi", islem: 5, bellek: 30, ister: ["ham yuva", "uzun surec"] },
];
export const PAY = 0.8;                             // parcanin kullanabildigi esik payi
export const ARA_SABIT = 20;                        // parca basina sabit bellek, MB
export const YAZMA = 64, OKUMA = 2, GERI_DUSUS = 60; // depoya yazma/okuma, kenar-bolge turu, ms

export function denetle(i) {                        // uc esik ayri ayri uygulanir
  const asan = [];
  if (i.islem > ESIK.islem) asan.push("sure");
  if (i.bellek > ESIK.bellek) asan.push("bellek");
  const eksik = (i.ister ?? []).filter((k) => YOK.includes(k));
  if (eksik.length) asan.push("uyumluluk");
  return { ...i, asan, eksik };
}
export function parcala(i) {                        // yalniz sure/bellek asan is parcalanabilir
  const kullanilabilir = ESIK.islem * PAY;
  const adim = Math.ceil(i.islem / kullanilabilir);
  const tepeBellek = Math.ceil(i.bellek / adim) + ARA_SABIT;
  return { adim, tepeBellek, ekTur: (adim - 1) * 2, ekSure: (adim - 1) * (YAZMA + OKUMA),
    hata: 2 * adim - 1 };
}
export const sut = (...s) => console.log(s.map((x, i) => String(x).padEnd(i ? 13 : 24)).join("").trimEnd());
```

```js
// esik.mjs — uc esik is kumesine uygulanir; kac is kenarda kosuyor ve parcalamanin bedeli nedir.
import { ESIK, YOK, ISLER, PAY, denetle, parcala, GERI_DUSUS, sut } from "./sinir.mjs";

console.log(`esikler: islem ${ESIK.islem} ms/istek, bellek ${ESIK.bellek} MB, ` +
  `kenarda olmayan arayuz kalemi ${YOK.length}\n`);
sut("is", "islem", "bellek", "eksik kalem", "sonuc");
const d = ISLER.map(denetle);
for (const i of d) sut(i.ad, `${i.islem} ms`, `${i.bellek} MB`, i.eksik.length,
  i.asan.length ? `${i.asan.join(" + ")} asiyor` : "kosar");
const say = (e) => d.filter((i) => i.asan.includes(e)).length;
const kosan = d.filter((i) => !i.asan.length);
console.log(`\n${ISLER.length} isten ${kosan.length} tanesi kenarda kosuyor; ` +
  `sure ${say("sure")}, bellek ${say("bellek")}, uyumluluk ${say("uyumluluk")} isi durduruyor ` +
  `(bir is birden cok esige takilabilir)\n`);

const bolunebilir = d.filter((i) => i.asan.length && !i.asan.includes("uyumluluk"));
const dusen = d.filter((i) => i.asan.includes("uyumluluk"));
sut("parcalanan is", "adim", "tepe bellek", "ek tur", "ek sure", "hata noktasi");
let ekTur = 0, ekSure = 0, hata = 0;
for (const i of bolunebilir) {
  const p = parcala(i);
  ekTur += p.ekTur; ekSure += p.ekSure; hata += p.hata;
  sut(i.ad, p.adim, `${p.tepeBellek} MB`, p.ekTur, `${p.ekSure} ms`, p.hata);
}
console.log(`\nparcalama ${bolunebilir.length} isi kenara sokuyor: esik payi %${PAY * 100}, ` +
  `toplam ${ekTur} ek tur, ${ekSure} ms ek sure, ${hata} hata noktasi (parcalanmadan is basina 1)`);
console.log(`parcalanamayan ${dusen.length} is merkeze duser (${dusen.map((i) => i.ad).join(", ")}); ` +
  `bedeli istek basina ${GERI_DUSUS} ms kenar-bolge turu, kenar yalniz yonlendirir`);
console.log(`son durum: ${kosan.length + bolunebilir.length}/${ISLER.length} kenarda, ` +
  `${dusen.length}/${ISLER.length} merkezde`);
```

```
esikler: islem 50 ms/istek, bellek 128 MB, kenarda olmayan arayuz kalemi 5

is                      islem        bellek       eksik kalem  sonuc
istek yonlendirme       3 ms         6 MB         0            kosar
baslik duzenleme        2 ms         4 MB         0            kosar
oturum dogrulama        9 ms         12 MB        0            kosar
tarife arama            6 ms         22 MB        0            kosar
okuma bicim cevirimi    18 ms        40 MB        0            kosar
sayac imza dogrulama    34 ms        48 MB        0            kosar
anomali esigi           62 ms        90 MB        0            sure asiyor
tuketim egrisi          140 ms       260 MB       0            sure + bellek asiyor
gunluk arsivleme        40 ms        96 MB        2            uyumluluk asiyor
fatura belgesi          220 ms       180 MB       2            sure + bellek + uyumluluk asiyor
gecelik uzlastirma      40000 ms     700 MB       2            sure + bellek + uyumluluk asiyor
cihaz kalici baglantisi 5 ms         30 MB        2            uyumluluk asiyor

12 isten 6 tanesi kenarda kosuyor; sure 4, bellek 3, uyumluluk 4 isi durduruyor (bir is birden cok esige takilabilir)

parcalanan is           adim         tepe bellek  ek tur       ek sure      hata noktasi
anomali esigi           2            65 MB        2            66 ms        3
tuketim egrisi          4            85 MB        6            198 ms       7

parcalama 2 isi kenara sokuyor: esik payi %80, toplam 8 ek tur, 264 ms ek sure, 10 hata noktasi (parcalanmadan is basina 1)
parcalanamayan 4 is merkeze duser (gunluk arsivleme, fatura belgesi, gecelik uzlastirma, cihaz kalici baglantisi); bedeli istek basina 60 ms kenar-bolge turu, kenar yalniz yonlendirir
son durum: 8/12 kenarda, 4/12 merkezde
```

Üç eşik on iki işin altısını geçirir; kalan altıda süre dördünü, bellek üçünü, uyumluluk dördünü
durdurur ve iki iş üçüne birden takılır.

İkinci tablo parçalamanın ne satın aldığını yazar. Süre ve belleğe takılan iki iş bölünebilir ve
bölünme belleği de böler: tüketim eğrisinin tepe belleği 260 MB'dan 85 MB'a iner. Bedel sekiz ek tur,
264 milisaniye ve **on hata noktasıdır** — parçalanmadan her iş tek noktaydı. Uyumluluğa takılan dört
iş parçalanamaz, çünkü eksik olan süre değil bir arayüz kalemidir.

## Kenarın Kazandırmadığı Yer

```js
// katman.mjs — kenarin kazandirmadigi durumlar ve ayni isin uc katmanda karsilastirilmasi.
import { ISLER, parcala, sut } from "./sinir.mjs";

const GRUP = [                                      // tur sureleri ms, model girdisi
  { ad: "sube-a", istek: 2600, ucta: 8, dogrudan: 124 },
  { ad: "sube-b", istek: 2100, ucta: 12, dogrudan: 116 },
  { ad: "sube-c", istek: 1800, ucta: 18, dogrudan: 80 },
  { ad: "merkez-kampus", istek: 1500, ucta: 22, dogrudan: 14 },
  { ad: "veri-merkezi-ici", istek: 1200, ucta: 28, dogrudan: 6 },
  { ad: "sube-d", istek: 800, ucta: 14, dogrudan: 132 },
];   // merkeze giden istek ucdan gectigi icin dogrudan yola ucun turunu ekler
const N = GRUP.reduce((t, g) => t + g.istek, 0);
const ort = (f) => GRUP.reduce((t, g) => t + g.istek * f(g), 0) / N;

const kaybeden = GRUP.filter((g) => g.dogrudan <= g.ucta);
const kn = kaybeden.reduce((t, g) => t + g.istek, 0);
console.log(`${N} istek, ${GRUP.length} grup: ucta sonlanan iste agirlikli kazanc ` +
  `${ort((g) => g.dogrudan - g.ucta).toFixed(1)} ms, merkeze giden iste kayip ` +
  `${ort((g) => g.ucta).toFixed(1)} ms`);
console.log(`${kaybeden.length}/${GRUP.length} grup (${kn} istek, %${(100 * kn / N).toFixed(0)}) ` +
  `kaynaga zaten yakin: kenar onlara ${kaybeden.map((g) => g.dogrudan - g.ucta).join(" ve ")} ms yaziyor\n`);

const YAZMA = 64, BOLGE_YAZMA = 10, SUNUCU_KAT = 0.55;
const yaz = ort((g) => g.ucta) + YAZMA, yazB = ort((g) => g.dogrudan) + BOLGE_YAZMA;
console.log(`tutarli yazma: kenardan ${yaz.toFixed(1)} ms, bolgeden ${yazB.toFixed(1)} ms; kazanc ` +
  `${(yazB - yaz).toFixed(1)} ms, ucta sonlananin %` +
  `${(100 * (yazB - yaz) / ort((g) => g.dogrudan - g.ucta)).toFixed(0)}'i — ${YAZMA} ms hic eksilmiyor`);
const ag = ISLER.find((i) => i.ad === "tuketim egrisi"), ap = parcala(ag), sn = ag.islem * SUNUCU_KAT;
console.log(`agir hesap (${ag.islem} ms): kenarda ${ap.adim} parcada ${ag.islem + ap.ekSure} ms, ` +
  `sunucuda ${Math.round(sn)} ms — ${((ag.islem + ap.ekSure) / sn).toFixed(1)} kat\n`);

const IS = ISLER.find((i) => i.ad === "okuma bicim cevirimi");
const AYLIK = 12_000_000, SOGUK_ORAN = 0.02, SOGUK_EK = 900;
const BIRIM = { kenar: 0.0000003, islev: 0.0000012, sunucu_saat: 0.096 };   // kurgu birim
const eszaman = Math.ceil((AYLIK / 2_592_000) * (IS.islem / 1000));
const uc = ort((g) => g.ucta), bl = ort((g) => g.dogrudan);
const KATMAN = [
  ["kenar calisma zamani", uc + IS.islem, "50 ms / 128 MB / 5 eksik kalem", AYLIK * BIRIM.kenar],
  ["islev calistirma ortami", bl + IS.islem + SOGUK_ORAN * SOGUK_EK, "900 sn / 3008 MB / soguk",
    AYLIK * BIRIM.islev],
  ["surekli sunucu", bl + IS.islem * SUNUCU_KAT, "kapasite elde / olcekleme elle",
    Math.max(1, Math.ceil(eszaman / 40)) * 730 * BIRIM.sunucu_saat],
];
console.log(`ayni is "${IS.ad}", ayda ${AYLIK / 1e6} milyon istek; birimler kurgudur`);
sut("katman", "gecikme", "aylik birim", "kisit");
for (const [ad, ms, kisit, birim] of KATMAN)
  sut(ad, `${ms.toFixed(1)} ms`, birim.toFixed(2), kisit);
const [k, i, s] = KATMAN.map((x) => x[3]);
console.log(`kenar isleve gore ${(i / k).toFixed(1)} kat, sunucuya gore ${(s / k).toFixed(0)} kat ucuz; ` +
  `ama bu satir yalnizca uc esige sigan ${ISLER.length - 4}/${ISLER.length} is icin yazilabilir`);
```

```
10000 istek, 6 grup: ucta sonlanan iste agirlikli kazanc 68.8 ms, merkeze giden iste kayip 15.6 ms
2/6 grup (2700 istek, %27) kaynaga zaten yakin: kenar onlara -8 ve -22 ms yaziyor

tutarli yazma: kenardan 79.6 ms, bolgeden 94.4 ms; kazanc 14.8 ms, ucta sonlananin %21'i — 64 ms hic eksilmiyor
agir hesap (140 ms): kenarda 4 parcada 338 ms, sunucuda 77 ms — 4.4 kat

ayni is "okuma bicim cevirimi", ayda 12 milyon istek; birimler kurgudur
katman                  gecikme      aylik birim  kisit
kenar calisma zamani    33.6 ms      3.60         50 ms / 128 MB / 5 eksik kalem
islev calistirma ortami 120.4 ms     14.40        900 sn / 3008 MB / soguk
surekli sunucu          94.3 ms      70.08        kapasite elde / olcekleme elle
kenar isleve gore 4.0 kat, sunucuya gore 19 kat ucuz; ama bu satir yalnizca uc esige sigan 8/12 is icin yazilabilir
```

Üç durum kenarın kazandırmadığı yerleri sayar. Altı grubun ikisi — 2.700 istek, %27 — bölgeye uçtan
daha yakındır ve kenar onlara 8 ile 22 milisaniye **yazar**. Tutarlı yazmada sıralama merkezde olduğu
için 64 milisaniye hiç eksilmez: kazanç 68,8'den 14,8 milisaniyeye iner. Ağır hesapta 140
milisaniyelik iş kenarda 338, sunucuda 77 milisaniye tutar.

Son tablo üç katmanı aynı iş üzerinde yan yana koyar. Eşiklere sığan iş için kenar üç ölçütte de
kazanır: 33,6 milisaniye ve aylık 3,60 kurgu birim — işlevin dörtte biri, sunucunun on dokuzda biri.
Koşulu son cümlededir: **yalnızca on iki işin sekizi için yazılabilir.**

## Özet

- Üç eşik on iki işin 6'sını geçirdi; süre 4, bellek 3, uyumluluk 4 işi durdurdu.
- Parçalama 2 işi daha kenara soktu ve tepe belleği 260 MB'dan 85 MB'a indirdi; bedel 8 ek tur, 264 ms
  ve iş başına 1 yerine toplam 10 hata noktasıdır. Uyumluluğa takılan 4 iş parçalanamaz ve merkeze
  düşer: 8/12 kenarda, 4/12 merkezde.
- Kenar üç yerde kazandırmaz: 2.700 istek (%27) bölgeye zaten yakın, tutarlı yazmada kazanç 68,8'den
  14,8 ms'ye iner, 140 ms'lik hesap kenarda 338, sunucuda 77 ms sürer.
- Sığan iş için kenar 33,6 ms ve 3,60 birimle işlevin 4, sunucunun 19 katı ucuzdur — ama kümenin
  yalnız 8/12'si için.

## Kurs Kapanışı

| Ders | Devredilen karar | Karşılığında gelen kısıt | Dolaşmanın bedeli |
|---|---|---|---|
| İH-01 Sunucusuz kavramı | kapasite, 8 karar | eşzamanlılık 200 | 11.520 boşta örnek-dk |
| İH-02 Çağırma modelleri | yeniden deneme | 5.487 eş düşen kayıt | tekilleştirme %5,5 |
| İH-03 Soğuk başlangıç | havuz ömrü | soğuk çağrı 1.300 ms | ısıtma %50 fatura |
| İH-04 Kaynak sınırları | bellek kademesi | 12'den 6'sı sığmaz | 246 çağrı, 245 kayıt |
| İH-05 Takma adlar | trafik dağıtımı | %1 payda +100 ms | 15 yapay çağrı |
| İH-06 Paylaşılan katmanlar | bağımlılık yeri | alt uç 745 → 2.093 | 6 yeniden yayım |
| İH-07 Uymayan işler | sürekli kapasite | 5'ten 2'si uymaz | 13 hata noktası |
| OS-01 Olay veri yolu | yönlendirme | 433 sessiz düşme | 781 boşa uyandırma |
| OS-02 Kuyruk ve konu | tüketici ölçekleme | 5 ayar kalemi | 1 ileti 7 istek |
| OS-03 Orkestrasyon | akış durumu | 1.119 geçiş, 280 birim | üçe bölünürse 840 birim |
| OS-04 Zamanlanmış tetikleme | saat | 3.600 yinelenen fatura | koşum başına kapsam sorgusu |
| OS-05 Geçit servisi | geçit işletimi | 102 yapılandırma kalemi | 48.469 yeniden çağrı |
| OS-06 Bildirim servisleri | gönderim | 25 gün kısılma | 630 olay, 6,3 birim |
| KE-01 Çalışma zamanı | kurulum ve sürüm | 13'ten 7 kalem yok | istek başına +9 tur |
| KE-02 İstek işleme | yerleşim | 7'den 3'ü uçta olmaz | +64 ms, 640 sn |
| KE-03 Kenar depolama | çoğaltma | 12.857 bayat okuma | okuma 2 → 62 ms |
| KE-04 Durum nesneleri | eşzamanlılık | tavan 166,7 istek/sn | anahtar bölünür, 6 okuma |
| KE-05 Kenar kuyrukları | eşzamansız iş | 438 yanlış endeks | 2.400 ek yazma |
| KE-06 Bağlamalar | bağlantı kurma | 9 türden 5'i | 45 satır kod, 124 ms |
| KE-07 Kenar sınırları | işlem ve bellek | 12'den 6'sı sığar | 8 ek tur, 10 hata |

Kursun kuralı yirmi satırda da aynıdır: **kapasite yönetimini devretmek onu ortadan kaldırmaz;
kısıt olarak geri gelir ve tasarımı o kısıt belirler.** Üçüncü sütun dört aileye ayrılır: sekiz
satırda kısıt **sayılı bir üst sınırdır** (eşzamanlılık, süre, bellek, arayüz kalemi, istek/sn), üç
satırda **başlangıç bedelidir**, dört satırda **görünmeyen bir yapılandırma yüzeyidir** (kural, beş
kalem, akış tanımı, 102 kalem), beş satırda **sessiz kayıp ya da yinelenen iştir**. Dördüncü sütun
ise hiçbir satırda kısıtın birimiyle yazılmaz: süre sınırı çağrıya, saklama süresi ikinci bir
kopyaya, eksik arayüz ağ turuna çevrilir.

Dört kurstur her katman kiralandı: makine, ağ, veri ve hesabın kendisi. Her kiralama bir karar
devretti, karşılığında sayılabilir bir kısıt verdi. Ama bütün bu hesapların **kime ait olduğu**,
kimin neye erişebildiği ve faturanın kime çıktığı hiç sorulmadı. **M23/K05 Bulut Yönetişimi,
Güvenlik ve Maliyet** bu soruyla başlar.
