---
title: 'Vale Anahtarı Kalıbı'
source: 'https://academia.sh/tr/kurslar/dayaniklilik-kaliplari/vale-anahtari-kalibi'
course: 'Dayanıklılık ve Güvenilirlik'
language: tr
updated: '2026-08-17T18:11:00+00:00'
license: 'CC BY-SA 4.0'
---

# Vale Anahtarı Kalıbı

Doğrudan kaynak erişimi için sınırlı yetki: kanıt baytının servisin üzerinden kaldırılmasıyla aktarım başına 80.000 baytın 512 bayta inmesi, depo yavaşladığında tutulan yuvanın 64'te doyup 28 aktarımı düşürmesi, açık yetki penceresinin anahtar süresiyle büyümesi ve kapsam daraltmanın getirisinin doğrusal olmaması.

Talep fişi kanıtı kuyruğun dışına çıkardı ama yolun tamamı hâlâ servisin içinden geçiyor.
Taşıyıcı kanıtı servise yüklüyor, servis depoya yazıyor; alıcı kanıtı istediğinde servis depodan
okuyup istemciye aktarıyor. Kuyruktan kaldırılan 40.000 bayt, isteğe bağlı yolda iki kez
geçmeye devam ediyor.

**Vale anahtarı** (valet key), istemciye kaynağa doğrudan erişecek kadar dar ve kısa süreli bir
yetki verip veriyi servisin dışından akıtan yerleşimdir. Kimlik ve Yetki kursu imzalı bağlantıyı,
kapsamı ve süreli belirteci kurdu; doğrulama mekaniği burada tekrarlanmaz. Bu dersin ölçüleri
üçtür: servisin üzerinden **geçmeyen bayt**, açılan **yetki penceresi** ve kapsamı daraltmanın
**maliyeti**.

## Baytın Servisten Çıkması

**DD12 — teslim kanıtının görüntülenme oranı 0,02.** Gerekçesi: kanıt yalnız itiraz ya da
denetim durumunda okunur, her gönderide değil. Duyarlılığı ölçüye zaten oran olarak giriyor.
**DD13 — kanıt aktarım havuzu 64 yuva** ve arıza senaryosu: **kanıt deposu yavaşlıyor**, yanıt
süresi 1 turdan 20 tura çıkıyor ve 80 tur sürüyor. Tur süresi bu kursun DD6 varsayımıdır (0,25
saniye), yani yavaşlama 20 saniye sürer. Sıklığı ayda 2 kez alınır.

Düzenek süreç içi bir modeldir: depo, ağ ve istemci yoktur; tur soyut bir adım, yuva bir sayaç,
bayt sayılan bir niceliktir.

```js
// vale/yol.mjs — kanit aktariminin iki yolunun surec ici modeli.
// Gercek depo, ag ve istemci yoktur: tur soyut bir adim, yuva bir sayac, bayt sayilir.

export const KANIT = 40_000, ANAHTAR = 512;   // DD8 kanit bayti; DD14 vale anahtari yaniti

// yol: "vekil" = bayt servisin uzerinden gecer; "vale" = servis yalniz anahtar uretir.
// Her tur: gelen aktarimlar yuva ister, depo suresi kadar yuvayi tutar, sonra birakir.
export function kos({ tur, gelen, havuz, normalSure, arizaSure, arizaBasi, arizaBitis, yol }) {
  const tutulan = [];
  const s = { kabul: 0, red: 0, tepeYuva: 0, servisBayt: 0, yuvaTur: 0, anahtar: 0 };
  let artik = 0;
  for (let t = 0; t < tur; t += 1) {
    for (let i = tutulan.length - 1; i >= 0; i -= 1) if (tutulan[i] <= t) tutulan.splice(i, 1);
    const sure = t >= arizaBasi && t < arizaBitis ? arizaSure : normalSure;
    artik += gelen;
    const n = Math.floor(artik);
    artik -= n;
    for (let i = 0; i < n; i += 1) {
      if (yol === "vale") { s.kabul += 1; s.anahtar += 1; s.servisBayt += ANAHTAR; continue; }
      if (tutulan.length >= havuz) { s.red += 1; continue; }
      tutulan.push(t + sure);
      s.kabul += 1; s.servisBayt += KANIT * 2;      // istemciden alinir, depoya yazilir
    }
    s.tepeYuva = Math.max(s.tepeYuva, tutulan.length);
    s.yuvaTur += tutulan.length;
  }
  return s;
}
```

```js
// vale/olc.mjs — kanit deposu yavasladiginda iki yolun tuttugu yuva ve dusen aktarim
import { kos, KANIT, ANAHTAR } from "./yol.mjs";

const V3 = 400_000, V8 = 3, GUN = 86_400;         // K01: gunluk gonderi, tepe carpani
const DD12 = 0.02;                                // kanitin goruntulenme orani
const TUR_S = 0.25, TUR = 320, HAVUZ = 64;        // DD6 tur suresi; DD13 havuz
const hizYukleme = (V3 / GUN) * V8, hizOkuma = ((V3 * DD12) / GUN) * V8;
const hiz = hizYukleme + hizOkuma;
const gelen = hiz * TUR_S;

console.log(`tepe kanit aktarimi ${hiz.toFixed(4)}/s (yukleme ${hizYukleme.toFixed(4)}, ` +
  `okuma ${hizOkuma.toFixed(4)}; DD12 = ${DD12})`);
console.log(`${TUR} tur x ${TUR_S} s = ${(TUR * TUR_S).toFixed(0)} s; tur basina ${gelen.toFixed(4)} aktarim`);
console.log(`DD13: depo yaniti 1 turdan 20 tura cikiyor, 80 tur (${(80 * TUR_S).toFixed(0)} s) suruyor`);

console.log(`\n${"yol".padEnd(8)}${"durum".padEnd(10)}${"kabul".padStart(8)}${"red".padStart(7)}` +
  `${"tepe yuva".padStart(11)}${"ort. yuva".padStart(11)}${"servis MB".padStart(12)}`);
for (const yol of ["vekil", "vale"])
  for (const [ad, arizaSure, arizaBasi, arizaBitis] of
    [["arizasiz", 1, TUR, TUR], ["arizali", 20, 80, 160]]) {
    const r = kos({ tur: TUR, gelen, havuz: HAVUZ, normalSure: 1,
      arizaSure, arizaBasi, arizaBitis, yol });
    console.log(`${yol.padEnd(8)}${ad.padEnd(10)}${String(r.kabul).padStart(8)}` +
      `${String(r.red).padStart(7)}${String(r.tepeYuva).padStart(11)}` +
      `${(r.yuvaTur / TUR).toFixed(2).padStart(11)}${(r.servisBayt / 1e6).toFixed(3).padStart(12)}`);
  }
console.log(`\nbir aktarimda servisten gecen bayt: vekil ${KANIT * 2}, vale ${ANAHTAR} ` +
  `(oran ${((KANIT * 2) / ANAHTAR).toFixed(1)} kat)`);
```

```
tepe kanit aktarimi 14.1667/s (yukleme 13.8889, okuma 0.2778; DD12 = 0.02)
320 tur x 0.25 s = 80 s; tur basina 3.5417 aktarim
DD13: depo yaniti 1 turdan 20 tura cikiyor, 80 tur (20 s) suruyor

yol     durum        kabul    red  tepe yuva  ort. yuva   servis MB
vekil   arizasiz      1133      0          4       3.54      90.640
vekil   arizali       1105     28         64      18.65      88.400
vale    arizasiz      1133      0          0       0.00       0.580
vale    arizali       1133      0          0       0.00       0.580

bir aktarimda servisten gecen bayt: vekil 80000, vale 512 (oran 156.3 kat)
```

Bu sayılar **ölçüm** sınıfındadır ve süreç içi bir modelden gelirler; girdileri K01'in hesabı ile
bu dersin varsayımlarıdır.

## Yavaşlayan Deponun Servise Bulaşması

Arızasız satırlar iki yolun sessiz farkını veriyor: seksen saniyede vekil yol servisten 90,640
MB geçiriyor, vale yolu 0,580 MB. Aktarım başına 80.000 bayta karşı 512 bayt, 156,3 kat. Ortalama
tutulan yuva vekil yolda 3,54; bu, gelen hız ile hizmet süresinin çarpımıdır ve arızasız günde
64 yuvalık havuzun yanında küçüktür.

Arızalı satır asıl ayrımı yapıyor. Depo yanıt süresi yirmi kat uzayınca tutulan yuva ortalaması
18,65'e, tepe 64'e çıkıyor — havuz **doyuyor** — ve 28 aktarım reddediliyor. Kabul edilen aktarım
1133'ten 1105'e iniyor. Vale yolunda aynı yavaşlamada tutulan yuva 0, reddedilen 0, kabul 1133:
servis kanıtın baytına hiç dokunmadığı için deponun yavaşlaması servisin havuzuna yansımıyor.
İstemci hâlâ yavaş bir depoyla konuşur, ama bekleyen taraf istemcidir; **bulaşma kapsamı
servisin dışında kalır.** Havuzun doyması yalnız kanıt aktarımını değil, aynı havuzu paylaşan
başka işleri de etkiler; havuzların ayrılması bu kursun Arıza Yalıtımı konusundaki bölme
kalıbının sorusudur.

## Kapsam ve Süre

Kalıbın karşılığı bir yetkidir ve yetki iki eksende ölçülür: ne kadar süre açık kaldığı ve kaç
nesneyi açtığı.

**DD14 — vale anahtarı süresi 300 saniye.** Gerekçesi: bir kanıt yüklemesi ya da görüntülemesi
tek bir kullanıcı eylemidir ve dakikalar sürmez; süre yeniden deneme payı bırakacak kadar uzun
tutulur. Duyarlılığı 60 ve 3600 saniyeyle verilir. **DD15 — bir anahtarın sızma olasılığı 10⁻⁶**;
anahtar günlük kaydına, tarayıcı geçmişine ya da paylaşılan bir bağlantıya düşebilir. İkisi de
varsayımdır.

```js
// vale/kapsam.mjs — kapsam daraltmanin anahtar uretimi, yetki penceresi ve maruz kalma etkisi
const V3 = 400_000, V8 = 3, V12 = 730, GUN = 86_400;   // K01: gonderi, tepe carpani, saklama
const SATICI = 4000, UC_TEPE = 513.89;                 // K01 hesabi: satici sayisi, uctaki tepe
const DD14 = 300, DD15 = 1e-6;                         // anahtar suresi (s), anahtar sizma olasiligi
const GUNLUK = V3 / SATICI;                            // satici basina gunluk gonderi = 100

// Kapsam: [ad, gunluk anahtar uretimi, bir anahtarin eristigi nesne sayisi]
const KAPSAM = [["tek nesne", V3, 1], ["satici-gun oneki", SATICI, GUNLUK],
  ["satici kovasi", SATICI, GUNLUK * V12]];

console.log(`DD14 anahtar suresi ${DD14} s, DD15 sizma olasiligi ${DD15}; ` +
  `gunde ${V3.toLocaleString("tr-TR")} kanit, ${SATICI} satici, satici basina ${GUNLUK} gonderi`);
console.log(`\n${"kapsam".padEnd(18)}${"anahtar/gun".padStart(13)}${"tepe anahtar/s".padStart(16)}` +
  `${"K01 ucunun".padStart(12)}${"acik pencere".padStart(14)}${"yuzey".padStart(9)}` +
  `${"nesne-saniye/gun".padStart(18)}`);
for (const [ad, uretim, yuzey] of KAPSAM) {
  const tepe = (uretim / GUN) * V8, acik = tepe * DD14;
  const maruz = uretim * DD15 * yuzey * DD14;
  console.log(`${ad.padEnd(18)}${uretim.toLocaleString("tr-TR").padStart(13)}` +
    `${tepe.toFixed(4).padStart(16)}${`%${((100 * tepe) / UC_TEPE).toFixed(3)}`.padStart(12)}` +
    `${acik.toFixed(1).padStart(14)}${yuzey.toLocaleString("tr-TR").padStart(9)}` +
    `${maruz.toFixed(1).padStart(18)}`);
}

console.log(`\n${"DD14 duyarliligi".padStart(17)}${"tek nesne acik".padStart(16)}` +
  `${"satici-gun acik".padStart(17)}${"kova nesne-saniye".padStart(19)}`);
for (const s of [60, 300, 3600]) {
  const t = (V3 / GUN) * V8 * s, g = (SATICI / GUN) * V8 * s;
  console.log(`${`${s} s`.padStart(17)}${t.toFixed(1).padStart(16)}${g.toFixed(1).padStart(17)}` +
    `${(SATICI * DD15 * GUNLUK * V12 * s).toFixed(0).padStart(19)}`);
}
const [t1, g1, k1] = KAPSAM.map(([, u, y]) => u * DD15 * y * DD14);
console.log(`\nkova -> satici-gun: maruz kalma ${(k1 / g1).toFixed(0)} kat azaliyor, ` +
  `anahtar uretimi degismiyor`);
console.log(`satici-gun -> tek nesne: maruz kalma ${(g1 / t1).toFixed(2)} kat degisiyor, ` +
  `anahtar uretimi ${(V3 / SATICI).toFixed(0)} kat artiyor`);
console.log(`en kotu durum ayni degil: sizan tek anahtarin actigi nesne ` +
  `${KAPSAM.map(([ad, , y]) => `${ad} ${y.toLocaleString("tr-TR")}`).join(", ")}`);
```

```
DD14 anahtar suresi 300 s, DD15 sizma olasiligi 0.000001; gunde 400.000 kanit, 4000 satici, satici basina 100 gonderi

kapsam              anahtar/gun  tepe anahtar/s  K01 ucunun  acik pencere    yuzey  nesne-saniye/gun
tek nesne               400.000         13.8889      %2.703        4166.7        1             120.0
satici-gun oneki          4.000          0.1389      %0.027          41.7      100             120.0
satici kovasi             4.000          0.1389      %0.027          41.7   73.000           87600.0

 DD14 duyarliligi  tek nesne acik  satici-gun acik  kova nesne-saniye
             60 s           833.3              8.3              17520
            300 s          4166.7             41.7              87600
           3600 s         50000.0            500.0            1051200

kova -> satici-gun: maruz kalma 730 kat azaliyor, anahtar uretimi degismiyor
satici-gun -> tek nesne: maruz kalma 1.00 kat degisiyor, anahtar uretimi 100 kat artiyor
en kotu durum ayni degil: sizan tek anahtarin actigi nesne tek nesne 1, satici-gun oneki 100, satici kovasi 73.000
```

## Daraltmanın Getirisi Doğrusal Değil

Tablo, kapsamı daraltmanın iki basamağını ayırıyor ve basamaklar birbirine benzemiyor.

**Kova kapsamından satıcı-gün önekine inmek 730 kat kazandırıyor** ve hiçbir şeye mal olmuyor:
anahtar üretimi ikisinde de günde 4000, açık pencere ikisinde de 41,7 anahtar. Beklenen maruz
kalma 87.600 nesne-saniyeden 120,0'a düşüyor. Bu, bedava bir daraltmadır ve alınmaması için
gerekçe yoktur.

**Satıcı-gün önekinden tek nesneye inmek beklenen maruz kalmayı hiç değiştirmiyor** — iki satır
da 120,0 nesne-saniye — ama anahtar üretimini 100 kat artırıyor: günde 4000 yerine 400.000,
tepede 0,1389 yerine 13,8889 anahtar/s. Bu, K01'in uçtaki 513,89 istek/s'sinin yüzde 2,703'ü
eder. Beklenen değerin değişmemesinin nedeni aritmetiktir: kapsam yüz kat daralırken üretilen
anahtar sayısı yüz kat artıyor, çarpım sabit kalıyor.

Karar buna rağmen tek nesne lehine verilebilir, ama gerekçesi beklenen değer değildir: **en kötü
durum** eşit değil. Sızan tek bir anahtar tek nesne kapsamında 1, satıcı-gün önekinde 100, kova
kapsamında 73.000 nesne açar. Beklenen maruz kalma aynı olsa da dağılımın kuyruğu farklıdır ve
tek bir olayın taşıyabileceği en büyük zarar üç mertebe ayrılır.

Süre eksenine bakıldığında sonuç daha basit: açık pencere DD14 ile doğrusal büyür. Anahtar süresi
60 saniyeye çekildiğinde tek nesne kapsamında aynı anda geçerli anahtar 4166,7'den 833,3'e iner;
3600 saniyeye çıkarıldığında 50.000'e çıkar. Kova kapsamında bir saatlik anahtar günde 1.051.200
nesne-saniye üretir. **Süreyi kısaltmak her kapsamda doğrusal kazandırır; kapsamı daraltmak
yalnız ilk basamakta kazandırır.**

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

**Arızasız günün bedeli iki kalemdir.** Servis, taşımadığı her bayt için bir anahtar üretir:
tek nesne kapsamında günde 400.000 imzalama, tepede 13,8889 istek/s, uçtaki hızın yüzde
2,703'ü. Ve kalıcı olarak açık bir yetki penceresi taşınır — tek nesne kapsamında 300 saniyelik
süreyle 4166,7 anahtar aynı anda geçerlidir. Vekil yolda böyle bir pencere yoktur; erişim isteğin
kendisiyle sınırlıdır.

**Arızalı günün kazancı yalıtımdır.** Kanıt deposu yirmi kat yavaşladığında vekil yol havuzunu
64 yuvada doyuruyor ve 80 saniyede 28 aktarım düşürüyor; vale yolunda düşen aktarım 0, tutulan
yuva 0. Fark bir hız farkı değil, bir bulaşma farkıdır: vekil yolda deponun arızası servisin
kaynağına dönüşür, vale yolunda istemcide kalır. Servisten geçmeyen bayt seksen saniyede 90,060
MB'dir (90,640 − 0,580) ve bu bayt, arızada tutulan yuvanın kaynağıdır.

## Özet

- Aktarım başına servisten geçen bayt vekil yolda 80.000, vale yolunda 512; oran 156,3 kat, 80
  saniyelik koşumda 90,640 MB'ye karşı 0,580 MB.
- Depo 20 kat yavaşladığında vekil yolda tutulan yuva ortalaması 18,65, tepe 64 (havuz doyuyor)
  ve 28 aktarım düşüyor; vale yolunda yuva 0, düşen 0.
- Arızasız günün bedeli anahtar üretimidir: tek nesne kapsamında günde 400.000 imzalama, tepede
  13,8889 istek/s, K01'in uçtaki hızının yüzde 2,703'ü.
- Açık yetki penceresi süreyle doğrusaldır: DD14 = 60/300/3600 saniyede tek nesne kapsamında
  833,3 / 4166,7 / 50.000 anahtar aynı anda geçerlidir.
- Kapsam daraltmanın ilk basamağı bedava: kova → satıcı-gün beklenen maruz kalmayı 87.600'den
  120,0 nesne-saniyeye indiriyor, anahtar üretimini değiştirmiyor.
- İkinci basamak beklenen değeri değiştirmiyor (120,0 → 120,0) ama anahtar üretimini 100 kat
  artırıyor; gerekçesi en kötü durumdur — sızan bir anahtarın açtığı nesne 73.000 / 100 / 1.

## Sonraki Adım

Kanıt yolu artık üç karara dayanıyor: yükün nerede duracağı, fişin ne zaman silineceği ve
anahtarın hangi kapsamla kaç saniye geçerli olacağı. Bu sayıların üçü de koda gömülü: yaşam
süresi bir sabit, anahtar süresi bir sabit, havuz boyu bir sabit. Bir arıza sırasında anahtar
süresini kısaltmak ya da kanıt yolunu tümden kapatmak gerekirse tek yol yeniden dağıtımdır ve
yeniden dağıtım kesinti bütçesinin planlı payından yer alır. Sonraki ders bu ayarların uygulamanın
dışına çıkarılmasını ele alır: değişikliğin bütün kopyalara yayılma süresi, önbellekli okumanın
bedeli, deponun kendisi düştüğünde davranış ve yanlış konan bir değerin bulaşma kapsamı.
