---
title: 'Ters Vekil ve İleri Vekil'
source: 'https://academia.sh/tr/kurslar/ag-isletimi/ters-vekil-ve-ileri-vekil'
course: 'Ağ İşletimi ve Otomasyon'
language: tr
updated: '2026-08-17T18:07:16+00:00'
license: 'CC BY-SA 4.0'
---

# Ters Vekil ve İleri Vekil

Aynı sınır sayısı iki vekilde iki ayrı kuyruk üretir; sınır 30'da ters vekil 6 özneyi korumaz ve 1160 birim boşta bırakır, ileri vekil aynı 1160 birimi kısılan meşru talep olarak sayar, üstelik kırk özneden 9'unu ve 430 birimi hiç göremediği için raporunda yalnız 993 birim görünür.

Önceki iki derste dengeleyici hep aynı yerde durdu: kırk öznenin önünde, onların adına karar
vererek. Yükü kim gönderirse göndersin kaldıraç öznelerin tarafındaydı ve amacı onları
korumaktı.

Aracı bu duruşa mahkûm değildir. Aynı düzenek ters yöne çevrilebilir: istemcilerin önünde
durup **onların adına** karar verebilir. Bu dersin sorusu vekilin ne yaptığı değil — **kimin
adına** yaptığı, ve bu tercihin aynı sayıyı nasıl iki ayrı kuyruğa çevirdiğidir.

## Aynı Aracı, İki Duruş

İkisi de **aracıdır (intermediary)**: isteği alır, kendi kararını uygular, karşı tarafa
iletir. Ayrım durdukları yerdedir.

**Ters vekil (reverse proxy)** öznelerin önünde durur. Dışarıdan bakan için tek adres odur;
arkasındaki kırk özne doğrudan görünmez. Sunucu tarafının onu koymasının nedenleri
sıralanabilir: isteği bir dağıtım kuralına sokmak, şifreli bağlantıyı burada sonlandırmak,
yanıtı saklamak, ve arkadaki topolojiyi dışarıya kapatmak. Karar öznelerin adına alınır.
Özne bunu isteyip istemediği sorulmadan alınır — zaten kendi önündeki aracıyı seçen taraf o
değildir.

**İleri vekil (forward proxy)** istemcilerin önünde durur. Dışarıya çıkan her istek ondan
geçer; hedef tarafın gördüğü adres istemcinin değil vekilindir. İstemci tarafının onu
koymasının nedenleri de sıralanabilir: hangi hedeflere çıkılabileceğini sınırlamak, çıkan
isteği kaydetmek, sık istenen yanıtı saklamak, ve istemciyi hedeften gizlemek. Karar
istemcilerin adına alınır.

Yük dengeleyici ile ters vekilin ilişkisi ve ters vekilin üretim yapılandırması Sistem
Tasarımı ve Sunucu Tarafı müfredatlarında ele alındı; o anlatı burada tekrarlanmıyor. Fark
tek cümledir: **orada vekilin rolü ve yapılandırması ölçüldü, burada tek bir sınır sayısının
kırk öznede bıraktığı kuyruk.**

Yapılandırma tarafında ikisi birbirine benzer ve tam da bu yüzden karıştırılır:

```text
# öğretilen yapılandırma dökümü, çalıştırılmamıştır

ters-vekil {
  dinle        *:443
  yukari-akis  ozne-01 ... ozne-40
  sinir        es-zamanli 30 / ozne
  amac         ozneyi korumak
}

ileri-vekil {
  dinle        ic-ag:3128
  cikis        her hedef
  sinir        hiz 30 / istemci
  amac         istemciyi sinirlamak ve gizlemek
}
```

İki dökümde de aynı sayı geçiyor. Ölçüm bu sayının ne yaptığını sorar.

## Kaldıraç Tek Bir Sayıdır

Kaldıraç şudur: **bir sınır sayısı**, kırk özneye birden uygulanır. Ters vekilde bu sayı bir
**eşzamanlılık sınırı**dır — bir özneye aynı anda en çok bu kadar iş geçer. İleri vekilde bir
**hız sınırı**dır — bir istemci aynı anda en çok bu kadar iş çıkarabilir.

Neden kırk ayrı sınır yazılmadığı sorusu haklıdır ve yanıtı ölçünün dışındadır. Kırk ayrı
sayı yazılabilir; yazıldığı anda kırk ayrı bakım yükü doğar. Bir öznenin kapasitesi
değiştiğinde ona ait satırın da değişmesi gerekir; değişmezse sınır sessizce yanlışa döner ve
hiçbir gösterge bunu bildirmez. İşletmenin tek sayıya yönelmesi bir kolaycılık değil, bakım
maliyetinin doğrudan sonucudur — tek satır tek yerde durur ve kırk özneyi birden izler. Bu
kursun ölçtüğü kaldıraç–özne oranı da buradan doğar: tek satırın bedeli kuyruktur, kırk
satırın bedeli ise kırk satırın zamanla gerçekten kırk özneyi anlatmaz hâle gelmesidir.

Kuyruk her iki duruşta da vardır ama adı ve sahibi değişir.

Ters vekilde sınır **kapasitesinden büyük** olan özneyi korumaz: özne sınıra ulaşmadan kendi
kapasitesini aşar ve sınır hiç devreye girmez. Sınır **kapasitesinden küçük** olan özneyi ise
kapasitesinin altında tutar; aradaki fark kullanılmayan kapasitedir.

İleri vekilde aynı iki koşul tersine okunur. Talebi sınırın **üstünde** olan istemci kısılır
ve aradaki fark reddedilmiş meşru taleptir. Talebi sınırın **altında** kalan istemci
sınırdan hiç etkilenmez.

Bir fark daha var ve ölçümün en keskin sütununu o üretiyor. **Ters vekil atlatılamaz**: özneye
giden tek yol odur, kırk öznenin kırkı da önünden geçer. **İleri vekil atlatılabilir**;
istemcinin onu kullanması bir yapılandırma tercihidir ve kimi özne doğrudan çıkacak biçimde
ayarlanmıştır.

Ölçümün varsayımları:

- **TY14** — Kırk özne kursun sabit kümesidir ve değiştirilmez.
- **TY15** — Ters vekil kurgusunda özne bir sunucudur ve `kapasite` alanı onun karşılayabildiği
  iş miktarıdır — önceki iki dersteki okumanın aynısı.
- **TY16** — İleri vekil kurgusunda özne bir istemcidir ve `kapasite` alanı onun **meşru
  talebi** olarak okunur. **Küme değişmez, okuma değişir**; iki duruşun aynı sayılar üzerinde
  karşılaştırılabilmesinin koşulu budur.
- **TY17** — Sınır tek bir sayıdır ve özne başına uygulanır; öznelere ayrı ayrı sınır
  yazılmaz. Kaldıracın tekliği bu varsayımdadır.
- **TY18** — İleri vekili atlayan özneler kurgudaki `ozel` işaretli aygıtlardır. Atlama bir
  kusur değil, kayıtlı bir yapılandırma tercihidir; vekil onların trafiğini ne sınırlar ne
  görür.
- **TY19** — Ters vekil tek giriş noktasıdır; hiçbir özne onu atlayamaz.
- **TY20** — Ölçüm bir ağ ölçümü değildir; hiçbir bağlantı açılmaz. Sayılan şey sınırın kırk
  özne üzerindeki aritmetiğidir.

## Ölçüm

```python
"""Ayni sinir, iki vekil: kimin adina karar verildigi kuyrugu degistirir."""
TOHUM = 20260812
SINIFLAR = ("etkilesim", "toplu", "yedek")


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def ozneler(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kapasite": 20 + r(81), "gecikme": 5 + r(45),
                      "sinif": SINIFLAR[r(3)], "ozel": r(9) == 0})
    return liste


def ters(oz, sinir):
    """Ozne sunucudur; sinir onun adina konur. Kuyruk: korunmayan ve bosta birakilan."""
    korunmayan = sum(1 for o in oz if o["kapasite"] < sinir)
    bosta = sum(max(0, o["kapasite"] - sinir) for o in oz)
    return korunmayan, bosta


def ileri(oz, sinir, gecen):
    """Ozne istemcidir; sinir onun adina konur. Kuyruk: kisilan ve hic gorunmeyen."""
    g = [o for o in oz if o["no"] in gecen]
    kisilan = sum(1 for o in g if o["kapasite"] > sinir)
    birim = sum(max(0, o["kapasite"] - sinir) for o in g)
    return kisilan, birim


oz = ozneler()
gecen = {o["no"] for o in oz if not o["ozel"]}
tum = {o["no"] for o in oz}
print(f"özne {len(oz)} | toplam talep {sum(o['kapasite'] for o in oz)} | "
      f"ileri vekilden geçen {len(gecen)} | vekili atlayan {len(oz) - len(gecen)} "
      f"({sum(o['kapasite'] for o in oz if o['ozel'])} birim)")
print()
print(f"{'sınır':>6s} | {'ters vekil':^22s} | {'ileri vekil (geçen 31)':^24s} | "
      f"{'kırkı da geçseydi':^27s}")
print(f"{'':>6s} | {'korunmayan':>10s} {'boşta':>11s} | "
      f"{'kısılan':>8s} {'kısılan birim':>15s} | {'kısılan':>8s} {'birim':>11s} "
      f"{'eşit':>5s}")
for sinir in (30, 45, 60, 75, 90):
    k, b = ters(oz, sinir)
    ki, bi = ileri(oz, sinir, gecen)
    kt, bt = ileri(oz, sinir, tum)
    print(f"{sinir:6d} | {k:10d} {b:11d} | {ki:8d} {bi:15d} | {kt:8d} {bt:11d} "
          f"{sum(1 for o in oz if o['kapasite'] == sinir):5d}")
print()
print(f"ters vekilden geçmeyen özne: {len(oz) - len(tum)} "
      f"(tek giriş noktasıdır, kırkı da geçer) | "
      f"ileri vekilin hiç görmediği özne: {len(oz) - len(gecen)}, "
      f"{sum(o['kapasite'] for o in oz if o['ozel'])} birim")
```

```
özne 40 | toplam talep 2336 | ileri vekilden geçen 31 | vekili atlayan 9 (430 birim)

 sınır |       ters vekil       |  ileri vekil (geçen 31)  |      kırkı da geçseydi     
       | korunmayan       boşta |  kısılan   kısılan birim |  kısılan       birim  eşit
    30 |          6        1160 |       27             993 |       33        1160     1
    45 |         12         711 |       23             620 |       28         711     0
    60 |         23         354 |       15             326 |       17         354     0
    75 |         29         128 |       10             125 |       11         128     0
    90 |         34          17 |        4              17 |        4          17     2

ters vekilden geçmeyen özne: 0 (tek giriş noktasıdır, kırkı da geçer) | ileri vekilin hiç görmediği özne: 9, 430 birim
```

## Aynı Aritmetik, İki Ad

Tablonun en önemli özelliği iki sütununun **birebir aynı** olmasıdır. Ters vekilin "boşta"
sütunu **1160, 711, 354, 128, 17** okuyor; en sağdaki "kırkı da geçseydi" birim sütunu da
**1160, 711, 354, 128, 17**. Aynı sayılar, çünkü ikisi de aynı toplamdır: her öznenin
kapasitesi ile sınır arasındaki farkın pozitif kısmı.

Değişen tek şey o toplamın **adıdır**. Ters vekilde bu sayı, koruma uğruna kullanılmayan
kapasitedir: özne daha fazlasını karşılayabilirdi, sınır izin vermedi. İleri vekilde tam
aynı sayı, reddedilmiş meşru taleptir: istemci daha fazlasını isteyecekti, sınır izin
vermedi. **Ölçü değişmedi, kimin adına konduğu değişti.**

Bunun doğrudan bir sonucu var. Sınırı büyütmek ters vekilde **korumayı azaltır** —
korunmayan özne 30'da **6** iken 90'da **34**'e çıkar. Aynı hareket ileri vekilde
**kısıtlamayı azaltır** — kısılan özne 30'da **33** iken 90'da **4**'e iner. Kaldıracı aynı
yöne çevirmek iki duruşta zıt anlam taşır ve bir gösterge tablosunda ikisi aynı sayı olarak
görünür.

Pratikte bunun anlamı, sınırın doğru değerinin ölçümden çıkarılamamasıdır. Otuz mu doksan mı
sorusunun yanıtı, tablodaki hangi sütunun kabul edilebilir sayıldığına bağlıdır — ve o
kararı veren şey kaldıracın kendisi değil, kaldıracı kimin adına çektiğinizdir. İki tarafın
aynı sayı üzerinde anlaşamamasının nedeni de budur: birinin koruma dediği şey, ötekinin
reddedilmiş talebidir.

## Tümleyen Kuyruk

İki kuyruk birbirinin tümleyenidir ve tabloda toplamları doğrulanabilir. Sınır 30'da
korunmayan **6**, kırkı da geçseydi kısılan **33**, sınıra tam eşit olan **1** özne var:
altı artı otuz üç artı bir, kırk eder. Sınır 90'da **34 + 4 + 2 = 40**. Aradaki üç satırda
eşit olan yok ve iki sütun doğrudan kırka tamamlanıyor: **12 + 28**, **23 + 17**, **29 + 11**.

Bunun anlamı şudur: kırk öznenin her biri, **her sınır değerinde**, iki kuyruktan tam olarak
birindedir. Sınırın altında kalan özne ters vekilde korunmuyordur; üstünde kalan özne ileri
vekilde kısılıyordur. Bir öznenin ikisinden birden kurtulduğu bir sınır değeri yoktur ve
kırkını birden kurtaran bir sayı hiç yoktur. Sınıra tam eşit olan özneler ise iki sütunda da
görünmez — kırk öznelik kümede bir ya da iki özne, yani ölçülebilen en küçük farkın
(**1/40 = 0,025**) bir ya da iki katı.

Tek sayılı bir kaldıracın yapabileceği tek şey, kırk özneyi bu iki kuyruk arasında bölmenin
**yerini** seçmektir. Bölmemek seçeneği kaldıracın elinde yoktur.

## İleri Vekilin Göremediği

Son satır ikinci farkı veriyor. Ters vekil öznelere giden tek yol olduğu için kırkını birden
görür; atlayan **0**. İleri vekil ise kırk özneden yalnız **31**'inin trafiğini taşıyor:
**9** özne doğrudan çıkacak biçimde ayarlanmış ve **430** birimlik talebi vekile hiç
uğramıyor.

Bunun raporda karşılığı ortadaki sütunlardır. Sınır 30'da ileri vekilin kendi raporu
**993** birim kısıldığını söylüyor. Kırk öznenin tamamı vekilden geçseydi bu sayı **1160**
olacaktı. Aradaki **167** birim eksik değil — **hiç sayılmamış**. Vekilin raporunda ne
kısılmış olarak ne de serbest olarak görünüyor, çünkü o trafiğe hiç dokunulmadı.

Aynı boşluk kısılan özne sütununda da var: rapor **27** diyor, gerçek sayı **33**.
İstemci adına karar veren bir kaldıracın yapısal zayıflığı budur — **kararı uygulayabilmesi
için istemcinin ona uğramayı kabul etmesi gerekir.** Sunucu adına karar veren kaldıraç bu
onaya muhtaç değildir, çünkü kendisi zaten yolun üstündedir.

Dokuz öznenin atlamasının bir kusur olmadığını da eklemek gerekir; kayıtlı bir tercihtir ve
gerekçesi vardır. Kusur olan, **raporun bu dokuzu hiç anmamasıdır**: kapsam dışında kalanı
söylemeyen bir kapsam raporu, kapsadığı kadarını doğru saysa bile toplamı yanlış gösterir.

## Vekilin Sildiği Ayrım

Adres gizlemenin karşı taraftaki karşılığı da bir kaldıraç sorunudur ve işletmede sık gözden
kaçar.

İleri vekilden geçen **31** özne, hedef tarafın gördüğü iletide **tek bir adres** olarak
görünür. Hedef taraf kendi kaldıracını — hız sınırını, eşzamanlılık sınırını, erişim
kuralını — o tek adrese uygular. Kırk öznenin otuz biri, karşı tarafın defterinde bir özneye
inmiştir. En yoğun istemciyi kısmak isteyen bir hedef otuz birini birden kısar; içlerinden
birini engellemek istediğinde otuz birini birden engeller. Bu kursun ölçtüğü oran — bir
kaldıraç, kaç özne — vekilin arkasında **ikinci kez** bozulur, ve karşı taraf kaç özneye
dokunduğunu bilmez.

Ters vekilde aynı silme ters yöne çalışır. Dışarıdan bakan için arkadaki kırk özne tek
adrestir; hangi öznenin yanıt verdiği iletide yazmaz. Topolojiyi kapatmak zaten istenen
sonuçtur, ama yan etkisi ölçümü doğrudan vurur: bir yanıtın hangi özneden geldiği iletiden
çıkarılamaz. Bu bilgi ayrıca taşınmazsa kırk öznenin kuyruğu tek bir ortalamanın arkasına
düşer ve önceki iki dersteki tabloların hiçbiri kurulamaz.

İkisinin saklama yeteneği de aynı ayrımı taşır. Ters vekil öznelerin adına saklar: bir kez
üretilmiş yanıt birçok istemciye verilir. İleri vekil istemcilerin adına saklar: bir kez
alınmış yanıt birçok istemcinin aynı hedefe isteğine verilir. İki durumda da saklanan kopya
**kendisi için üretilmediği** bir isteğe gidebilir. Bu kararı yöneten kişiye özellik imi
Uygulama Katmanı Protokolleri kursunda ölçüldü ve burada tekrarlanmıyor; bu derste önemli
olan, saklama kararının da tek bir kaldıraç olduğu ve kırk özneye birden uygulandığıdır.

## Özet

- Ters vekil öznelerin, ileri vekil istemcilerin adına karar verir; ikisi de aracıdır ve
  yapılandırmaları benzer, ayrım durdukları yerdedir.
- Tek bir sınır sayısı ters vekilde **korunmayan özne** ve **boşta bırakılan kapasite**,
  ileri vekilde **kısılan özne** ve **reddedilen meşru talep** üretir.
- Boşta bırakılan kapasite ile reddedilen talep **aynı toplamdır**: her iki sütun da
  **1160, 711, 354, 128, 17** okur; değişen yalnız sayının adıdır.
- İki kuyruk tümleyendir: her sınır değerinde korunmayan, kısılan ve sınıra eşit özneler
  kırka tamamlanır (**6 + 33 + 1**, **34 + 4 + 2**); hiçbir sayı kırkını birden kurtarmaz.
- Ters vekil atlatılamaz ve kırkını görür; ileri vekili **9** özne atlar, **430** birim hiç
  uğramaz ve rapor **1160** yerine **993**, **33** yerine **27** gösterir.
- Vekil adres ayrımını da siler: ileri vekilin arkasındaki **31** özne hedef tarafta tek
  adrese iner ve karşı tarafın kaldıracı otuz birine birden dokunur; ters vekilin arkasında
  ise yanıtın hangi özneden geldiği iletide kalmaz.

## Sonraki Adım

Bu üç derste kaldıraç hep tek bir noktada durdu: isteğin geçmek zorunda olduğu yerde. Ters
vekil öznelerin önünde, ileri vekil istemcilerin önünde, ama ikisi de **tek** bir yerde.
Sonraki ders bu noktayı çoğaltır: içerik istemciye yakın duran birçok kopyaya dağıtılırsa,
kaldıraç artık dağıtımı değil **neyin nerede duracağını** ayarlar. Ölçü de değişir — sorulan
şey kimin kısıldığı değil, **kenarın hangi özneyi hiç görmediğidir**: çekme modelinde ilk
isteğini bekleyen içerik, itme modelinde hiç istenmeyen içerik.
