---
title: 'Yedeklilik Bölgeleri'
source: 'https://academia.sh/tr/kurslar/dayaniklilik-kaliplari/yedeklilik-bolgeleri'
course: 'Dayanıklılık ve Güvenilirlik'
language: tr
updated: '2026-08-17T18:11:01+00:00'
license: 'CC BY-SA 4.0'
---

# Yedeklilik Bölgeleri

Kopyaların nereye konduğunun ölçülmesi: alan ile bölgenin yerleşim birimi olarak ayrılması, üç yerleşim planının makine, alan ve bölge kaybında ayakta kalan kapasite ve kaybolan yayılmamış yazma üzerinden karşılaştırılması, bir birim kaybına dayanmak için boşta tutulması gereken kapasitenin hesaplanması ve bölgeler arası çoğaltmanın arızasız günde taşıdığı ek yükün sayılması.

Önceki dersin bütün hesapları tek bir örtük varsayım taşıdı: kurtarılacak bir kopya vardır ve o
kopya arızadan etkilenmemiştir. K01 bu varsayımı zaten işaretlemişti — kopya aritmetiği ancak
kopyalar **bağımsız düştüğünde** geçerlidir ve bu yüzden hesaplanan sayı bir üst sınırdır. İki kopya
aynı elektrik hattına, aynı ağ anahtarına ya da aynı soğutma birimine bağlıysa bağımsızlık yoktur;
biri düştüğünde öteki de düşer.

Bu ders kopyaların **nereye** konduğunu ölçer. İki yerleşim birimi ayrılır. **Alan** (availability
zone), kendi güç ve ağ yolu olan, bir arızanın komşusuna geçmediği varsayılan bir yerleşim
birimidir. **Bölge** (region), coğrafi olarak ayrı bir alanlar kümesidir; iki bölge arasındaki
uzaklık yayılma turunu uzatır.

Bu kursta `alan` sözcüğü yalnız bu fiziksel yerleşim birimini karşılar. Alan Odaklı Tasarım
kursundaki `alan` (domain) bir bilgi sınırıdır, kayıt `alan`ı (field) bir veri parçasıdır; üçü ayrı
kavramlardır ve burada karışmaz. Aynı nedenle bir arızanın dokunduğu bileşen kümesi bu kursta
**bulaşma kapsamı** diye anılır, "etki alanı" diye değil.

## Yerleşim Planı Bir Arıza Kipini Seçer

Bir yerleşim planı hangi kopyaların **birlikte** düşeceğini belirler. Altı kopya tek bir alanda
duruyorsa, o alanın kaybı altı kopyayı birden alır ve altı kopyanın hiçbir anlamı kalmaz. Aynı altı
kopya üç alana dağıtılırsa bir alanın kaybı ikisini alır. İki bölgeye dağıtılırsa bir bölgenin
kaybı üçünü alır.

Aşağıdaki düzenek bir **modeldir**: gerçek bölge, alan, bulut ortamı ya da kapsayıcı kurulmaz.
Kopyalar bölge ve alan etiketi taşıyan nesnelerdir, tur soyut bir adımdır ve yayılma turu uzaklığa
göre değişir. Çoğaltmanın mekaniği Veri Katmanı Ölçekleme kursunda kuruldu ve burada
tekrarlanmaz; buradaki tek soru bir birim kaybolduğunda **hangi yazmanın hiçbir yerde kalmadığıdır.**

**KU7 — yayılma turları: aynı alan içinde 1, aynı bölgede farklı alan arasında 2, bölgeler arasında
4 tur.** Gerekçe: yayılma süresi uzaklıkla artar. Duyarlılığı doğrusaldır; uzak turu iki katına
çıkarsa bölge kaybındaki yayılmamış yazma da iki katına çıkar. Bu varsayım K01'in tablosuna
eklenmez.

```js
// bolge/model.mjs — yerlesim MODELIDIR: kopyalar bolge ve alan etiketi tasir, yayilma turu
// uzakliga gore degisir. Tur soyut bir adimdir; gercek bolge, alan ya da bulut ortami kurulmaz.
export const TUR = 40, ARIZA_TURU = 20, TUR_YAZMA = 6;
export const YAYILMA = { alan: 1, bolge: 2, uzak: 4 };   // KU7 (varsayim): yayilma turlari

export const PLAN = {
  "tek-alan":  [["b1", "a1"], ["b1", "a1"], ["b1", "a1"], ["b1", "a1"], ["b1", "a1"], ["b1", "a1"]],
  "uc-alan":   [["b1", "a1"], ["b1", "a1"], ["b1", "a2"], ["b1", "a2"], ["b1", "a3"], ["b1", "a3"]],
  "iki-bolge": [["b1", "a1"], ["b1", "a2"], ["b1", "a3"], ["b2", "a1"], ["b2", "a2"], ["b2", "a3"]],
};
export const SENARYO = {
  makine: (y, i) => i === 0,
  alan: (y) => y[0] === "b1" && y[1] === "a1",
  bolge: (y) => y[0] === "b1",
};

const gecikme = (x, y) => (x[0] !== y[0] ? YAYILMA.uzak : x[1] !== y[1] ? YAYILMA.bolge : YAYILMA.alan);

export function kosum(planAdi, senaryoAdi) {
  const yer = PLAN[planAdi], n = yer.length;
  const dusuk = yer.map((y, i) => SENARYO[senaryoAdi](y, i));
  const canli = (i, t) => !(dusuk[i] && t >= ARIZA_TURU);
  const yazmalar = [];
  let sira = 0, s = { kabul: 0, dusen: 0, kayip: 0 };

  for (let t = 1; t <= TUR; t += 1) {
    for (const w of yazmalar) {                       // varan yayilimlar hedefte gorunur oldu
      for (const m of w.ucus) if (m.varir === t) w.sahip.add(m.hedef);
      w.ucus = w.ucus.filter((m) => m.varir > t);
    }
    if (t === ARIZA_TURU) {                            // dusen birim: sahiplik ve ucus kaybi
      for (const w of yazmalar) {
        w.ucus = w.ucus.filter((m) => canli(m.kaynak, t) && canli(m.hedef, t));
        const kalan = [...w.sahip].filter((i) => canli(i, t));
        if (kalan.length === 0 && w.ucus.length === 0) { s.kayip += 1; w.kayboldu = true; }
        w.sahip = new Set(kalan);
      }
    }
    const havuz = yer.map((_, i) => i).filter((i) => canli(i, t));
    for (let k = 0; k < TUR_YAZMA; k += 1) {
      if (havuz.length === 0) { s.dusen += 1; continue; }
      const i = havuz[sira++ % havuz.length];
      s.kabul += 1;
      const w = { sahip: new Set([i]), ucus: [], kayboldu: false };
      for (const j of havuz) if (j !== i) w.ucus.push({ kaynak: i, hedef: j, varir: t + gecikme(yer[i], yer[j]) });
      yazmalar.push(w);
    }
  }
  const ayakta = yer.filter((_, i) => canli(i, TUR)).length;
  return { ...s, ayakta, toplam: n };
}
```

```js
// bolge/olc.mjs — uc yerlesim plani, uc arizada: ayakta kalan kopya, dusen istek, kayip yazma
import { kosum, PLAN, SENARYO, TUR, ARIZA_TURU, TUR_YAZMA, YAYILMA } from "./model.mjs";

const s = (x, n) => String(x).padStart(n);
console.log(`${TUR} tur, tur basina ${TUR_YAZMA} yazma, ariza ${ARIZA_TURU}. turda.`);
console.log(`yayilma turlari: ayni alan ${YAYILMA.alan}, ayni bolge farkli alan ${YAYILMA.bolge}, ` +
  `farkli bolge ${YAYILMA.uzak} (KU7)`);
console.log();
console.log("plan       | ariza  | ayakta kopya | ayakta kapasite | dusen yazma | kayip yayilmamis");
console.log("-----------|--------|--------------|-----------------|-------------|-----------------");
for (const plan of Object.keys(PLAN)) {
  for (const senaryo of Object.keys(SENARYO)) {
    const r = kosum(plan, senaryo);
    console.log(`${plan.padEnd(10)} | ${senaryo.padEnd(6)} | ${s(`${r.ayakta}/${r.toplam}`, 12)} | ` +
      `${s(`%${((100 * r.ayakta) / r.toplam).toFixed(1)}`, 15)} | ${s(r.dusen, 11)} | ${s(r.kayip, 16)}`);
  }
}
```

```
40 tur, tur basina 6 yazma, ariza 20. turda.
yayilma turlari: ayni alan 1, ayni bolge farkli alan 2, farkli bolge 4 (KU7)

plan       | ariza  | ayakta kopya | ayakta kapasite | dusen yazma | kayip yayilmamis
-----------|--------|--------------|-----------------|-------------|-----------------
tek-alan   | makine |          5/6 |           %83.3 |           0 |                0
tek-alan   | alan   |          0/6 |            %0.0 |         126 |              114
tek-alan   | bolge  |          0/6 |            %0.0 |         126 |              114
uc-alan    | makine |          5/6 |           %83.3 |           0 |                0
uc-alan    | alan   |          4/6 |           %66.7 |           0 |                2
uc-alan    | bolge  |          0/6 |            %0.0 |         126 |              114
iki-bolge  | makine |          5/6 |           %83.3 |           0 |                1
iki-bolge  | alan   |          5/6 |           %83.3 |           0 |                1
iki-bolge  | bolge  |          3/6 |           %50.0 |           0 |                9
```

## Üç Planın Okunması

Makine satırları üç planda da aynı: bir kopyanın kaybı hiçbir düzende hizmeti durdurmuyor. Kopya
sayısı bu arıza kipini zaten karşılıyordu ve yerleşim planı burada bir şey değiştirmiyor.

**Alan satırı planları ayırıyor.** Tek alan düzeninde alanın kaybı altı kopyayı da alıyor: 126
yazma düşüyor ve 114 yazma hiçbir yerde kalmıyor. Aynı arıza üç alanlı düzende dört kopyayı ayakta
bırakıyor, hiçbir yazma düşmüyor ve yalnız 2 yazma kayboluyor. Altı kopyanın altısı da vardı; fark
yalnız nereye konduklarındaydı.

**Bölge satırı ikinci düzeyi ayırıyor.** Üç alanlı düzen alan kaybını karşılıyor ama bölgenin kaybı
onu da tamamen alıyor — üç alanın üçü de aynı bölgededir. Yalnız iki bölgeli düzen bölge kaybında
ayakta kalıyor: yarım kapasite, sıfır düşen yazma, 9 kaybolan yayılmamış yazma.

**Dağıtmanın kendi bedeli son sütunda görünüyor.** İki bölgeli düzende tek bir makinenin kaybı bile
1 yazma kaybettiriyor, oysa tek alan düzeninde 0. Sebep yayılma turudur: kopyalar birbirinden uzağa
konduğunda bir yazmanın ikinci bir kopyaya ulaşması daha uzun sürer ve o pencerede daha çok yazma
tek bir kopyada durur. **Yayılmanın uzaması yedekliliğin karşı yüzüdür**; aynı sayı bölge kaybında
9'a çıkıyor.

## Ne Kadar Kapasite Boşta Durmalı

Ayakta kalan kapasite sütunu bir soruyu açık bırakıyor: yüzde 66,7 kapasite yükü taşımaya yeter mi?
Yetmesi için normal günde kapasitenin bir kısmının boşta durması gerekir. Aşağıdaki hesap bu payı
alan sayısına göre veriyor ve bölgeler arası çoğaltmanın arızasız günde taşıdığı yükü sayıyor.

```js
// bolge/kapasite.mjs — yedekliligin arizasiz gundeki bedeli: bosta duran kapasite ve bolgeler
// arasi tasinan yazma; model turlarinin K01 olcegine cevrilmesi
const TEPE_UC = 513.89;       // K01: tepe uctaki istek/s
const TEPE_YAZMA = 97.22;     // K01: tepe yazma istek/s
const OLAY_GUN = 2_800_000;   // K01: gunluk durum olayi
const ARTIS_GB = 0.976;       // K01: gunluk veri artisi
const TUR_SN = 2;             // KU1 (varsayim): bir tur 2 saniye
const b = (x, n = 2) => x.toFixed(n);

console.log(`${"alan".padStart(5)}${"alan basina yuk".padStart(17)}${"bir alan dusunce".padStart(18)}` +
  `${"saglanmasi gereken".padStart(20)}${"bosta duran".padStart(13)}${"fazladan pay".padStart(14)}`);
for (const n of [2, 3, 4, 6]) {
  const normal = TEPE_UC / n, kayipta = TEPE_UC / (n - 1), toplam = n * kayipta;
  console.log(`${String(n).padStart(5)}${b(normal).padStart(17)}${b(kayipta).padStart(18)}` +
    `${b(toplam).padStart(20)}${b(toplam - TEPE_UC).padStart(13)}${("%" + b(100 * (toplam / TEPE_UC - 1), 1)).padStart(14)}`);
}

const bayt = (ARTIS_GB * 1e9) / OLAY_GUN;
console.log(`\nolay basina ${b(bayt)} bayt (K01: gunde ${ARTIS_GB} GB / ${OLAY_GUN.toLocaleString("tr-TR")} olay)`);
console.log(`iki bolgeye cogaltma: tepe yukte ${b(TEPE_YAZMA * bayt / 1024)} KB/s ek tasima, ` +
  `gunde ${b(ARTIS_GB * 1000)} MB`);

console.log(`\nkayip yayilmamis yazmanin K01 olcegine cevrilmesi (KU1: tur = ${TUR_SN} sn):`);
for (const [ad, tur, pay] of [["alan kaybi (3 alan)", 1, 3], ["bolge kaybi (2 bolge)", 4, 2]]) {
  console.log(`  ${ad.padEnd(22)} yayilma ${tur} tur = ${tur * TUR_SN} sn, ` +
    `birim basina ${b(TEPE_YAZMA / pay)} yazma/s -> ${b((tur * TUR_SN * TEPE_YAZMA) / pay)} yazma`);
}
console.log(`  oran ${b(((4 * TUR_SN * TEPE_YAZMA) / 2) / ((1 * TUR_SN * TEPE_YAZMA) / 3))}: ` +
  `bolge kaybi ayni ariza suresinde daha cok yayilmamis yazma birakir`);
```

```
 alan  alan basina yuk  bir alan dusunce  saglanmasi gereken  bosta duran  fazladan pay
    2           256.94            513.89             1027.78       513.89        %100.0
    3           171.30            256.94              770.84       256.95         %50.0
    4           128.47            171.30              685.19       171.30         %33.3
    6            85.65            102.78              616.67       102.78         %20.0

olay basina 348.57 bayt (K01: gunde 0.976 GB / 2.800.000 olay)
iki bolgeye cogaltma: tepe yukte 33.09 KB/s ek tasima, gunde 976.00 MB

kayip yayilmamis yazmanin K01 olcegine cevrilmesi (KU1: tur = 2 sn):
  alan kaybi (3 alan)    yayilma 1 tur = 2 sn, birim basina 32.41 yazma/s -> 64.81 yazma
  bolge kaybi (2 bolge)  yayilma 4 tur = 8 sn, birim basina 48.61 yazma/s -> 388.88 yazma
  oran 6.00: bolge kaybi ayni ariza suresinde daha cok yayilmamis yazma birakir
```

Boşta duran kapasite alan sayısıyla hızla azalıyor. İki alanda bir alanın kaybına dayanmak
kapasitenin iki katını gerektirir: 513,89 istek/s taşımak için 1027,78 sağlanır ve yarısı boşta
durur. Üç alanda fazladan pay yüzde 50'ye, dört alanda yüzde 33,3'e, altı alanda yüzde 20'ye
iner. Genel biçimi $n$ alan için $1/(n-1)$'dir. **Alan sayısını artırmak yedekliliği ucuzlatır**, ve
bu, aynı hizmet erişilebilirliğine iki farklı fiyatla ulaşılabileceği anlamına gelir.

Bölgeler arası çoğaltmanın taşıma faturası ise küçük: olay başına 348,57 bayt, tepe yükte 33,09
KB/s, günde 976 MB. Bu akış için bölge yedekliliğinin faturası taşımada değil, kapasitede ve
kaybolan yazmadadır. Farklı bir yükte — büyük gövdeli yazmalar taşıyan bir akışta — sıralama tersine
dönerdi; sayı akışa bağlıdır, ilkeye değil.

Son blok model turlarını K01 ölçeğine çeviriyor. Üç alanlı düzende bir alanın kaybında yayılmamış
yazma 64,81; iki bölgeli düzende bir bölgenin kaybında 388,88. Oran 6,00 ve iki nedenden geliyor:
bölgeler arası yayılma dört kat uzun ve bölge başına yazma payı daha büyük. **Bölge yedekliliği
kesintiyi kaldırır ama veri kaybını büyütür**, ve bu tam olarak önceki dersin veri kaybı hedefiyle
karşılaştırılacak sayıdır: bir saniyelik çoğaltma gecikmesi 97,22 olay kaybettiriyordu, bölge
kaybı 388,88.

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

**Arızasız günün bedeli** üç kalemdir. Üç alanlı bir yerleşimde kapasitenin yüzde 50'si boşta durur
— 256,95 istek/s hiçbir zaman kullanılmaz. İki bölgeli çoğaltma her yazmayı ikinci kez taşır: günde
976 MB ve tepe yükte 33,09 KB/s. Üçüncüsü, yayılmanın uzaması küçük arızalarda bile kayıp üretir:
tek makine kaybında iki bölgeli düzen 1 yazma kaybederken tek alan düzeni 0 kaybediyordu.

**Arızalı günün kazancı** aynı tablonun alan ve bölge satırlarındadır. Tek alan düzeninde bir alanın
kaybı 126 yazma düşürüp 114 yazma kaybettirirken, üç alanlı düzende aynı arıza 0 düşen yazma ve 2
kayıp veriyor. Bölge kaybında üç alanlı düzen 126/114 verirken iki bölgeli düzen 0/9 veriyor. Her
düzey bir arıza kipini kaldırıyor ve bir üstekini açıkta bırakıyor; yerleşim kararı hangi kipin
kaldırılacağını seçmektir.

## Özet

- Alan, kendi güç ve ağ yolu olan bir yerleşim birimidir; bölge, coğrafi olarak ayrı bir alanlar
  kümesidir. Bu kursta `alan` yalnız bu anlamdadır; bilgi sınırı olan `alan` ve kayıt `alan`ı ayrı
  kavramlardır.
- Yerleşim planı hangi kopyaların birlikte düşeceğini belirler: altı kopya tek alanda toplanınca
  alan kaybı 126 yazma düşürüp 114 yazma kaybettiriyor, üç alana dağılınca aynı arıza 0 düşen yazma
  ve 2 kayıp veriyor.
- Bölge kaybı yalnız iki bölgeli düzende karşılanıyor: yüzde 50 kapasite, 0 düşen yazma, 9 kaybolan
  yayılmamış yazma.
- Dağıtmanın kendi bedeli yayılma turunun uzamasıdır: iki bölgeli düzen tek makine kaybında bile 1
  yazma kaybediyor, tek alan düzeni 0.
- Bir alan kaybına dayanmak için boşta tutulması gereken kapasite $1/(n-1)$'dir: iki alanda yüzde
  100, üç alanda yüzde 50, altı alanda yüzde 20.
- K01 ölçeğinde alan kaybı 64,81, bölge kaybı 388,88 yayılmamış yazma bırakıyor (oran 6,00); bölge
  yedekliliği kesintiyi kaldırırken veri kaybı hedefini zorlar.

## Sonraki Adım

Bu ders kopyaları dağıttı ama dağıtılan şey hep aynı bütündü: altı kopya, tek bir hizmet, tek bir
veri kümesi. Bir alan ya da bölge kaybında ayakta kalan kapasite yüzde 66,7 ve yüzde 50 çıktı,
çünkü kaybedilen birim hizmetin bir **kesirini** taşıyordu. Bu kesir hesabı bir şeyi varsayıyor:
birimler birbirinden bağımsız iş yapabiliyor. Oysa çoğu düzende birimlerin ortak bir noktası kalır
— tek bir yönlendirme eşlemesi, tek bir numara dağıtıcısı, tek bir yapılandırma kaynağı — ve o
noktanın kaybı bütün birimleri birden alır. Sonraki ders hizmeti kendi kendine yeten yinelenebilir
birimlere bölmeyi ele alır: birim içindeki bağların birimi geçmemesi, birim başına düşen yük ve
birimler arasında paylaşılan tek kaynağın bulaşma kapsamı.
