---
title: 'Nöbet Düzeni'
source: 'https://academia.sh/tr/kurslar/devops-gozlemlenebilirlik/nobet-duzeni'
course: 'Gözlemlenebilirlik ve İşletim'
language: tr
updated: '2026-08-17T18:09:05+00:00'
license: 'CC BY-SA 4.0'
---

# Nöbet Düzeni

Nöbetin kendi bedeli: bir yıllık 136 çağrının 61'inin gece gelmesi, sekiz sorudan beşinin çizelgeden yanıtlanıp üçünün yanıtsız kalması, kişi başına yıllık yükün üç kişilik ekipte 17,3 nöbet haftası ve 118,7 toparlanma saatine çıkması, ortalama bandın sekiz kişide geçilmesine karşılık en yüklü kişinin hiçbir düzende banda girmemesi ve gecelik toplu işin saatini kaydırmanın eşiği sekiz kişiden dört kişiye indirmesi.

Sinyal üretildi, süzüldü ve doğrulandı. Ölçüt toplandı, günlük ayrıştırıldı, gösterge tablosu
kuruldu, uyarı kuralı bir eşiğe bağlandı. Zincirin sonunda duran bir gösterge değil, saat 02.40'ta
telefonu çalan bir insandır.

**Nöbet düzeni**, hangi çağrının hangi anda kime gideceğini önceden belirleyen çizelgedir. M20/K05
`İşletim Devri` dersi tam devir ile paylaşımlı nöbeti karşılaştırıp **devrin** bedelini saydı;
burada nöbet biçimi verilidir, ölçülen **nöbetin kendi bedelidir**: kişi başına yıllık nöbet
haftası, gece uyandırma ve **toparlanma penceresi**.

## Çizelge, Kapsama ve Soru Kümesi

Örnek, kursun kurgu **bölgesel ölçüm ağı**dır: su sayacı okuma toplayıcı, doğrulayıcı, faturalama
ve iş emri servisleri. Ağ da nöbet de kurgudur; gerçek bir çizelge ya da çağrı kaydı yoktur.

**OY1:** Dört servis tek ekibin nöbetindedir; gecelik toplu iş 02.00'de başlar, iki saat sürer.
**OY2:** Yıl 52 haftadır; nöbet sırayla devreder, vardiya 1 ya da 2 hafta tutar, ekip sekiz kişilik
havuzun ilk `n` kişisidir. **OY3:** 00.00–06.00 arasında gelen çağrı uykudan kaldırır, gündüz gelen
kaldırmaz. **OY4:** Gece uyandırmasının toparlanma penceresi 4 saattir; aynı vardiyada her ek
uyandırma pencereyi 2 saat büyütür, vardiya devrinde birikim sıfırlanır. **OY5:** Nöbetçi çağrının
servisine dokunamıyorsa sırada onu kapsayan ilk kişi **yedek** olarak uyandırılır (4 saatlik
pencere) ve ilk adım 10 yerine 35 dakikada başlar. **OY6:** Bant, kişi başına yılda en çok 13 nöbet
haftası, 12 gece uyandırma ve 60 toparlanma saatidir.

```js
// nobet/duzen.mjs — kurgu bolgesel olcum aginin nobet duzeni modeli (model): gercek bir nobet
// cizelgesi, cagri kaydi ya da kisi yok; yil bir tur dizisidir. Rastgelelik kendi uretecimizden.

export const HAFTA = 52, GUN = 7, SAAT = 24, YIL = HAFTA * GUN;
export const SERVIS = ["okuma-toplayici", "dogrulayici", "faturalama", "is-emri"];
export const GECE_SON = 6, TOPLU_IS = 2;  // 00-06 arasi cagri uyandirir; toplu is 02'de baslar
export const TOPARLANMA = 4, BIRIKIM = 2; // ilk uyandirma 4 saat, ayni vardiyada her ek +2 saat
export const YEDEK_PENCERE = 4;           // yedek de uyandirilir: kendi 4 saatlik penceresi
export const ILK_ADIM = 10, YEDEK_ADIM = 35;   // ilk adima baslama gecikmesi (dakika)
export const ESIK = { nobet: 13, gece: 12, toparlanma: 60 };   // kisi basina yillik bantlar

// gunluk cagri olasiligi ve cagrinin gecelik toplu is penceresine dusme payi
export const ORAN = { "okuma-toplayici": 0.16, dogrulayici: 0.09, faturalama: 0.06, "is-emri": 0.05 };
export const TOPLU = { "okuma-toplayici": 0.40, dogrulayici: 0.35, faturalama: 0.30, "is-emri": 0.10 };

// Kapsama: havuzun sekiz kisisi ve dokunabildigi servisler. Ilk uc kisi dort servisi de kapsar.
export const KAPSAM = `
  k1  okuma-toplayici dogrulayici faturalama
  k2  dogrulayici is-emri
  k3  okuma-toplayici faturalama is-emri
  k4  okuma-toplayici dogrulayici
  k5  faturalama is-emri
  k6  okuma-toplayici is-emri
  k7  dogrulayici faturalama
  k8  okuma-toplayici dogrulayici faturalama is-emri`
  .trim().split("\n").map((r) => { const [ad, ...s] = r.trim().split(/\s+/); return { ad, s }; });

// kaydirmali uretec; tohum gorunur, dizi kosumdan kosuma ayni
export function uretec(tohum) {
  let x = tohum >>> 0 || 1;
  return () => { x ^= x << 13; x >>>= 0; x ^= x >>> 17; x ^= x << 5; x >>>= 0;
    return x / 4294967296; };
}

// topluSaat: ayni tohumda cagri kumesi aynidir, yalnizca toplu ise bagli cagrilarin saati kayar.
export function cagrilar(tohum, topluSaat = TOPLU_IS) {
  const r = uretec(tohum), liste = [];
  for (let g = 0; g < YIL; g++)
    for (const s of SERVIS) {
      if (r() >= ORAN[s]) continue;
      const toplu = r() < TOPLU[s];
      const saat = toplu ? topluSaat + Math.floor(r() * 2) : Math.floor(r() * SAAT);
      liste.push({ gun: g, saat, servis: s, toplu, gece: saat < GECE_SON });
    }
  return liste;
}

// duzen: n kisi, vardiya v hafta. "dagitik" karsit kosumda cizelge yoktur, gece cagrisi
// ekibin tamamina duser. kos(): kisi basina yillik nobet/uyandirma/toparlanma sayaci.
export function kos(cagri, n, v, dagitik = false) {
  const kisi = KAPSAM.slice(0, n).map((k) => ({ ...k, hafta: 0, uyandi: 0, yedek: 0,
    toparlanma: 0, vardiya: -1, ardisik: 0 }));
  let disi = 0, gecikme = 0;

  for (let h = 0; h < HAFTA; h++) kisi[Math.floor(h / v) % n].hafta++;
  for (const c of cagri) {
    const vardiya = Math.floor(c.gun / (GUN * v));
    const i = vardiya % n, nobetci = kisi[i];
    const yerinde = dagitik ? kisi.some((k) => k.s.includes(c.servis))
      : nobetci.s.includes(c.servis);
    if (!yerinde) disi++;
    gecikme += yerinde ? ILK_ADIM : YEDEK_ADIM;
    if (!c.gece) continue;
    if (dagitik) {                                  // duzen yok: gece cagrisi herkesi kaldirir
      for (const k of kisi) { k.uyandi++; k.toparlanma += TOPARLANMA; }
      continue;
    }
    if (nobetci.vardiya !== vardiya) { nobetci.vardiya = vardiya; nobetci.ardisik = 0; }
    nobetci.uyandi++;
    nobetci.toparlanma += TOPARLANMA + BIRIKIM * nobetci.ardisik++;
    if (yerinde) continue;
    for (let d = 1; d < n; d++) {                   // kapsama disi: yedek de uyandirilir
      const y = kisi[(i + d) % n];
      if (!y.s.includes(c.servis)) continue;
      y.uyandi++; y.yedek++; y.toparlanma += YEDEK_PENCERE;
      break;
    }
  }
  const en = (f) => Math.max(...kisi.map(f));
  const ort = (f) => kisi.reduce((a, k) => a + f(k), 0) / n;
  const bant = (h, u, t) => h <= ESIK.nobet && u <= ESIK.gece && t <= ESIK.toparlanma;
  return { n, v, kisi, disi,
    hafta: ort((k) => k.hafta), uyandi: ort((k) => k.uyandi), enUyandi: en((k) => k.uyandi),
    toparlanma: ort((k) => k.toparlanma), enToparlanma: en((k) => k.toparlanma),
    yedek: kisi.reduce((a, k) => a + k.yedek, 0), gecikme: gecikme / cagri.length,
    ortBant: bant(ort((k) => k.hafta), ort((k) => k.uyandi), ort((k) => k.toparlanma)),
    kisiBant: kisi.every((k) => bant(k.hafta, k.uyandi, k.toparlanma)) };
}
```

```js
// nobet/olc.mjs — nobetin kendi bedeli: ekip buyuklugu ve vardiya uzunlugu taramasi.
import { cagrilar, kos, KAPSAM, ESIK, HAFTA, YEDEK_PENCERE } from "./duzen.mjs";

const TOHUM = 20260615;
const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const s1 = (x) => x.toFixed(1);
const ea = (b) => (b ? "evet" : "hayir");

const C = cagrilar(TOHUM);
const gece = C.filter((c) => c.gece);
console.log(`tohum ${TOHUM}: ${HAFTA} haftada ${C.length} cagri, ${gece.length} tanesi gece ` +
  `(${gece.filter((c) => c.toplu).length} tanesi gecelik toplu is penceresinde)`);

const S = [-6, -11, 12, 16, 18, 10, 10];
console.log("\n1. nobet duzeni taramasi (kisi basina yillik; ort / en yuklu kisi)");
yaz(S, "kisi", "vardiya", "nobet haf.", "uyandirma", "toparlanma saati", "ort bant", "kisi bant");
const tarama = [];
for (const n of [3, 4, 5, 6, 8])
  for (const v of [1, 2]) {
    const R = kos(C, n, v);
    tarama.push(R);
    yaz(S, n, `${v} haf.`, s1(R.hafta), `${s1(R.uyandi)} / ${R.enUyandi}`,
      `${s1(R.toparlanma)} / ${s1(R.enToparlanma)}`, ea(R.ortBant), ea(R.kisiBant));
  }
const D = kos(C, 5, 1, true);
yaz(S, 5, "duzen yok", "-", `${s1(D.uyandi)} / ${D.enUyandi}`,
  `${s1(D.toparlanma)} / ${s1(D.enToparlanma)}`, ea(D.ortBant), ea(D.kisiBant));
console.log(`bant: nobet <= ${ESIK.nobet} haf., uyandirma <= ${ESIK.gece}, ` +
  `toparlanma <= ${ESIK.toparlanma} saat`);

const Q = [-42, 20, 8];
console.log("\n2. nobet duzeninin yanitladigi soru kumesi");
yaz(Q, "soru", "veri", "yanit");
const SORU = [
  ["gece 02.40'ta kim nobetci", "nobet cizelgesi", true],
  ["nobet ne zaman devrediyor", "nobet cizelgesi", true],
  ["nobetci bu servise dokunabiliyor mu", "kapsama cizelgesi", true],
  ["dokunamiyorsa kim, ne zaman cagrilir", "kapsama cizelgesi", true],
  ["nobetci son otuz gunde kac kez uyandi", "uyandirma kaydi", true],
  ["cagri hangi adimla kapaniyor", "-", false],
  ["uyandirmadan sonra kac saat uretken degil", "-", false],
  ["bu duzen bir yil surdurulur mu", "-", false]];
for (const [q, d, y] of SORU) yaz(Q, q, d, y ? "evet" : "hayir");
console.log(`${SORU.length} sorudan ${SORU.filter((x) => x[2]).length} tanesi cizelgeden ` +
  `yanitlanir, ${SORU.filter((x) => !x[2]).length} tanesi yanitsiz kalir`);

const K = [-6, 14, 18, 20, 13];
console.log("\n3. kapsama disi cagrinin bedeli (vardiya 1 hafta)");
yaz(K, "kisi", "kapsam disi", "yedek uyandirma", "yedegin payi (saat)", "ilk adim dk");
for (const R of tarama.filter((r) => r.v === 1))
  yaz(K, R.n, `${R.disi} (%${((R.disi / C.length) * 100).toFixed(0)})`, R.yedek,
    s1((R.yedek * YEDEK_PENCERE) / R.n), s1(R.gecikme));

const H = [-6, 8, 12, 14, 17];
console.log("\n4. bes kisilik ekipte yuk dagilimi (vardiya 1 haf. / 2 haf.)");
yaz(H, "kisi", "kapsam", "nobet haf.", "uyandirma", "toparlanma saati");
const [A, B] = [kos(C, 5, 1), kos(C, 5, 2)];
for (let i = 0; i < 5; i++)
  yaz(H, KAPSAM[i].ad, KAPSAM[i].s.length, A.kisi[i].hafta,
    `${A.kisi[i].uyandi} / ${B.kisi[i].uyandi}`,
    `${s1(A.kisi[i].toparlanma)} / ${s1(B.kisi[i].toparlanma)}`);

const C9 = cagrilar(TOHUM, 9);                      // ayni cagri kumesi, toplu is 09.00'da
const T = [-6, 16, 20, 11, 10];
console.log(`\n5. gecelik toplu is 02.00 yerine 09.00'da kosarsa (vardiya 1 hafta)`);
console.log(`gece cagrisi ${gece.length} -> ${C9.filter((c) => c.gece).length}`);
yaz(T, "kisi", "uyandirma 02 / 09", "toparlanma 02 / 09", "bant 02", "bant 09");
for (const n of [3, 4, 5, 6, 8]) {
  const [a, b] = [kos(C, n, 1), kos(C9, n, 1)];
  yaz(T, n, `${s1(a.uyandi)} / ${s1(b.uyandi)}`, `${s1(a.toparlanma)} / ${s1(b.toparlanma)}`,
    ea(a.ortBant), ea(b.ortBant));
}
```

```
tohum 20260615: 52 haftada 136 cagri, 61 tanesi gece (41 tanesi gecelik toplu is penceresinde)

1. nobet duzeni taramasi (kisi basina yillik; ort / en yuklu kisi)
kisi  vardiya      nobet haf.       uyandirma  toparlanma saati  ort bant kisi bant
3     1 haf.             17.3       25.7 / 29     118.7 / 138.0     hayir     hayir
3     2 haf.             17.3       28.7 / 38     154.7 / 180.0     hayir     hayir
4     1 haf.             13.0       19.8 / 25      91.0 / 110.0     hayir     hayir
4     2 haf.             13.0       19.3 / 27     107.0 / 146.0     hayir     hayir
5     1 haf.             10.4       16.2 / 20       74.4 / 96.0     hayir     hayir
5     2 haf.             10.4       16.6 / 22      90.4 / 124.0     hayir     hayir
6     1 haf.              8.7       13.3 / 16       61.3 / 82.0     hayir     hayir
6     2 haf.              8.7       14.5 / 20       78.0 / 96.0     hayir     hayir
8     1 haf.              6.5       10.1 / 14       46.5 / 66.0      evet     hayir
8     2 haf.              6.5       11.3 / 16       60.0 / 96.0      evet     hayir
5     duzen yok             -       61.0 / 61     244.0 / 244.0     hayir     hayir
bant: nobet <= 13 haf., uyandirma <= 12, toparlanma <= 60 saat

2. nobet duzeninin yanitladigi soru kumesi
soru                                                      veri   yanit
gece 02.40'ta kim nobetci                      nobet cizelgesi    evet
nobet ne zaman devrediyor                      nobet cizelgesi    evet
nobetci bu servise dokunabiliyor mu          kapsama cizelgesi    evet
dokunamiyorsa kim, ne zaman cagrilir         kapsama cizelgesi    evet
nobetci son otuz gunde kac kez uyandi          uyandirma kaydi    evet
cagri hangi adimla kapaniyor                                 -   hayir
uyandirmadan sonra kac saat uretken degil                    -   hayir
bu duzen bir yil surdurulur mu                               -   hayir
8 sorudan 5 tanesi cizelgeden yanitlanir, 3 tanesi yanitsiz kalir

3. kapsama disi cagrinin bedeli (vardiya 1 hafta)
kisi     kapsam disi   yedek uyandirma yedegin payi (saat)  ilk adim dk
3           42 (%31)                16                21.3         17.7
4           42 (%31)                18                18.0         17.7
5           50 (%37)                20                16.0         19.2
6           44 (%32)                19                12.7         18.1
8           45 (%33)                20                10.0         18.3

4. bes kisilik ekipte yuk dagilimi (vardiya 1 haf. / 2 haf.)
kisi    kapsam  nobet haf.     uyandirma toparlanma saati
k1           3          11       20 / 22     96.0 / 124.0
k2           2          11       18 / 14      84.0 / 90.0
k3           3          10       20 / 21     86.0 / 112.0
k4           2          10       14 / 14      66.0 / 68.0
k5           2          10        9 / 12      40.0 / 58.0

5. gecelik toplu is 02.00 yerine 09.00'da kosarsa (vardiya 1 hafta)
gece cagrisi 61 -> 20
kisi  uyandirma 02 / 09  toparlanma 02 / 09    bant 02   bant 09
3           25.7 / 9.3        118.7 / 38.7      hayir     hayir
4           19.8 / 6.5         91.0 / 27.0      hayir      evet
5           16.2 / 5.0         74.4 / 20.8      hayir      evet
6           13.3 / 4.7         61.3 / 19.3      hayir      evet
8           10.1 / 3.0         46.5 / 12.5       evet      evet
```

Sayılar **ölçüm** sınıfındadır; girdileri OY1–OY6 varsayımlarıdır. Çizelgesiz karşıt koşum birinci
tablonun son satırındadır: düzen yokken her gece çağrısı ekibin tamamını kaldırır, kişi başına
uyandırma 61'e ve toparlanma 244 saate çıkar. **Nöbet düzeninin ilk işi yükü azaltmak değil, tek
kişiye yıkmaktır** — beş kişide aynı çağrı kümesi kişi başına 16,2 uyandırma yapar.

## Ekip Küçüldükçe Ne Oluyor

Nöbet haftası doğrudan ekip büyüklüğünden çıkar: üç kişide 17,3 hafta, yani yılın üçte biri.
Uyandırma ve toparlanma bundan hızlı bozulur, çünkü kapsama dışı çağrının yedeği de aynı küçük
havuzdan gelir — üç kişide 25,7 uyandırma ve 118,7 saat, sekiz kişide 10,1 ve 46,5.

Vardiya uzunluğu toplamı değiştirmez ama **birikimi** değiştirir. İki haftalık vardiyada toparlanma
üç kişide 118,7'den 154,7, altı kişide 61,3'ten 78,0 saate çıkar; uyandırma sayısı neredeyse sabit
kalır. Nedeni tektir: uzun vardiya uyandırmaları tek kişide üst üste bindirir ve her ek uyandırma
pencereyi iki saat açar. **Aynı sayıda uyandırma, dağıtıldığında daha ucuzdur.**

## Eşik Ortalamada mı, Kişide mi

Ortalamaya bakıldığında düzen **sekiz kişide** banda girer; altı kişide toparlanma 61,3 ile 60
saatlik sınırın dışında, uyandırma 13,3 ile 12'nin üstündedir. Kişiye bakıldığında **hiçbir düzen
banda girmez**: sekiz kişide bile en yüklü kişi 14 uyandırma ve 66 toparlanma saati taşır.

Dördüncü tablo nedenini gösterir. Beş kişilik ekipte `k1` 20, `k5` 9 kez uyanır; toparlanma 96,0 ile
40,0 saat arasında dağılır, oysa nöbet haftaları 10 ile 11'dir. Fark **kapsamadan** gelir: üç servis
kapsayan kişi hem kendi nöbetinde hem başkasının nöbetinde yedek olarak uyanır. **Ortalama nöbet
yükü, yükü en ağır taşıyan kişi hakkında hiçbir şey söylemez.**

## Yanıtsız Kalan Üç Soru

Çizelge ile kapsama çizelgesi sekiz sorudan beşini yanıtlar ve beşi de **kim** ile **ne zaman**
biçimindedir. Yanıtsız üçü aynı boşluğa düşer: çağrının **hangi adımla** kapanacağı, uyandırmanın
kaç saat üretkenlik götürdüğü, düzenin bir yıl sürdürülüp sürdürülemeyeceği.

"Hangi adımla" yanıtsızsa çağrı kapsama dışına düşer: üçüncü tabloda bu pay %31 ile %37
arasındadır ve **ekip büyüdükçe düşmez**, çünkü kapsam kişinin özelliğidir, havuzun değil. Faturası
iki kalemdir — ilk adıma başlama 10 dakikadan 17,7–19,2 dakikaya çıkar ve yılda 16 ile 20 arasında
**ikinci bir kişi** uyandırılır; bu ikinci uyandırma beş kişide kişi başına 16,0 toparlanma
saatidir, oradaki 74,4 saatin beşte birinden fazlası. Toparlanma penceresinin kendisi ise hiçbir
işletim verisinde yoktur: modelde varsayımdır, alanda ölçülmez, bu yüzden nöbetin bedeli kayda
geçmez ve düzen ancak bir kişi ayrıldığında görünür.

## Uyandırmayı Kim Üretiyor

Beşinci tablo aynı çağrı kümesini tek değişiklikle koşturur: gecelik toplu iş 02.00 yerine 09.00'da
başlar. Çağrı sayısı değişmez, gece çağrısı 61'den 20'ye iner ve bant sekiz kişide değil **dört
kişide** geçilir; beş kişide uyandırma 16,2'den 5,0'a, toparlanma 74,4'ten 20,8 saate düşer. Üç
kişilik ekip bundan sonra bile banda girmez — 9,3 uyandırma içeride, 17,3 nöbet haftası dışarıda.
**Nöbet düzeni bir çizelge sorusu gibi görünür, faturası iş takviminde yazılıdır.**

## Özet

- Yıllık 136 çağrının 61'i gece gelir; çizelge olmadığında kişi başına yük 61 uyandırma ile 244
  toparlanma saatidir. Çizelgeyle bu yük üç kişide 17,3 nöbet haftası, 25,7 uyandırma ve 118,7
  toparlanma saatine, sekiz kişide 6,5 / 10,1 / 46,5'e iner.
- Vardiyayı iki haftaya çıkarmak uyandırma sayısını değiştirmez, toparlanmayı büyütür: üç kişide
  118,7 → 154,7, altı kişide 61,3 → 78,0 saat.
- Ortalamaya göre bant sekiz kişide geçilir, kişiye göre hiçbir düzende geçilmez; beş kişide aynı
  çizelgeyle 20 ve 9 uyandırma, 96,0 ve 40,0 toparlanma saati yan yana durur.
- Sekiz sorudan beşi yanıtlanır, üçü yanıtsız kalır; "hangi adımla" yanıtsızlığı çağrıların
  %31–%37'sini kapsama dışına düşürür ve yılda 16–20 ikinci uyandırma üretir.
- Gecelik toplu işi 09.00'a almak gece çağrısını 61'den 20'ye indirir, eşiği sekizden dört kişiye
  çeker.

## Sonraki Adım

Bu ders her çağrının bir insanı uyandırmaya değdiğini varsaydı. Sonraki ders bilinen bir olay
kümesini **önem düzeyi** kuralıyla etiketler ve yanlış sınıflandırmayı iki yönde sayar: fazla
yükseltilenin gereksiz uyandırması, fazla düşürülenin geciken müdahalesi. **Tırmandırma** zinciri
de aynı kümede taranır — kaç basamak, basamak başına kaç dakika, kaç olay kimseye ulaşmadan
kalır.
