---
title: 'Servis Ağı'
source: 'https://academia.sh/tr/kurslar/sunucu-ve-sertlestirme/servis-agi'
course: 'Sunucu, Ağ ve Sertleştirme'
language: tr
updated: '2026-08-17T18:09:10+00:00'
license: 'CC BY-SA 4.0'
---

# Servis Ağı

Aynı trafik kurallarının uygulama kodunda ve yan araba vekilinde uygulanmasının karşılaştırılması: kural değişikliğinde dokunulan servis sayısı ve yıllık iş kalemi, gerçek bir yan araba atlamasının ölçülmesi, her isteğe eklenen atlama ile gecikme, yan arabaların bellek ve çekirdek tüketimi, getirdikleri yeni yüzey kalemi ve üç servisli bir sistemde bedelin kazançtan büyük olduğu başabaş noktası.

Önceki ders trafiğe kenarda ve kaynakta iki kural koydu. İkisi de isteğin yolunda durdu ve
dışarıdan gelen trafiğe uygulandı.

Servisler birbirine de istek gönderir. Kurgu ölçüm ağında doğrulayıcı faturalamaya, faturalama
iş emrine, iş emri bildirim geçidine bağlanır ve bu trafiğin hiçbiri kenar vekilden geçmez. Bu
çağrıların da kuralları vardır: zaman aşımı kaç saniye, kaç kez yeniden denenir, hangi servis
hangisini çağırabilir, çağrı şifreli mi taşınır.

Bu kurallar iki yere konabilir. **Uygulama kodunda**: her servis kendi istemcisini yapılandırır.
**Yan araba vekilinde**: her servis örneğinin yanına bir vekil konur, bütün giden ve gelen trafik
o vekilden geçer, kurallar vekile yazılır. İkinci yerleşimin adı **servis ağı**dır.

Bu ders iki yerleşimi aynı kural değişikliği üzerinde karşılaştırır ve tek soruyu sorar: yan
arabanın kazandırdığı, ödettiğinden büyük mü.

- **WS31.** Her servisin iki örneği vardır ve her örneğe bir yan araba düşer.
- **WS32.** "İş kalemi" kurgu bir birimdir: bir değişiklik, bir gözden geçirme ya da bir yayın.
  Kod yerleşiminde bir kural değişikliği servis başına üç iş kalemi, ağ yerleşiminde toplam iki
  iş kalemi tutar.
- **WS33.** Ağ yerleşiminin yıllık sabit bedeli kırk iş kalemidir (denetim düzlemi) ve her yan
  araba örneği yılda iki iş kalemi ekler (sürüm yükseltme, kimlik dönüşü). Yılda altı trafik
  kuralı değişir.
- **WS34.** Bir yan araba örneği altmış dört megabayt bellek ve onda bir çekirdek tüketir; bir
  atlamanın eklediği gecikme kurguda kırk mikrosaniyenin on katı, yani `0,4` milisaniyedir.
- **WS35.** Gerçek ölçüm bloğu süre basmaz: beklenen atlama ve bağlantı sayısı girdiden
  türetilerek yazılır, ölçülen ek gecikme yalnız sıfır ile elli milisaniye arasında olup
  olmadığına bakılarak `evet` ya da `hayir` yazılır.
- **WS36.** Yeni yüzey kalemi sayımı şudur: her yan araba örneği için bir yönetim ucu ve bir
  kimlik, artı denetim düzlemi ile kural deposu.

## Bir Atlamanın Kendisi

Yan arabanın her isteğe eklediği şey önce bir atlamadır. Aşağıdaki blok bunu modellemez,
gerçekten koşar: bir uygulama sunucusu ve önüne konan bir yan araba vekili kurulur, iki yol da
aynı sayıda istekle sınanır.

```js
// yanaraba/atlama.mjs — gercek olcum: yan araba vekilinin bir istege ekledigi atlama.
// Sunucular bu dosyada kurulur, olcum bitince kapatilir. Ham sure ciktiya basilmaz:
// beklenen degerler girdiden turetilir, olculen ek gecikme yalniz bant denetiminden gecer.
import { createServer, request } from "node:http";

const ISTEK = 200, ISINMA = 50, BANT = [0, 50];            // bant: milisaniye
const UYG = 8951, YAN = 8950;
const uygulama = createServer((i, y) => { y.sendDate = false; y.end("olcum"); }).listen(UYG, "127.0.0.1");
const yanAraba = createServer((di, dy) => {                // tek isi: istegi bir atlama oteye tasimak
  dy.sendDate = false;
  const ii = request({ port: UYG, path: di.url, method: di.method, headers: di.headers },
    (iy) => { dy.writeHead(iy.statusCode, iy.headers); iy.pipe(dy); });
  ii.on("error", () => dy.writeHead(502).end("kesildi"));
  di.pipe(ii);
}).listen(YAN, "127.0.0.1");

const cagir = (port) => new Promise((coz) => {
  request({ port, path: "/olcum", agent: false }, (y) => { y.resume(); y.on("end", coz); }).end();
});
async function olc(port, n) {                              // istek basina ms
  const b = process.hrtime.bigint();
  for (let i = 0; i < n; i += 1) await cagir(port);
  return Number(process.hrtime.bigint() - b) / 1e6 / n;
}

await olc(UYG, ISINMA); await olc(YAN, ISINMA);            // isinma: iki yol da bir kez kosar
const ek = (await olc(YAN, ISTEK)) - (await olc(UYG, ISTEK));
uygulama.close(); yanAraba.close();

console.log(`istek / yol                       ${ISTEK}`);
console.log(`beklenen atlama                   dogrudan 1, yan arabali 2   (fark 1)`);
console.log(`beklenen baglanti / istek         dogrudan 1, yan arabali 2   (fark 1)`);
console.log(`ek gecikme ${BANT[0]}-${BANT[1]} ms bandinda        ${ek >= BANT[0] && ek <= BANT[1] ? "evet" : "hayir"}`);
```

```
istek / yol                       200
beklenen atlama                   dogrudan 1, yan arabali 2   (fark 1)
beklenen baglanti / istek         dogrudan 1, yan arabali 2   (fark 1)
ek gecikme 0-50 ms bandinda        evet
```

Ölçülen süre çıktıya girmez, çünkü makineden makineye değişir ve karşılaştırılamaz. Girdiden
türeyen iki sayı değişmez: yan arabalı yolda her istek **iki atlama** ve **iki bağlantı**
harcar, doğrudan yolda bir. Bu, tek yönlü bir çağrı içindir; iki servis arasındaki bir çağrıda
her iki uçta da yan araba durduğu için atlama sayısı ikiye çıkar.

## Kural Değiştiğinde Dokunulan

İkinci blok yerleşimlerin defterini tutuyor.

```js
// yanaraba/bedel.mjs — model: ayni trafik kurallarinin iki yerde uygulanmasi. "Is kalemi"
// kurgu bir birimdir (bir degisiklik, bir gozden gecirme, bir yayin); butun sayilar
// asagidaki sabitlerden turer. Urun yoktur, yerlesim vardir.
const ORNEK = 2;            // her servisin ornek sayisi
const KOD_KALEM = 3;        // kod yerlesiminde servis basina: degisiklik + gozden gecirme + yayin
const AG_KALEM = 2;         // ag yerlesiminde kural basina toplam: yapilandirma + dagitim denetimi
const DENETIM = 40;         // denetim duzleminin yillik sabit is kalemi
const YAN_BAKIM = 2;        // yan araba ornegi basina yillik: surum yukseltme + kimlik donusu
const KURAL = 6;            // yilda degistirilen trafik kurali sayisi
const ATLAMA_MS = 0.4;      // kurgu: bir yan araba atlamasinin ekledigi gecikme
const BELLEK = 64, CEKIRDEK = 0.1;   // yan araba ornegi basina

const SERVIS = [3, 5, 8, 20, 40];
const kodIs = (n) => KURAL * n * KOD_KALEM;
const agIs = (n) => KURAL * AG_KALEM + DENETIM + n * ORNEK * YAN_BAKIM;

const E = [8, 8, 17, 14, 15, 13, 12, 11, 10];
const yaz = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](E[i])).join("");
console.log(yaz(["servis", "ornek", "kodda dokunulan", "kodda is/yil", "agda dokunulan",
  "agda is/yil", "ag sabiti", "ag is/yil", "kazanan"]));
for (const n of SERVIS)
  console.log(yaz([n, n * ORNEK, n, kodIs(n), 0, KURAL * AG_KALEM,
    DENETIM + n * ORNEK * YAN_BAKIM, agIs(n), kodIs(n) < agIs(n) ? "kod" : "ag"]));
const basabas = [...Array(60).keys()].map((i) => i + 1).find((n) => kodIs(n) >= agIs(n));
console.log(`basabas servis sayisi: ${basabas}  (bu sayinin altinda kod yerlesimi ucuzdur)`);

// Istek basina bedel ve yan arabanin getirdigi yeni yuzey.
const P = [8, 16, 12, 18, 16, 12, 20];
const yaz2 = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](P[i])).join("");
console.log("\n" + yaz2(["servis", "ic cagri/istek", "ek atlama", "ek gecikme(ms)",
  "yan araba MB", "cekirdek", "yeni yuzey kalemi"]));
for (const n of SERVIS) {
  const cagri = Math.min(n - 1, 4), atlama = 2 * (cagri + 1), ornek = n * ORNEK;
  console.log(yaz2([n, cagri, atlama, (atlama * ATLAMA_MS).toFixed(1), ornek * BELLEK,
    (ornek * CEKIRDEK).toFixed(1), ornek * 2 + 2]));
}
```

```
servis     ornek  kodda dokunulan  kodda is/yil agda dokunulan  agda is/yil   ag sabiti  ag is/yil   kazanan
3              6                3            54              0           12          52         64       kod
5             10                5            90              0           12          60         72        ag
8             16                8           144              0           12          72         84        ag
20            40               20           360              0           12         120        132        ag
40            80               40           720              0           12         200        212        ag
basabas servis sayisi: 4  (bu sayinin altinda kod yerlesimi ucuzdur)

servis    ic cagri/istek   ek atlama    ek gecikme(ms)    yan araba MB    cekirdek   yeni yuzey kalemi
3                      2           6               2.4             384         0.6                  14
5                      4          10               4.0             640         1.0                  22
8                      4          10               4.0            1024         1.6                  34
20                     4          10               4.0            2560         4.0                  82
40                     4          10               4.0            5120         8.0                 162
```

## Dokunulan Servis Sayısı

Birinci tablonun asıl sütunu üçüncüsüdür. Bir trafik kuralı — diyelim zaman aşımı beş saniyeden
iki saniyeye indirilecek — kod yerleşiminde **her servise ayrı ayrı** dokunur. Üç servisli
sistemde üç, kırk servisli sistemde kırk. Her dokunuş bir değişiklik, bir gözden geçirme ve bir
yayındır; kırk servislik bir sistemde tek bir kural değişikliği yüz yirmi iş kalemi eder ve
yayınlar birbirinden bağımsız olduğu için kuralın **her yerde aynı anda geçerli olduğu bir an
yoktur**.

Ağ yerleşiminde dokunulan servis sayısı **sıfır**dır. Kural bir kez yazılır, yan arabalara
dağıtılır ve uygulama kodu değişmez. Kural değişikliği başına iki iş kalemi, servis sayısından
bağımsızdır. Kırk servisli sistemde yıllık yedi yüz yirmi iş kalemi, iki yüz on ikiye iner.

Bu tek sütuna bakıldığında servis ağı her ölçekte kazanır. Öteki sütunlar bunu bozar.

## Üç Servis: Bedel Kazançtan Büyük

İlk satır ölçünün kırıldığı yerdir. Üç servisli sistemde kod yerleşimi yılda elli dört iş
kalemi, ağ yerleşimi altmış dört. Ağ **daha pahalı**dır ve nedeni sabit bedeldir: denetim
düzleminin kırk iş kalemi, üç servisin toplam kural değişikliği maliyetinden büyüktür.

Başabaş servis sayısı dörttür. Bunun altında kural değişikliğinden kazanılan iş, denetim
düzleminin bakımından azdır.

İkinci tablo aynı satırı öteki yönden okuyor. Üç servisli sistemde yan arabalar üç yüz seksen
dört megabayt bellek ve altıda üç çekirdek tüketiyor, her isteğe altı atlama ve iki virgül dört
milisaniye ekliyor ve **on dört yeni yüzey kalemi** getiriyor. Bu üç bedelin hiçbiri iş kalemi
defterinde görünmez.

Servis ağının kazandırmadığı durum budur ve nadir değildir: üç servisli sistemler çoğunluktadır.
Kararın "servis ağı iyi bir uygulamadır" cümlesiyle verildiği yerlerde ödenen bedel, kazanılan
altı iş kaleminin karşılığı değil, eksi on iş kalemi artı on dört yüzey kalemidir.

## Merkezî Kuralın Yanlış Kapattığı

`agda dokunulan` sütunundaki sıfır bir koşula bağlıdır: kuralın **her servise aynı biçimde**
uyması. Bu koşul çoğu kuralda tutmaz.

Zaman aşımını iki saniyeye indiren kural otuz sekiz servis için doğrudur; gecelik toplu işi
çağıran servis için değildir, çünkü o çağrı zaten yavaştır. Merkezde tek satırla yazılan kural,
o servisin bütün çağrılarını iki saniyede keser. Kod yerleşiminde bu sorun doğmaz — kural zaten
her serviste ayrı yazılıdır ve o servis kendi değerini korur. Merkezî yerleşimde çözüm bir
istisnadır ve istisna, kuralın kendisi kadar iş kalemi tutar: modelin sabitlerine göre her
istisna yılda iki iş kalemi, tıpkı bir kural gibi.

Bu, kursun "yanlış kapatma" sütununun servis ağındaki karşılığıdır. Kural değişikliğinde
dokunulan servis sayısını sıfıra indiren adım, kuralın **hangi servise ne kadar uyduğu**
sorusunu ortadan kaldırmaz; o soruyu kod tabanından yapılandırma dosyasına taşır ve orada
görünürlüğü azalır. Bir servisin kendi istisnasına kendi kodunda sahip olması bir gözden
geçirmede görülür; merkezî kural kümesindeki bir istisna, kümeyi okuyan kişinin dikkatine
bağlıdır.

Sayı olarak sonuç şudur: istisna sayısı arttıkça ağ tarafının yıllık iş kalemi kural sayısı gibi
büyür ve başabaş servis sayısı dörtten yukarı kayar. On istisnalı bir sistemde ağ tarafı yılda
yirmi iş kalemi daha eder ve başabaş noktası altı servise çıkar.

## İstek Başına Ödenen

İkinci tablonun ortası ölçek büyüdükçe **doymuyor**. İç çağrı sayısı dörtte duruyor — zincir
uzunluğu servis sayısıyla sınırsız artmaz — ve ek atlama onda, ek gecikme dört milisaniyede
sabitleniyor. Bu, servis ağının iyi haberidir: istek başına bedel ölçekle büyümüyor.

Dört milisaniye küçük görünür. Ölçüm ağının gecelik toplu işi her koşumda yüz binlerce iç çağrı
yapar ve orada dört milisaniye saatlere döner. Kenar önbelleğinden geçen bir pano isteğinde ise
hiç görünmez. Ek gecikmenin anlamı çağrı sayısıyla belirlenir, sayının kendisiyle değil.

Kaynak tüketimi ise ölçekle **doğrusal** büyüyor. Kırk servisli sistemde yan arabalar beş
gigabayt bellek ve sekiz çekirdek tutuyor. Bu, sekiz uygulama örneğinin kaynağıdır; servis ağı
çalışması için sistemin yüzde on beş ila yirmisi kadar bir donanımı kendine ayırır ve bu satır
hiçbir kural tartışmasında geçmez.

## Yan Arabanın Kendi Yüzeyi

Son sütun kursun ölçü birimidir. Her yan araba örneği iki kalem getirir.

Birincisi **yönetim ucudur**. Yan araba yapılandırmasını gösterir, ölçümlerini döker, kendini
yeniden yükler. Bu uç uygulamanın yanında, aynı ağ ad alanında dinler; ilk dersin saydığı
"yönetim ucu" kalemi artık makine başına değil, **örnek başına** vardır. Kırk servisli sistemde
seksen yönetim ucu.

İkincisi **kimliktir**. Yan arabalar birbirine şifreli konuşur ve her birinin bir sertifikası
olur. Bu, üçüncü dersin "uygulamada sonlandırma" satırının en uç hâlidir: sertifika artık altı
değil, seksen yerde durur. Dördüncü dersin otomasyonu burada zorunlu hâle gelir — seksen
sertifikayı elle yenilemek dokuz kalemde değil, seksen kalemde unutulur.

Üçüncüsü tek kalemdir ve en ağırıdır: **denetim düzlemi**. Bütün yan arabaların kuralını dağıtan
bileşen, her servise yazma yetkisi olan tek bir yerdir. Kural deposuyla birlikte iki kalem eder
ve ikisi de kapatılamaz — servis ağının varlık nedeni onlardır.

On dört kalemden kırk servisli sistemde yüz altmış ikiye çıkan bu sayım, ilk dersin tek bir
makinede saydığı on yedi kalemin yanına konmalıdır. Servis ağı trafik kurallarını tek yere
topladı ve yönetim uçlarını her yere dağıttı.

## Özet

- Kural değişikliğinde kod yerleşimi her servise dokunur (üç servis üç, kırk servis kırk), ağ
  yerleşimi hiçbirine; kırk servislik sistemde yıllık iş kalemi yedi yüz yirmiden iki yüz on
  ikiye iner.
- Gerçek ölçüm yan arabalı yolun her isteğe bir atlama ve bir bağlantı eklediğini doğruladı;
  ölçülen ek gecikme sıfır ile elli milisaniye bandının içinde kaldı ve ham süre basılmadı.
- Üç servisli sistemde ağ yerleşimi kod yerleşiminden pahalıdır: altmış dörde karşı elli dört iş
  kalemi. Başabaş servis sayısı dörttür ve denetim düzleminin sabit kırk iş kalemi bu eşiği belirler.
- İstek başına bedel ölçekle doymuyor — on atlama, dört milisaniye — ama kaynak tüketimi doğrusal
  büyüyor: kırk serviste beş gigabayt bellek ve sekiz çekirdek.
- Yan araba her örneğe iki yüzey kalemi ekler (yönetim ucu ve kimlik); üç serviste on dört,
  kırk serviste yüz altmış iki kalem. Denetim düzlemi ile kural deposu kapatılamaz kalemlerdir.

## Sonraki Adım

Bu konu isteğin yolunu baştan sona kurdu. Yol üç rolden geçiyor, vekil zincirinden geçerken
kaybolan dört bilgi aktarılıyor, şifre bir noktada sonlanıyor ve sertifikası kendini
tazeliyor, yanıt iki katmanda saklanıyor ve servisler arası trafik tek bir kural kümesine
bağlanıyor. Bütün bu ölçümler bir şeyi verili aldı.

İstemci bir yere bağlandı. Bağlandığı yerin **bir adı** vardı ve o ad bir adrese çözüldü.
İkinci derste `olcum.ornek.gecersiz` diye bir ad kullanıldı, üçüncü derste sertifika o ad için
düzenlendi sayıldı, beşinci derste bir kenar düğümüne düşen istemcinin oraya nasıl düştüğü hiç
sorulmadı. Adın kendisi, o adın hangi adresi gösterdiği, değiştiğinde eskisinin ne kadar süre
geçerli kaldığı ve o adı kimin adına kaydettiği bu konuda bir kez bile ölçülmedi. Sonraki konu
adın kendisini ele alır: kayıt kümesinin varsayılan hâli, yaşam süresinin bir karar olarak
sonuçları ve adı taşıyan kaydın kime ait olduğu.
