---
title: 'Düğüm Bileşenleri'
source: 'https://academia.sh/tr/kurslar/orkestrasyon/dugum-bilesenleri'
course: 'Konteyner Orkestrasyonu'
language: tr
updated: '2026-08-17T18:09:07+00:00'
license: 'CC BY-SA 4.0'
---

# Düğüm Bileşenleri

Düğüm tarafındaki bilgi akışı ölçülür: aracı süreç ne bildiriyor, ne sıklıkta, bildirimin ne kadarı gerçekten değişmiş. Canlılık eşiği taranarak kümenin eski gerçeği doğru sandığı süre, yanlış ölü ilanı ve kayıp istek sayılır; ağ vekilinin kural sayısının servis sayısıyla, kural değişiminin ise düğüm sayısıyla büyüdüğü gösterilir.

Bir önceki dersin son senaryosu tek bir varsayımın kırıldığı yerdi: bildirim kaydedilemeyince
defter ölmüş bir kopyayı hâlâ çalışıyor saydı. O varsayım — düğümlerin ne çalıştırdıklarını doğru
ve zamanında bildirmesi — denetim düzleminin bütün kararlarının altındadır. Bu ders düğüm tarafını
parçalarına ayırır ve bildirimin kendisini ölçer.

Üç parça vardır. **Aracı süreç** düğümün deftere bakan yüzüdür: kendine atanmış kopyaları okur,
çalıştırılmasını ister ve sonucu geri bildirir. **Çalışma zamanı** çıktıyı gerçekten çalıştıran
parçadır; yalıtımı ve kaynak sınırları bir önceki kursta ölçülmüştü, burada yalnız aracı sürece
durum döndüren taraf olarak durur. **Ağ vekili** bir servis adını o an çalışan kopyalara çeviren
kural kümesini düğümde tutar.

Ölçüm yine **bölgesel ölçüm ağı** üzerindedir ve **kurgudur**; koşan şey gerçek bir küme değil,
`node` ile kurulmuş bir **modeldir**.

**KM13.** Düğüm tarafı üç parçadır: aracı süreç, çalışma zamanı, ağ vekili.
**KM14.** Aracı süreç her 10 saniyede bir bildirir; bildirim düğüm başına 3 sabit kalem (sağlık,
toplam ve kullanılan kapasite) ve kopya başına 2 kalem (durum, kaynak kullanımı) taşır.
**KM15.** Bir periyotta gerçekten değişen kalem oranı 0,02'dir.
**KM16.** Canlılık eşiği E'dir: son bildirimden E saniye geçen düğüm bilinmiyor sayılır ve
üzerindeki kopyalar ölü ilan edilip yeniden yaratılır.
**KM17.** Bir günde 4 kalıcı düğüm arızası ve 30 geçici bildirim kesintisi (5–90 saniye) olur;
üreteci kendimiz yazdık, tohum `20260403` çıktıda görünür.
**KM18.** Ağ vekili defteri her 5 saniyede okur; düğüm başına kural sayısı servis girişi ile kopya
yönlendirme kurallarının toplamıdır, kopya başına istek hızı saniyede 80'dir.

## Aracı Sürecin Bildirdiği

```js
// dugum.mjs — dugum tarafinin bildirdigi bilgi ve bildirimin kume olcegindeki yuku. Model.
export const P = 10;                     // bildirim periyodu (saniye)
const SABIT = 3;                         // saglik, toplam kapasite, kullanilan kapasite
export const kalem = (kopya) => SABIT + 2 * kopya;   // kopya basina: durum + kaynak kullanimi
export const DEGISIM = 0.02;             // bir periyotta gercekten degisen kalem orani

if (import.meta.url === `file://${process.argv[1]}`) {
  console.log("dugum  kopya  bildirim/dugum  kalem/sn  gunluk kalem  yazma/sn  yalniz-degisen/sn");
  for (const M of [1, 3, 10, 30, 100, 300]) {
    const kopya = 8, k = kalem(kopya), kalemSn = (M * k) / P;
    console.log(`${String(M).padStart(5)}${String(kopya).padStart(7)}${String(k).padStart(16)}` +
      `${kalemSn.toFixed(1).padStart(10)}${(kalemSn * 86400).toFixed(0).padStart(14)}` +
      `${(M / P).toFixed(1).padStart(10)}${(kalemSn * DEGISIM).toFixed(2).padStart(19)}`);
  }
}
```

```
dugum  kopya  bildirim/dugum  kalem/sn  gunluk kalem  yazma/sn  yalniz-degisen/sn
    1      8              19       1.9        164160       0.1               0.04
    3      8              19       5.7        492480       0.3               0.11
   10      8              19      19.0       1641600       1.0               0.38
   30      8              19      57.0       4924800       3.0               1.14
  100      8              19     190.0      16416000      10.0               3.80
  300      8              19     570.0      49248000      30.0              11.40
```

Bildirimin içeriği azdır: sekiz kopyalı bir düğüm her periyotta 19 kalem gönderir. Yükü yapan şey
içerik değil **sıklıktır**. Üç yüz düğümlü bir kümede saniyede 570 kalem, günde 49 milyon kalem
bildirilir; bunun için düğümler saniyede 30 yazma üretir.

Son sütun asıl sayıyı veriyor. Bildirilen 570 kalemin gerçekten değişmiş olanı **11,4'tür** —
yüzde iki. Kalan yüzde doksan sekiz, hiçbir şeyin değişmediğini söylemenin bedelidir. Bu ölçü
bir önceki dersin doğrulama turunun düğüm tarafındaki karşılığıdır: orada denetim düzlemi 0 yazma
için 26 kalem okuyordu, burada düğümler hiçbir değişiklik olmadığı için 558 kalem gönderiyor.

Bu yükü kesmenin kolay göründüğü yer bir tuzaktır. Yalnız değişeni bildirmek kalem sayısını
elliye bölerdi, ama kümenin canlılık kararı bildirimin **içeriğine** değil **varlığına** dayanır.
Susan bir düğüm ile "hiçbir şey değişmedi" diyen bir düğüm defterde aynı görünür; ikisini ayırt
eden tek şey bildirimin gelip gelmediğidir. Bu yüzden bildirim boşken bile gönderilir ve bildirim
yükünün büyük kısmı **bilginin kendisi için değil, kanıtı için** ödenir.

Bildirimin **kapsamı** ayrı bir sınırdır. Aracı süreç çalışma zamanına kopyanın ayakta olup
olmadığını sorar ve aldığı yanıtı iletir; kopyanın **işini yapıp yapmadığını** sormaz. Ölçüm ağında
bir toplayıcı kopyası ayakta durup sayaç okumalarını hiç işlemiyor olabilir — süreç yaşıyordur,
kaynak kullanımı düşüktür, bildirim `calisiyor` der. Defterde bu kopya sağlıklıdır, ağ vekili ona
trafik yollar ve denetleyici yöneticisi eksik kopya görmediği için hiçbir iş yapmaz. Üç bileşenin
üçü de doğru çalışır ve sonuç yanlıştır, çünkü **kararın dayandığı kalem bildirimde yoktur**.
Kapsamı genişletmek — kopyanın kendi durumunu ayrıca bildirmesini istemek — bu kalemi ekler,
ama beraberinde ayrı bir soru getirir: o bildirimi kim, ne sıklıkta ve neye bakarak üretecek.

## Kümenin Eski Gerçeği Doğru Sandığı Süre

```js
// eski-gercek.mjs — bildirim kaybolunca kume ne kadar sure eski gercegi dogru saniyor.
import { P } from "./dugum.mjs";
const uretec = (tohum) => { let s = tohum >>> 0;          // kendi uretecimiz; tohum gorunur
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const GUN = 86400, KOPYA = 3, ISTEK = 80, V = 5;   // dugum basina kopya, kopya basina istek/sn,
const rnd = uretec(20260403);                      // V: ag vekilinin depoyu okuma periyodu
const ariza = Array.from({ length: 4 }, () => rnd() * GUN);            // kalici dugum arizasi
const kesinti = Array.from({ length: 30 }, () => ({ t: rnd() * GUN, d: 5 + rnd() * 85 }));

console.log(`kesintilerin en uzunu ${Math.max(...kesinti.map((k) => k.d)).toFixed(1)} sn` +
  `   bildirim periyodu ${P} sn   vekil okuma periyodu ${V} sn`);
console.log("esik  ort-fark-etme  en-kotu  yanlis-olu-ilani  bosuna-kopya  kayip-istek");
for (const E of [20, 30, 40, 60, 90, 100, 120, 300]) {
  const g = ariza.map((t) => Math.floor(t / P) * P + E - t);           // eski gercegin suresi
  const yanlis = kesinti.filter((k) => Math.floor(k.t / P) * P + E < k.t + k.d).length;
  const kayip = g.reduce((s, x) => s + (x + V) * KOPYA * ISTEK, 0);
  console.log(`${String(E).padStart(4)}${(g.reduce((a, b) => a + b) / g.length).toFixed(1).padStart(15)}` +
    `${Math.max(...g).toFixed(1).padStart(9)}${String(yanlis).padStart(18)}` +
    `${String(yanlis * KOPYA).padStart(14)}${kayip.toFixed(0).padStart(13)}`);
}
```

```
kesintilerin en uzunu 84.6 sn   bildirim periyodu 10 sn   vekil okuma periyodu 5 sn
esik  ort-fark-etme  en-kotu  yanlis-olu-ilani  bosuna-kopya  kayip-istek
  20           17.3     19.9                26            78        21408
  30           27.3     29.9                21            63        31008
  40           37.3     39.9                19            57        40608
  60           57.3     59.9                13            39        59808
  90           87.3     89.9                 2             6        88608
 100           97.3     99.9                 0             0        98208
 120          117.3    119.9                 0             0       117408
 300          297.3    299.9                 0             0       290208
```

Birinci sütun kümenin yanıldığı süredir. Eşik ne olursa olsun küme bir arızayı **en az** E eksi
bir periyot, **en çok** E saniye sonra öğrenir: 40 saniyelik eşikte ortalama 37,3 saniye boyunca
ölü bir düğümü canlı sayar. Bu süre sıfırlanamaz, çünkü bir arızanın kendini bildirmesi diye bir
şey yoktur — kümenin elindeki tek kanıt gelmeyen bildirimdir ve gelmeyen bir şeyin ne zaman
gelmediğine karar vermek için beklemek gerekir.

İkinci ve üçüncü sütunlar bekleme süresinin kısaltılmasının bedelidir. Eşik 20 saniyeye
indirildiğinde otuz geçici kesintinin **yirmi altısı** kalıcı arıza sanıldı; küme 78 kopyayı
boşuna ölü ilan edip yerine yenisini açtı — üstelik eski kopyalar ölmemişti, düğüm birkaç saniye
sonra geri döndü. Eşik büyüdükçe bu sayı düşüyor: 60 saniyede 13, 90 saniyede 2, 100 saniyede
sıfır.

Sıfırın nerede olduğu tesadüf değil. Kesintilerin en uzunu 84,6 saniyedir ve bildirim periyodu 10
saniyedir; eşiğin bu ikisinin toplamını geçtiği ilk basamakta yanlış ilan biter. **Doğru eşik
kümenin kendi ölçülerinden değil, ağın davranışından türer** — kümenin bilmediği ve ölçmediği bir
dağılımın en uzun kuyruğundan. Kesintiler bir gün 84,6 yerine 130 saniye sürerse 100 saniyelik
eşik sessizce yanlış ilan üretmeye başlar ve bunun kümede bir alarmı yoktur.

Son sütun ödemenin öteki yarısıdır. Ağ vekilinin kuralı ancak kopya ölü ilan edildikten sonra
güncellendiği için, o ana kadar gelen istekler çalışmayan kopyalara gönderilir. Yanlış ilanı
sıfırlayan 100 saniyelik eşikte gün boyunca **98.208 istek** ölü kopyalara gitti; 20 saniyelik
eşikte bu sayı 21.408'di. İki uç arasındaki seçim bir ayar değil, iki yanlışın paylaştırılmasıdır:
hızlı davranan küme sağlam kopyaları öldürür, sabırlı küme ölü kopyalara trafik yollar. Hiçbir eşik ikisini birden sıfırlamaz ve ikisini birden sıfırlayacak bilgi düğümde yoktur. Ölçüm
ağında bunun karşılığı somuttur — 98 bin sayaç okuma isteği yanıtsız kalır ve gecelik toplu iş
eksik veriyle başlar.

## Bildirim Gecikmesi Nerede Birikiyor

Bir kopyanın düşmesi ile bunun deftere geçip karara dönüşmesi arasında dört ayrı bekleme vardır ve
her biri kendi periyodunu bekletir.

```js
// gecikme.mjs — bir olayin dorda bolunmus bildirim gecikmesi. Her asama kendi periyodunu bekletir.
import { P } from "./dugum.mjs";
const uretec = (tohum) => { let s = tohum >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const rnd = uretec(20260404), N = 20000;
const C = 2, YAZ = 0.05, U = 15;        // calisma zamani yoklama, depo yazma, uzlasma periyodu
const asama = [["calisma zamani yoklama", C], ["araci surec bildirimi", P],
  ["arayuz + depo yazma", 0], ["denetleyici yoneticisi turu", U]];

let toplam = new Array(N).fill(0);
console.log("asama                         periyot  ort(sn)  en kotu(sn)  yigilmis ort(sn)");
for (const [ad, periyot] of asama) {
  const pay = toplam.map(() => (periyot ? rnd() * periyot : YAZ));
  toplam = toplam.map((x, i) => x + pay[i]);
  console.log(`${ad.padEnd(29)}${(periyot || YAZ).toFixed(2).padStart(8)}` +
    `${(pay.reduce((a, b) => a + b) / N).toFixed(2).padStart(9)}` +
    `${Math.max(...pay).toFixed(2).padStart(13)}` +
    `${(toplam.reduce((a, b) => a + b) / N).toFixed(2).padStart(18)}`);
}
console.log(`olay ${N}   en kotu uctan uca ${Math.max(...toplam).toFixed(2)} sn` +
  `   asama sayisi ${asama.length}`);
```

```
asama                         periyot  ort(sn)  en kotu(sn)  yigilmis ort(sn)
calisma zamani yoklama           2.00     1.00         2.00              1.00
araci surec bildirimi           10.00     4.99        10.00              5.99
arayuz + depo yazma              0.05     0.05         0.05              6.04
denetleyici yoneticisi turu     15.00     7.49        15.00             13.53
olay 20000   en kotu uctan uca 26.36 sn   asama sayisi 4
```

Ortalama uçtan uca gecikme 13,53 saniye, en kötüsü 26,36 saniyedir. Dağılım öğreticidir:
gecikmenin 1,00 saniyesi çalışma zamanının yoklamasından, 4,99 saniyesi aracı sürecin bildirim
periyodundan, 0,05 saniyesi yazma işleminden, **7,49 saniyesi denetleyici yöneticisinin turundan**
gelir. Yani gecikmenin yarısından fazlası düğüm tarafında değil, denetim düzleminin kendi
periyodundadır.

Bu ayrım hangi ayarın işe yaradığını belirler. Aracı sürecin bildirim periyodunu ikiye bölmek
ortalamayı 2,5 saniye düşürür ve bildirim yükünü ikiye katlar; denetleyici yöneticisinin tur
periyodunu ikiye bölmek 3,75 saniye düşürür ve düğümlere hiçbir yük bindirmez, ama defter okuma
yükünü ikiye katlar. **Aynı gecikme iki ayrı yerde ve iki ayrı fiyata satılır**; hangi ayarın
ucuz olduğu kümenin nerede darlaştığına bağlıdır.

## Ağ Vekilinin Kural Sayısı

```js
// vekil.mjs — ag vekilinin kural sayisi servis sayisiyla nasil buyuyor; degisim nereye yayiliyor.
const M = 30, r = 5, V = 5, DEGISIKLIK = 200;   // dugum, kopya/servis, okuma periyodu, kopya/gun
const kural = (S) => S * (1 + r);               // dugum basina: servis girisi + kopya yonlendirme

console.log(`dugum ${M}   kopya/servis ${r}   vekil okuma periyodu ${V} sn`);
console.log("servis  kopya  kural/dugum  kume kurali  tek degisiklik  okunan kalem/sn  gunluk yazma");
for (const S of [2, 4, 8, 16, 32, 64]) {
  console.log(`${String(S).padStart(6)}${String(S * r).padStart(7)}${String(kural(S)).padStart(13)}` +
    `${String(M * kural(S)).padStart(13)}${String(M).padStart(16)}` +
    `${((M * S * r) / V).toFixed(0).padStart(17)}${String(DEGISIKLIK * M).padStart(14)}`);
}
```

```
dugum 30   kopya/servis 5   vekil okuma periyodu 5 sn
servis  kopya  kural/dugum  kume kurali  tek degisiklik  okunan kalem/sn  gunluk yazma
     2     10           12          360              30               60          6000
     4     20           24          720              30              120          6000
     8     40           48         1440              30              240          6000
    16     80           96         2880              30              480          6000
    32    160          192         5760              30              960          6000
    64    320          384        11520              30             1920          6000
```

İki sütun iki ayrı eksende büyüyor. **Kural sayısı servis sayısıyla** büyür: iki serviste düğüm
başına 12 kural, altmış dört serviste 384. Küme geneli bunun düğüm sayısıyla çarpımıdır ve 11.520
kurala ulaşır, çünkü aynı kural kümesi otuz düğümün her birinde ayrı ayrı durur. Vekilin defteri
okuma yükü de aynı eksende büyür: saniyede 60 kalemden 1.920 kaleme.

**Değişimin yayılımı ise servis sayısından bağımsızdır.** Tek bir kopyanın doğması ya da ölmesi,
kaç servis olursa olsun, otuz düğümde otuz kural yazması doğurur — çünkü her düğümün o servise
erişebilmesi gerekir. Günde iki yüz kopya değişikliği 6.000 kural yazmasına çıkar ve bu sayı
servis sayısı otuz iki katına çıksa da değişmez.

Ayrım işletim açısından önemlidir: yeni servis eklemek **durağan** maliyeti büyütür (kural sayısı,
bellek, okuma yükü), düğüm eklemek ya da kopyaları sık değiştirmek **akan** maliyeti büyütür
(kural yazma, yayılma penceresi). Bir önceki bölümdeki kayıp istek sayısı da bu pencerede birikir:
kopya ölü ilan edildikten sonra kuralın güncellenmesi vekilin okuma periyodu kadar daha gecikir.
Bu beş saniye otuz düğümün her birinde ayrı ayrı ve farklı anlarda kapanır; kural değişimi kümeye
tek bir anda değil, bir pencere boyunca yayılır.

## Özet

- Sekiz kopyalı bir düğüm her periyotta 19 kalem bildirir; 300 düğümde bu günde 49 milyon kalem
  eder ve bunun yalnız 11,4 kalem/saniyesi gerçekten değişmiştir — kalan yüzde doksan sekiz,
  bilginin değil düğümün hâlâ ayakta olduğunun kanıtı için ödenir.
- Bir olayın karara dönüşmesi dört beklemeden geçer ve ortalama 13,53, en kötü 26,36 saniye sürer;
  bunun 7,49 saniyesi düğümden değil denetleyici yöneticisinin tur periyodundan gelir.
- Küme bir arızayı en az eşik eksi bir periyot, en çok eşik kadar sonra öğrenir; 40 saniyelik
  eşikte ortalama 37,3 saniye boyunca ölü bir düğümü canlı sayar ve bu süre sıfırlanamaz.
- Eşik 20 saniyeye indirilince 30 geçici kesintinin 26'sı kalıcı arıza sanıldı ve 78 kopya boşuna
  açıldı; yanlış ilan ancak eşik en uzun kesinti (84,6 sn) ile bir bildirim periyodunun toplamını
  geçince, 100 saniyede sıfırlandı.
- Yanlış ilanı sıfırlayan eşikte ölü kopyalara giden istek 98.208'e çıktı; 20 saniyelik eşikte
  21.408'di — iki uç arasındaki seçim iki yanlışın paylaştırılmasıdır.
- Ağ vekilinin kural sayısı servis sayısıyla büyür (12 → 384 düğüm başına, küme geneli 11.520),
  değişimin yayılımı ise servis sayısından bağımsızdır: tek kopya değişikliği 30 düğümde 30 kural
  yazması, günde 6.000.

## Sonraki Adım

İki ders iki tarafı ayrı ayrı ölçtü: denetim düzlemi kararı üretiyor, düğümler durumu bildiriyor.
İkisini birbirine bağlayan şey henüz adlandırılmadı — istenen durum ile gerçek durumun sürekli
karşılaştırılıp farkın kapatılması. Bir sonraki ders bu konunun merkezidir ve **uzlaşma
döngüsünü** küme ölçeğinde gerçekten yazar: yakınsama turu, tur başına iş, ve bu dersin bıraktığı
soru — rapor gecikmesi büyüdükçe döngü kaç kopyayı gereksiz açıyor, kaçını boşuna siliyor, ve
döngü periyodu ile rapor gecikmesi arasında nasıl bir ilişki var.
