---
title: 'Sağlık Ucu İzleme'
source: 'https://academia.sh/tr/kurslar/dayaniklilik-kaliplari/saglik-ucu-izleme'
course: 'Dayanıklılık ve Güvenilirlik'
language: tr
updated: '2026-08-17T18:11:01+00:00'
license: 'CC BY-SA 4.0'
---

# Sağlık Ucu İzleme

Devralmayı besleyen sağlık ucunun içeriğinin tasarlanması: sığ denetim, hazır olma denetimi ve derin denetimin aynı arıza takviminde ölçülmesi, paylaşılan bir bağımlılığı denetime katmanın bütün kopyaları birden havuz dışına çıkarması, denetim aralığının algılama gecikmesi ile yanlış çıkarma arasındaki ödünleşimi ve denetimin bağımlılığa eklediği yükün sayılması.

Önceki dersin bütün kararları tek bir girdiye dayandı: sağlık denetiminin verdiği evet ya da
hayır. Eşiğin nasıl seçildiği, geri dönüşün ne zaman yapıldığı, hatta devralmanın hiç yapılıp
yapılmadığı bu tek bitin doğruluğuna bağlıydı. Modelin yarı düşük penceresinde 3.888,80 yazma,
sistem sağlıklı görünürken kayboldu — çünkü denetim yalnız "yanıt veriyor musun" diye soruyordu.

Sağlık denetiminin devralmayı ve yük dengeleyici havuzunu beslediği Veritabanı Yönetimi ve Trafik
Katmanı kurslarında kuruldu; sunum tarafındaki uç biçimi Sunucu Tarafı Temelleri kursunda tanıtıldı. Bu
ders o ucun **içeriğini** tasarlar: hangi soruyu sorduğu, bağımlılıklarını denetime katıp
katmadığı ve ne sıklıkla sorulduğu. Ucun topladığı ölçütlerin nereye gönderildiği, gösterge
tablosu ve uyarı eşiği bu kursun konusu değildir; Başarım Karşıt Kalıpları ve İzleme kursuna
aittir.

## Ucun Sorabileceği Dört Soru

**Sığ denetim** yalnız sürecin ayakta ve yanıt verebilir olduğunu sınar. Yanıtı hiçbir
bağımlılığa dokunmadan üretir, bu yüzden ucuzdur ve yanlış negatif vermez.

**Hazır olma denetimi** ayrı bir sorudur: süreç ayakta olabilir ama trafik almaya hazır
olmayabilir. Yeni başlamış bir kopya önbelleğini doldurmamış, yapılandırmasını okumamış ya da
göçünü bitirmemiş olabilir. Ayakta olmak ile hazır olmak ayrı iki durumdur ve tek bir uçta
birleştirildiklerinde ikisinden biri kaybolur.

**Derin denetim** kopyanın bağımlılıklarına dokunur. Burada iki tür bağımlılık ayrılır ve ayrım
bu dersin ana sonucudur: kopyanın **kendi yoluna** ait bağımlılık (bu kopyanın durum deposuna
yazabilmesi) ile **paylaşılan** bağımlılık (durum deposunun ayakta olması). Birincisi kopyalar
arasında farklıdır, ikincisi hepsinde aynıdır.

Aşağıdaki düzenek bir **modeldir**: üç kopya, bir paylaşılan durum deposu ve yalnız toplu akışı
besleyen bir ücretlendirme deposu. Tur soyut bir adımdır. Tur başına gelen istek karışımı K01'in
okuma–yazma oranına yakın seçildi: 8 okuma, 2 yazma, 1 toplu.

```js
// saglik/model.mjs — saglik ucunun icerigi MODELIDIR. Uc kopya, bir paylasilan durum deposu ve
// bir akisa ozel ucretlendirme deposu; tur soyut bir adimdir, olculmus sure degildir.
export const TUR = 130;
export const K3_DURDU = 82;   // k3 bu turda durdu; algilama gecikmesi buna gore olculur
export const KOPYA = ["k1", "k2", "k3"];
const P = (t, a) => a.some(([b, c]) => t >= b && t <= c);

export const takvim = {
  yariDusuk: { k1: [[20, 45]], k2: [], k3: [] },        // yaziyor gibi gorunur, depoya gitmez
  isiniyor: { k1: [], k2: [[1, 8], [60, 66]], k3: [] }, // surec ayakta, trafige hazir degil
  durdu: { k1: [], k2: [], k3: [[82, 95]] },            // surec yanit vermiyor
  gecici: { k1: [], k2: [], k3: [[50, 50], [58, 59]] }, // kisa yanitsizlik, kendiliginden doner
  durumDeposu: [[100, 110]],                            // paylasilan bagimlilik dustu
  ucretDeposu: [[115, 125]],                            // yalniz toplu akisi etkiler
};

export const durumDeposuAyakta = (t) => !P(t, takvim.durumDeposu);
export const ucretDeposuAyakta = (t) => !P(t, takvim.ucretDeposu);
export const surecAyakta = (k, t) => !P(t, takvim.durdu[k]) && !P(t, takvim.gecici[k]);
export const isiniyor = (k, t) => P(t, takvim.isiniyor[k]);
export const yolSaglam = (k, t) => !P(t, takvim.yariDusuk[k]);   // kopyanin kendi yazma yolu
export const okuyabilir = (k, t) => surecAyakta(k, t) && !isiniyor(k, t);

// Bes uc icerigi. Her biri kopya basina tek bir evet/hayir dondurur.
export const UC = {
  sig: (k, t) => surecAyakta(k, t),
  hazirOlma: (k, t) => okuyabilir(k, t),
  derinYerel: (k, t) => okuyabilir(k, t) && yolSaglam(k, t),
  derinPaylasilan: (k, t) => okuyabilir(k, t) && yolSaglam(k, t) && durumDeposuAyakta(t),
  derinHepsi: (k, t) => okuyabilir(k, t) && yolSaglam(k, t) && durumDeposuAyakta(t)
    && ucretDeposuAyakta(t),
};

const OKUMA = 8, YAZMA = 2, TOPLU = 1;   // tur basina istek: K01'in okuma/yazma oranina yakin

export function kosum(ucAdi, { aralik = 1, tur: N = TUR } = {}) {
  const uc = UC[ucAdi];
  const s = { disKopyaTur: 0, dusenOkuma: 0, dusenYazma: 0, dusenToplu: 0, sessiz: 0,
    bosaRed: 0, denetim: 0, yanlisCikarma: 0, algilama: null };
  let sira = 0, karar = Object.fromEntries(KOPYA.map((k) => [k, true])), oncekiKarar = { ...karar };

  for (let t = 1; t <= N; t += 1) {
    if ((t - 1) % aralik === 0) {                       // denetim turu
      oncekiKarar = { ...karar };
      for (const k of KOPYA) karar[k] = uc(k, t);
      s.denetim += KOPYA.length;
      for (const k of KOPYA)                            // gecici yanitsizlik havuzdan cikardi mi
        if (oncekiKarar[k] && karar[k] === false && P(t, takvim.gecici[k])) s.yanlisCikarma += 1;
      if (s.algilama === null && karar.k3 === false && P(t, takvim.durdu.k3))
        s.algilama = t - K3_DURDU;
    }
    const havuz = KOPYA.filter((k) => karar[k]);
    s.disKopyaTur += KOPYA.length - havuz.length;
    const varOkuyan = KOPYA.some((k) => okuyabilir(k, t));

    for (let i = 0; i < OKUMA; i += 1) {
      if (havuz.length === 0) { s.dusenOkuma += 1; if (varOkuyan) s.bosaRed += 1; continue; }
      const k = havuz[sira++ % havuz.length];
      if (okuyabilir(k, t) === false) s.dusenOkuma += 1;
    }
    for (let i = 0; i < YAZMA; i += 1) {
      if (havuz.length === 0) { s.dusenYazma += 1; continue; }
      const k = havuz[sira++ % havuz.length];
      if (okuyabilir(k, t) === false) { s.dusenYazma += 1; continue; }
      if (yolSaglam(k, t) === false) { s.sessiz += 1; continue; }   // kabul edildi, depoya gitmedi
      if (durumDeposuAyakta(t) === false) s.dusenYazma += 1;
    }
    for (let i = 0; i < TOPLU; i += 1) {
      if (havuz.length === 0 || ucretDeposuAyakta(t) === false) { s.dusenToplu += 1; continue; }
      sira += 1;
    }
  }
  return s;
}
```

```js
// saglik/olc.mjs — bes uc icerigi ayni ariza takviminde, ardindan denetim araliginin etkisi
import { kosum, TUR, KOPYA } from "./model.mjs";

const s = (x, n) => String(x).padStart(n);
console.log(`${TUR} tur, ${KOPYA.length} kopya, tur basina 8 okuma + 2 yazma + 1 toplu istek.`);
console.log("takvim: k1 20-45 yari dusuk, k2 1-8 ve 60-66 isiniyor, k3 50 ve 58-59 gecici " +
  "yanitsiz, 82-95 durdu, durum deposu 100-110, ucret deposu 115-125 dusuk.");
console.log();
console.log("uc icerigi      | havuz disi | dusen okuma | dusen yazma | dusen toplu | sessiz kayip | bosa red");
console.log("----------------|------------|-------------|-------------|-------------|--------------|---------");
for (const ad of ["sig", "hazirOlma", "derinYerel", "derinPaylasilan", "derinHepsi"]) {
  const r = kosum(ad);
  console.log(`${ad.padEnd(15)} | ${s(r.disKopyaTur, 10)} | ${s(r.dusenOkuma, 11)} | ` +
    `${s(r.dusenYazma, 11)} | ${s(r.dusenToplu, 11)} | ${s(r.sessiz, 12)} | ${s(r.bosaRed, 8)}`);
}

console.log();
console.log("aralik | denetim sayisi | algilama gecikmesi | yanlis cikarma | dusen okuma | sessiz kayip");
console.log("-------|----------------|--------------------|----------------|-------------|-------------");
for (const aralik of [1, 2, 4, 8]) {
  const r = kosum("derinYerel", { aralik });
  console.log(`${s(aralik, 6)} | ${s(r.denetim, 14)} | ${s(`${r.algilama} tur`, 18)} | ` +
    `${s(r.yanlisCikarma, 14)} | ${s(r.dusenOkuma, 11)} | ${s(r.sessiz, 12)}`);
}
```

```
130 tur, 3 kopya, tur basina 8 okuma + 2 yazma + 1 toplu istek.
takvim: k1 20-45 yari dusuk, k2 1-8 ve 60-66 isiniyor, k3 50 ve 58-59 gecici yanitsiz, 82-95 durdu, durum deposu 100-110, ucret deposu 115-125 dusuk.

uc icerigi      | havuz disi | dusen okuma | dusen yazma | dusen toplu | sessiz kayip | bosa red
----------------|------------|-------------|-------------|-------------|--------------|---------
sig             |         17 |          40 |          32 |          11 |           17 |        0
hazirOlma       |         32 |           0 |          22 |          11 |           17 |        0
derinYerel      |         58 |           0 |          22 |          11 |            0 |        0
derinPaylasilan |         91 |          88 |          22 |          22 |            0 |       88
derinHepsi      |        124 |         176 |          44 |          22 |            0 |      176

aralik | denetim sayisi | algilama gecikmesi | yanlis cikarma | dusen okuma | sessiz kayip
-------|----------------|--------------------|----------------|-------------|-------------
     1 |            390 |              0 tur |              2 |           0 |            0
     2 |            195 |              1 tur |              1 |          11 |            0
     4 |             99 |              3 tur |              0 |          19 |            0
     8 |             51 |              7 tur |              0 |          40 |            3
```

## Derinlik Nereye Kadar

İlk üç satır derinliğin kazandırdığını gösteriyor. Sığ denetim ısınmakta olan kopyayı havuzda
tuttu ve ona yönlenen 40 okuma ile 32 yazma düştü; hazır olma denetimi eklendiğinde düşen okuma
0'a, düşen yazma 22'ye indi. Kalan 22 yazma paylaşılan deponun düştüğü on bir turda oluşuyor ve
hiçbir uç içeriği onu kurtarmıyor — kopya sağlıklı olsa da yazacak yer yok.

Sütunun adı Veri Katmanı Ölçekleme kursundan gelir: **sessiz kayıp**, kabul edilmiş bir yazmanın
sahibine hiçbir şey söylenmeden geçersizleşmesidir. Orada nedeni çakışmaydı, burada yarı düşük
kopyadır; ölçü aynıdır.

Yerel derin denetim sessiz kaybı kaldırıyor: 17'den 0'a. Yarı düşük kopya artık havuzun dışında,
çünkü uç "yazabiliyor muyum" sorusuna dürüst yanıt veriyor. Bedeli havuz dışı kopya-tur sütununda:
32'den 58'e. Bu, önceki dersin çözemediği sorunun karşılığıdır ve bedeli yalnız bozuk kopyayı
havuzdan çıkarmaktır.

**Dördüncü satırda işaret dönüyor.** Paylaşılan durum deposu denetime katıldığında, depo düştüğü
anda üç kopya da aynı yanıtı veriyor ve üçü birden havuz dışına çıkıyor. Havuz boşalınca yalnız
yazma değil, **okuma da** reddediliyor: 88 düşen okuma, hepsi boşa red. Boşa red sütununun anlamı
tam olarak budur — en az bir kopya o isteği yanıtlayabilecek durumdayken reddedilen istek. Kenar
önbelleği ve kopyalardan okuma yolu ayaktaydı; denetim onları da kapattı. Düşen toplu iş de 11'den
22'ye çıktı.

Beşinci satır aynı hatayı bir kez daha yapıyor. Yalnız gün sonu ücretlendirmesini besleyen depo
denetime katıldığında, o depo düştüğünde takip sorgusu yanıtlayan kopyalar da havuz dışına
çıkıyor: boşa red 88'den 176'ya. Ücretlendirme akışının deposu ile takip sorgusunun yolu
arasında hiçbir bağ yokken, denetim ikisini birbirine bağladı.

Kural bu üç satırdan okunur: **uç, kopyanın komşularından daha kötü durumda olup olmadığını
sormalıdır, dünyanın iyi olup olmadığını değil.** Bütün kopyalarda aynı yanıtı verecek bir koşul
uca konursa, o koşul bozulduğunda havuzda kimse kalmaz ve yayılma kalıbın kendisinden gelir. Bu
yüzden paylaşılan bağımlılığın arızası devre kesici ile zarif bozulmanın konusudur — önceki
konuda ölçüldü — sağlık ucunun değil.

## Aralık Ne Kadar Sık

İkinci tablo aynı uç içeriğini (`derinYerel`) dört denetim aralığında koşturuyor. Aralık 1'de
denetim sayısı 390, algılama gecikmesi 0 tur, düşen okuma 0 — ama iki **yanlış çıkarma** var:
kendiliğinden dönecek kısa yanıtsızlıklar kopyayı havuzdan çıkardı. Aralık 4'te yanlış çıkarma
sıfırlanıyor, karşılığında `k3` kopyasının durduğu tur 3 tur sonra fark ediliyor ve o sürede
kopyaya yönlenen 19 okuma düşüyor. Aralık 8'de gecikme 7 tura, düşen okuma 40'a çıkıyor ve yarı
düşük kopya denetimler arasında kalarak 3 sessiz kayıp üretiyor.

Ödünleşim önceki dersin eşik ödünleşimiyle aynı biçimdedir ama ayrı bir eksendir: eşik kaç
denetimin üst üste başarısız olacağını, aralık denetimlerin ne kadar seyrek olacağını belirler.
İkisi çarpılır — aralık 4 ve eşik 3, gerçek bir arızanın en kötü durumda 12 tur boyunca fark
edilmemesi demektir.

## İki Günün Sayısı

Denetimin arızasız gündeki bedeli iki kalemden oluşur: bağımlılığa vurulan denetim yükü ve yanlış
çıkarmanın kalan kopyalara aktardığı istek. Birincisi derin denetimin doğrudan faturasıdır.

```js
// saglik/butce.mjs — denetimin arizasiz gundeki bedeli: bagimliliga vurulan denetim yuku ve
// yanlis cikarmanin kalan kopyalara aktardigi istek
const TUR_SN = 2;          // KU1 (varsayim): bir tur bir denetim araligi, 2 saniye
const DEPO = 138.89;       // K01: depoya ulasan istek/s
const TEPE_UC = 513.89;    // K01: tepe uctaki istek/s
const KESIK_AY = 20;       // KU3 (varsayim): ayda 20 gecici yanitsizlik
const b = (x, n = 2) => x.toFixed(n);

console.log(`${"kopya".padStart(6)}${"aralik".padStart(9)}${"denetim/s".padStart(12)}` +
  `${"depoya eklenen pay".padStart(20)}${"gunde denetim".padStart(15)}`);
for (const [kopya, aralik] of [[3, 1], [3, 4], [12, 1], [12, 4], [48, 1], [48, 4]]) {
  const sn = aralik * TUR_SN, hiz = kopya / sn;
  console.log(`${String(kopya).padStart(6)}${(sn + " sn").padStart(9)}${b(hiz).padStart(12)}` +
    `${("%" + b((100 * hiz) / DEPO)).padStart(20)}${Math.round(hiz * 86_400).toLocaleString("tr-TR").padStart(15)}`);
}

console.log(`\nyanlis cikarma: 3 kopyanin biri havuzdan cikinca kalan iki kopyanin her biri ` +
  `${b(TEPE_UC / 3)} yerine ${b(TEPE_UC / 2)} istek/s tasir (${b((TEPE_UC / 2) / (TEPE_UC / 3))} kat)`);
for (const aralik of [1, 2]) {
  const oran = aralik === 1 ? 2 / 3 : 1 / 3;      // modelden: 3 gecici yanitsizligin kaci yakalandi
  console.log(`aralik ${aralik}: ayda ${b(KESIK_AY * oran, 1)} yanlis cikarma, her biri en cok ` +
    `${aralik * TUR_SN} sn boyunca kapasiteyi ${b(100 / 3, 1)}% dusurur`);
}
```

```
 kopya   aralik   denetim/s  depoya eklenen pay  gunde denetim
     3     2 sn        1.50               %1.08        129.600
     3     8 sn        0.38               %0.27         32.400
    12     2 sn        6.00               %4.32        518.400
    12     8 sn        1.50               %1.08        129.600
    48     2 sn       24.00              %17.28      2.073.600
    48     8 sn        6.00               %4.32        518.400

yanlis cikarma: 3 kopyanin biri havuzdan cikinca kalan iki kopyanin her biri 171.30 yerine 256.94 istek/s tasir (1.50 kat)
aralik 1: ayda 13.3 yanlis cikarma, her biri en cok 2 sn boyunca kapasiteyi 33.3% dusurur
aralik 2: ayda 6.7 yanlis cikarma, her biri en cok 4 sn boyunca kapasiteyi 33.3% dusurur
```

Üç kopya ve iki saniyelik aralıkta derin denetim depoya saniyede 1,50 sorgu ekliyor; K01'in depoya
ulaşan 138,89 istek/s'sinin yüzde 1,08'i. Sayı kopya sayısıyla doğrusal büyüyor ve orada bir sınıra
çarpıyor: 48 kopyada aynı aralık yüzde 17,28 ek yük demektir. **Derin denetimin faturası kopya
sayısıyla ölçeklenir, iş yüküyle değil** — yani ölçekleme kararı denetim politikasını da
değiştirir. Aralığı dörde çıkarmak faturayı dörde bölüyor.

İkinci kalem yanlış çıkarmadır. Üç kopyalı bir havuzda bir kopya çıkınca kalan ikisi 171,30 yerine
256,94 istek/s taşır, yani 1,50 kat. Aralık 1 ile modelin yakaladığı yanlış çıkarma oranı üçte
ikidir; ayda 20 geçici yanıtsızlık varsayımıyla (KU3, önceki derste tanımlandı) ayda 13,3 kez
kapasitenin üçte biri iki saniyeliğine kayboluyor. Aralık 2'de sayı 6,7'ye iniyor ama her olayın
penceresi iki katına çıkıyor. Arızasız günün bedeli budur ve hiçbir arıza olmadan ödenir.

**Arızalı günün kazancı** birinci tablonun `sig` ile `derinYerel` satırları arasındadır: aynı arıza
takviminde 40 düşen okuma 0'a, 32 düşen yazma 22'ye, 17 sessiz kayıp 0'a iniyor ve boşa red 0'da
kalıyor. Aynı tablo kazancın nerede bittiğini de gösteriyor: bir adım fazla derinlik 88, iki adım
fazla derinlik 176 boşa red üretiyor.

## Özet

- Sağlık ucu tek bir soru değildir: sığ denetim sürecin ayakta olduğunu, hazır olma denetimi
  trafik alabildiğini, derin denetim bağımlılık yolunun çalıştığını sınar.
- Hazır olma denetimi eklendiğinde ısınan kopyaya yönlenen 40 okuma ile 10 yazma kurtuldu; yerel
  derin denetim eklendiğinde sessiz kayıp 17'den 0'a indi, bedeli havuz dışı kopya-turun 32'den
  58'e çıkmasıydı.
- Paylaşılan bağımlılığı denetime katmak yayılma üretir: depo düştüğünde üç kopya da havuz dışına
  çıktı ve 88 okuma, yanıtlanabilir olduğu hâlde reddedildi; akışa özel depo da katıldığında bu
  sayı 176'ya çıktı.
- Kural: uç kopyanın komşularından kötü durumda olup olmadığını sorar; bütün kopyalarda aynı yanıtı
  verecek bir koşul uca konursa havuz boşalır.
- Denetim aralığı ayrı bir eksendir: aralık 1'de 2 yanlış çıkarma ve 0 tur gecikme, aralık 8'de 0
  yanlış çıkarma ama 7 tur gecikme, 40 düşen okuma ve 3 sessiz kayıp.
- Arızasız günün bedeli sayılır: 3 kopya ve 2 saniyelik aralıkta derin denetim depoya yüzde 1,08 ek
  yük bindirir, 48 kopyada yüzde 17,28; yanlış çıkarma ayda 13,3 kez kalan kopyaların yükünü 1,50
  katına çıkarır.

## Sonraki Adım

Bu iki ders bir arızanın ne kadar sürede fark edildiğini ve ne kadar sürede devredildiğini saydı:
eşik, aralık, terfi ve geri dönüş turları. Sayılan şey hep aynı büyüklüktü — **kurtarmanın
süresi**. Ama önceki dersin yarı düşük penceresinde kaybolan yazmalar başka bir büyüklüktür ve bu
iki ders onu ölçemedi: sistem geri geldiğinde verinin ne kadarı geride kalmıştır? İki soru ayrı
eşikler ister ve ikisi de aynı bütçeden ödenir. Sonraki ders bu eşikleri adlandırır, yedekleme
sıklığı ile çoğaltma gecikmesine bağlayarak sayıya çevirir ve K01'in 43,2 dakikalık aylık
bütçesiyle karşılaştırır.
