---
title: 'Ağ Geçidi Yük Boşaltma'
source: 'https://academia.sh/tr/kurslar/trafik-katmani/ag-gecidi-yuk-bosaltma'
course: 'Trafik Katmanı'
language: tr
updated: '2026-08-17T18:11:03+00:00'
license: 'CC BY-SA 4.0'
---

# Ağ Geçidi Yük Boşaltma

Ortak işlerin kenara taşınmasının mekanik bir kurala bağlanması: bir denetimin okuduğu girdiler yazıldığında taşınabilenlerin ayrılması, tekrarlanan satır sayısının ölçülmesi, güven sınırının kaymasının bedeli ve kenara taşınan denetimin hangi hızda koştuğunun K01 hesabından okunması.

Toplama ağ geçidinin gövdeye dokunan işiydi. Kenara taşınabilecek işlerin çoğu gövdeye hiç
dokunmaz: bir belirtecin imzasının doğrulanması, bir hız sınırının uygulanması, bir erişim
kaydının yazılması. **Ağ geçidi yük boşaltma** (gateway offloading) bu işleri servislerden
alıp kenarda tek bir yerde toplamaktır.

İlk ders bu yerleşimi satır sayısıyla karşılaştırdı ama hangi işin taşınabilir olduğunu bir
kurala bağlamadı ve "isteğin üstverisine bakan iş kenara ait" ölçütünü sözle bıraktı. Bu ders
o ölçütü mekanik hâle getirir: her denetimin okuduğu girdiler yazılır, girdilerin sınıfı
denetimi kendiliğinden ayırır. Belirteç doğrulama Kimlik Doğrulama ve Yetkilendirme kursunda,
hız sınırlama Web API Tasarımı kursunda, TLS sonlandırma bu kursun Yük Dengeleyici Rolü
dersinde ele alındı; hiçbiri burada yeniden anlatılmaz.

## Taşınabilirlik Kuralı

Bir denetim iki tür girdi okuyabilir. **Üstveri** isteğin kendisinden gelir: başlıklar, yol,
kaynak adres, içerik uzunluğu. **Alan girdisi** sistemin verisinden gelir: gönderi kaydı,
sözleşme kaydı, günlük sayaç. Kural tek cümledir: bir denetim yalnız üstveri okuyorsa kenara
taşınabilir, bir alan girdisi okuyorsa serviste kalır.

Kuralın gerekçesi bir bağ sayısıdır. Alan girdisi okuyan bir denetim kenara taşındığında ağ
geçidi o veriye erişmek zorunda kalır; ilk dersin söylediği gibi kenar iki bağlamın alan
kurallarını tanımaya başlar ve iki bağlamın her değişikliği kenarı düzenletir. Kural, o bağı
kurmayı reddetmenin ölçülebilir biçimidir.

```js
// kenar/denetim.mjs — alti denetim, okuduklari girdiler ve tasinabilirlik kurali
export const USTVERI = ["basliklar", "yol", "kaynak adres", "icerik uzunlugu"];

// okur: kararin zorunlu girdileri; secmeli: kayda yazilmasi istenen ama karari degistirmeyen girdi
export const DENETIM = {
  "belirtec imzasi": { okur: ["basliklar"], secmeli: [], satir: 12 },
  "hiz siniri": { okur: ["kaynak adres", "basliklar"], secmeli: [], satir: 9 },
  "govde boyutu": { okur: ["icerik uzunlugu"], secmeli: [], satir: 5 },
  "erisim kaydi": { okur: ["yol", "basliklar"], secmeli: ["gonderi kaydi"], satir: 6 },
  "gonderi sahipligi": { okur: ["basliklar", "gonderi kaydi"], secmeli: [], satir: 14 },
  "sozlesme kotasi": { okur: ["sozlesme kaydi", "gunluk sayac"], secmeli: [], satir: 11 },
};

export const ustveriMi = (g) => USTVERI.includes(g);
export const tasinir = (d) => d.okur.every(ustveriMi);
export const eksikAlan = (d) => (tasinir(d) ? d.secmeli.filter((g) => !ustveriMi(g)).length : 0);
```

Satır sayıları modelin girdisidir ve **varsayım** sınıfındadır; okunan şey tek bir gerçekleştirme
uzunluğu değil, aynı satırların üç serviste tekrarlanmasının ürettiği farktır. Kural ise
girdilerin sınıfından çıkar ve satır sayılarından bağımsızdır.

```js
// kenar/bosalt.mjs — kurali alti denetime uygular, satirlari sayar ve K01 hesabina baglar
import { DENETIM, tasinir, eksikAlan, ustveriMi } from "./denetim.mjs";

const SERVIS = 3;                                  // takip, olay, ucret
const ad = Object.keys(DENETIM);
const kenar = ad.filter((a) => tasinir(DENETIM[a]));
const serviste = ad.filter((a) => !tasinir(DENETIM[a]));

console.log(`${"denetim".padEnd(19)}${"alan girdisi".padStart(13)}  karar`);
for (const a of ad) {
  const alan = DENETIM[a].okur.filter((g) => !ustveriMi(g));
  console.log(`${a.padEnd(19)}${String(alan.length).padStart(13)}  ` +
    `${tasinir(DENETIM[a]) ? "kenara tasinir" : `serviste kalir (${alan.join(", ")})`}`);
}
const eksik = kenar.reduce((t, a) => t + eksikAlan(DENETIM[a]), 0);
console.log(`\nkenara tasinan = ${kenar.length}/${ad.length}, serviste kalan = ${serviste.length}/${ad.length}`);
console.log(`kenarda eksik kalan kayit alani = ${eksik}`);

const satir = (liste) => liste.reduce((t, a) => t + DENETIM[a].satir, 0);
const YERLESIM = [
  ["her serviste", [], ad],
  ["bosaltilmis", kenar, serviste],
];
console.log(`\n${"yerlesim".padEnd(14)}${"kenar satiri".padStart(14)}${"servis satiri".padStart(15)}${"toplam".padStart(9)}`);
for (const [y, k, s] of YERLESIM) {
  console.log(`${y.padEnd(14)}${String(satir(k)).padStart(14)}` +
    `${String(SERVIS * satir(s)).padStart(15)}${String(satir(k) + SERVIS * satir(s)).padStart(9)}`);
}

// K01 Kabaca Buyukluk Hesabi: uctaki tepe 513.89 istek/s (hesap sinifi)
const UC_TEPE = 513.89;
const GUVEN = [
  ["gecit yok", SERVIS, 1, 0],
  ["gecit dogrular, servis guvenir", 1, 1, SERVIS],
  ["gecit ve servis dogrular", 1 + SERVIS, 2, 0],
];
console.log(`\n${"belirtec dogrulama".padEnd(32)}${"birim".padStart(7)}${"dogrulama/s".padStart(13)}${"korumasiz servis".padStart(18)}`);
for (const [y, birim, kez, acik] of GUVEN) {
  console.log(`${y.padEnd(32)}${String(birim).padStart(7)}` +
    `${(UC_TEPE * kez).toFixed(2).padStart(13)}${`${acik}/${SERVIS}`.padStart(18)}`);
}

// Denetimin hangi hizda kostugu: K01'in uc akis hesabi
const HIZ = [
  [`kenar denetimleri (${kenar.length})`, "513.89 istek/s", "uctaki tepe"],
  ["gonderi sahipligi", "416.67 istek/s", "okuma tepesi"],
  ["sozlesme kotasi", "833.33 kayit/s", "toplu is tarama hizi"],
];
console.log("");
for (const [a, h, k] of HIZ) console.log(`${a.padEnd(23)}${h.padStart(15)}  ${k}`);
```

```
denetim             alan girdisi  karar
belirtec imzasi                0  kenara tasinir
hiz siniri                     0  kenara tasinir
govde boyutu                   0  kenara tasinir
erisim kaydi                   0  kenara tasinir
gonderi sahipligi              1  serviste kalir (gonderi kaydi)
sozlesme kotasi                2  serviste kalir (sozlesme kaydi, gunluk sayac)

kenara tasinan = 4/6, serviste kalan = 2/6
kenarda eksik kalan kayit alani = 1

yerlesim        kenar satiri  servis satiri   toplam
her serviste               0            171      171
bosaltilmis               32             75      107

belirtec dogrulama                birim  dogrulama/s  korumasiz servis
gecit yok                             3       513.89               0/3
gecit dogrular, servis guvenir        1       513.89               3/3
gecit ve servis dogrular              4      1027.78               0/3

kenar denetimleri (4)   513.89 istek/s  uctaki tepe
gonderi sahipligi       416.67 istek/s  okuma tepesi
sozlesme kotasi         833.33 kayit/s  toplu is tarama hizi
```

## Kuralın Verdiği Ayrım

Altı denetimin dördü kenara taşınıyor, ikisi serviste kalıyor ve ayrımı yapan şey bir yargı
değil bir liste. `gonderi sahipligi` bir gönderinin isteği yapan kimliğe ait olup olmadığını
sorar; yanıt için gönderi kaydını okumak zorundadır, dolayısıyla kenarda verilemez. Bu,
Kimlik Doğrulama ve Yetkilendirme kursunda nesne düzeyinde yetki denetimi olarak kurulan
sorunun kenar karşılığıdır: kimliği doğrulamak kenarda yapılabilir, o kimliğin belirli bir
nesneye erişip erişemeyeceğine karar vermek yapılamaz. `sozlesme kotasi` iki alan girdisi
okuduğu için daha da kesin biçimde serviste kalır.

`erisim kaydi` satırı kuralın sınırını gösteriyor. Denetim yalnız üstveri okuduğu için kenara
taşınıyor, ama seçmeli girdisi bir alan girdisidir: kenarda yazılan kayıt hangi yolun
çağrıldığını bilir, o çağrının hangi gönderiyi döndürdüğünü bilmez. Sayaç bunu `kenarda eksik
kalan kayit alani = 1` olarak yazıyor. Boşaltma bu durumda işi taşımaz, işin bir alanını
düşürür; kararın yazılı hâli "erişim kaydı kenara taşındı, kayıt bir alan eksik" olmalıdır.

Satır tablosu kazancı veriyor: altı denetim üç serviste 171 satır tutarken, boşaltılmış
yerleşimde kenarda 32 ve servislerde 75 satır, toplam 107 satır tutuyor. Toplam 0,63 katına
iniyor. Düşüş üçte bire varmıyor çünkü serviste kalan iki denetim hâlâ üç serviste
tekrarlanıyor — ve o iki denetim en uzun ikisidir.

## Güven Sınırı Nereye Kayıyor

Boşaltmanın gerçek bedeli satırlarda değil, ikinci tabloda. Geçit yokken üç servis de kendi
belirteç doğrulamasını yapar: kod üç birimde, doğrulama saniyede 513,89 kez, korumasız servis
0/3. Doğrulama kenara alınıp servisler ağ geçidine güvendiğinde kod tek birime iner ve
doğrulama sayısı değişmez, ama korumasız servis 3/3 olur: ağ geçidini atlayan bir istek üç
servisin hiçbirinde doğrulanmaz. Kod satırındaki kazanç, bir güven varsayımıyla ödenmiştir ve
o varsayım yazılmadıkça karar eksiktir.

Üçüncü satır varsayımı kaldırıyor: ağ geçidi de servis de doğrularsa korumasız servis 0/3'e
döner, ama kod dört birime çıkar ve doğrulama saniyede 1027,78 kez koşar. Aynı işi iki kez
yapmanın ölçüsü budur. Üç satırın hiçbiri her ölçüde önde değil; seçim, ağ geçidinin
atlanabilir olup olmadığına dair bir kararla birlikte yazılır.

## Hesaba Dönüş

Son tablo kursun kuralını iki yönde birden kullanıyor. Kenara taşınan dört denetim K01'in
uçtaki tepe hızında koşar: saniyede 513,89 istek, yani sistemin en yüksek istek hızı. Kenarda
tek bir yerde toplanan denetimin toplam maliyeti bu yüzden dört denetimin 513,89 ile çarpımıdır
ve boşaltma bu çarpımı düşürmez — yalnız tek yerde toplar.

Serviste kalan iki denetim ise farklı hızlarda koşuyor. `gonderi sahipligi` okuma akışına
aittir ve K01'in tepe okuma hızında, saniyede 416,67 istek üzerinde koşar. `sozlesme kotasi`
toplu akışa aittir ve K01'in gün sonu tarama hızında, saniyede 833,33 kayıt üzerinde koşar.
Sonuç beklenenin tersidir: kenara taşınmayan bir denetim, kenara taşınanlardan daha yüksek
hızda koşabiliyor. Boşaltma bir başarım kararı değil, bir yerleşim kararıdır; en pahalı iş
kenarda olmak zorunda değildir.

## Özet

- Bir denetim yalnız üstveri okuyorsa kenara taşınabilir, bir alan girdisi okuyorsa serviste
  kalır; kural girdilerin listesinden mekanik olarak çıkar.
- Altı denetimin dördü taşınıyor, ikisi kalıyor: `gonderi sahipligi` gönderi kaydını,
  `sozlesme kotasi` sözleşme kaydı ile günlük sayacı okuyor.
- Boşaltma işin bir alanını düşürebilir: kenarda yazılan erişim kaydı bir alan eksik kalıyor
  (`kenarda eksik kalan kayit alani = 1`).
- Satır sayısı 171'den 107'ye, 0,63 katına iniyor; düşüşün sınırı serviste kalan iki denetimin
  hâlâ üç serviste tekrarlanmasıdır.
- Güven sınırı kayıyor: doğrulama kenara alındığında kod 3 birimden 1'e iner ama korumasız
  servis 0/3'ten 3/3'e çıkar; iki yerde doğrulamak 0/3'e döner, karşılığında kod 4 birime ve
  doğrulama 513,89'dan 1027,78 kez/s'ye çıkar.
- K01'e dönüş: kenar denetimleri uçtaki tepede (513,89 istek/s) koşarken serviste kalan iki
  denetim 416,67 istek/s ve 833,33 kayıt/s hızlarında koşuyor — kenar, en pahalı işin yeri
  değildir.

## Sonraki Adım

Buraya kadarki üç ders ağ geçidini tek bir kenar olarak ele aldı: bütün istemciler aynı
adrese gelir, aynı denetimlerden geçer ve toplama yapıldığında aynı birleşik gövdeyi alır.
Oysa takip bilgisini isteyen istemciler aynı değildir. Bir mobil takip kartı durum ve bölgeyi
gösterir, bir web takip sayfası rota adımlarını da açar, bir satıcı paneli ücret kalemlerini
ister. Tek bir birleşik gövde üçünü birden karşıladığında her istemci kullanmadığı alanları
da taşır. Sonraki ders bu alanları sayar ve kenarı istemci türüne göre bölmenin gövdeyi kaç
bayta indirdiğini, karşılığında kaç kenar birimi ekletiğini ölçer.
