Ders 09 / 20
Devralma Tasarımı
Devralmanın kurulum seçiminden sonra kalan üç kararı: terfiyi tetikleyen ardışık başarısız denetim eşiğinin yanlış devralma ile algılama gecikmesi arasında sayıyla seçilmesi, geri dönüş politikasının ikinci bir geçiş penceresi doğurması, yanıt veren ama işini yapamayan kopyanın sessizce yuttuğu yazmanın sayılması ve bütün bu geçişlerin aylık kesinti bütçesinin arıza payına çevrilmesi.
İçindekiler
Önceki konu sekiz kalıpla arızayı çevreledi: devre kesici bozuk bağımlılığı yoldan çıkardı, bölme kalıbı havuzları ayırdı, zaman aşımı bütçesi bekleyişi sınırladı, zarif bozulma çekirdek işlevi ayakta tuttu. Hepsinin ortak sınırı aynıydı: arıza çevrelendi, kaldırılmadı. Bozuk parça hâlâ bozuktur ve yerine geçecek kopyanın nasıl devreye gireceği tasarlanmadı.
Kurulumun kendisi Sistem Tasarımına Giriş kursunda ölçüldü: etkin–pasif düzende devralma tamamlanana kadar yazma düşer, etkin–etkin düzende devralma penceresi yoktur ama çakışan yazma doğar. O ölçüm burada girdidir ve tekrarlanmaz. Bu dersin sorusu bir katman yukarıdadır: devralma ne zaman tetiklenir, eski etkin kopya geri geldiğinde ne olur, ayakta görünüp işini yapamayan bir kopya neden devralma tetiklemez ve bu geçişler kesinti bütçesinden kaç saniye tutar.
Kurulumdan Sonra Kalan Üç Karar
Kurulum seçimi bir kopyanın yazma kabul edip etmediğini söyler; geçişin kendisini tasarlamaz. Geriye üç karar kalır.
Tetikleme. Kaç ardışık başarısız sağlık denetiminden sonra terfi başlatılır. Eşik 1 ise ilk başarısız denetim geçişi başlatır; eşik 4 ise dört denetim beklenir. Denetimin ne sorduğu bir sonraki dersin konusudur; bu modelde denetim yalnız “yanıt veriyor mu” sorar, yani sığdır.
Geri dönüş. Eski etkin kopya sağlığına kavuştuğunda etkinlik ona geri verilir mi, yoksa yeni kopya kalıcı olarak etkin mi kalır. Geri dönüş kendi başına bir geçiştir ve kendi penceresini üretir.
Ayırt etme. Yanıt veren ama işini yapamayan bir kopya nasıl görülür. Bu kopya sağlık denetiminden geçtiği için hiçbir eşik onu yakalayamaz.
İki kopyanın aynı anda kendini etkin sanması ayrı bir sorundur; kira süresi ve iki liderli tur Uygulama Katmanı ve Servis Etkileşimi kursunda kuruldu, burada tekrarlanmaz.
Düzenek
Aşağıdaki düzenek bir modeldir: gerçek küme, bölge ya da kapsayıcı kurulmaz. Tur soyut bir
adımdır — Sistem Tasarımına Giriş kursundaki devralma modelinin düzeni sürdürülür. Arıza takvimi
parametredir: A kopyası iki kez kısa süre yanıtsız kalıp kendiliğinden döner, iki kez gerçekten
durur ve bir kez yarı düşük olur (ayakta, sığ denetimi geçiyor, ama durum deposuna
yazamıyor). B kopyası modelde hep ayaktadır; bu bir sadeleştirmedir ve iki kopyanın birlikte
düşmesi hesaba katılmaz.
// devralma/model.mjs — etkin-pasif devralma MODELIDIR. Tur soyut bir adimdir (M19/K01 // erisilebilirlik kaliplari dersinin duzeni); algilama esigi, terfi ve ariza pencereleri // tur cinsinden parametrelerdir, olculmus sure degildir. Gercek kume kurulmaz. export const TUR = 130; export const KESIK = [[12, 12], [20, 21]]; // A yanit vermiyor ama kendiliginden donecek export const DURDU = [[30, 75], [90, 96]]; // A gercekten durdu export const YARI = [[100, 120]]; // A ayakta ve sig denetimi geciyor, depoya yazamiyor const TERFI = 1; // varsayim: terfi bir tur surer const GERI_ESIK = 3; // varsayim: geri donus icin ardisik saglikli denetim const icinde = (t, a) => a.some(([b, c]) => t >= b && t <= c); export const yanitVeriyor = (t) => !icinde(t, KESIK) && !icinde(t, DURDU); export const saglam = (t) => yanitVeriyor(t) && !icinde(t, YARI); export function kosum({ esik, geriDonus, tur: N = TUR }) { const s = { dusen: 0, sessiz: 0, devralma: 0, yanlis: 0, donus: 0, pencere: 0 }; let etkin = "A", ard = 0, iyi = 0, biter = null, yon = null; for (let t = 1; t <= N; t += 1) { const yanit = etkin === "A" ? yanitVeriyor(t) : true; // B modelde hep ayakta if (biter !== null) { // gecis penceresi suruyor s.pencere += 1; s.dusen += 1; if (t === biter) { // geriye donuk siniflama: eski etkin kendiliginden dondu, devralma gereksizdi if (yon === "devralma" && yanitVeriyor(t + 1)) s.yanlis += 1; etkin = yon === "devralma" ? "B" : "A"; biter = null; yon = null; ard = 0; iyi = 0; } continue; } if (etkin === "A" && yanit === false) { // sig denetim: yalniz yanit ard += 1; s.dusen += 1; if (ard >= esik) { biter = t + TERFI; yon = "devralma"; s.devralma += 1; } continue; } ard = 0; if (etkin === "B" && geriDonus === "otomatik") { iyi = yanitVeriyor(t) ? iyi + 1 : 0; if (iyi >= GERI_ESIK) { biter = t + TERFI; yon = "donus"; s.donus += 1; iyi = 0; continue; } } if (etkin === "A" && saglam(t) === false) s.sessiz += 1; // yazma kabul edildi, depoya gitmedi } return s; } export function kalipsiz(N = TUR) { // devralma yok: A neyse o let dusen = 0, sessiz = 0, kabul = 0; for (let t = 1; t <= N; t += 1) { if (yanitVeriyor(t) === false) dusen += 1; else if (saglam(t) === false) sessiz += 1; else kabul += 1; } return { kabul, dusen, sessiz }; }
// devralma/olc.mjs — tetikleme esigi ile geri donus politikasinin ayni ariza takviminde olculmesi import { kosum, kalipsiz, TUR, KESIK, DURDU, YARI } from "./model.mjs"; const s = (x, n) => String(x).padStart(n); const uzunluk = (a) => a.reduce((t, [b, c]) => t + (c - b + 1), 0); console.log(`${TUR} tur. A kopyasi: ${uzunluk(KESIK)} tur gecici yanitsiz, ` + `${uzunluk(DURDU)} tur durdu, ${uzunluk(YARI)} tur yari dusuk. B modelde hep ayakta.`); const k = kalipsiz(); console.log(`kalipsiz duzen: kabul ${k.kabul}, dusen ${k.dusen}, sessiz kayip ${k.sessiz}`); console.log(); console.log("esik | devralma | yanlis devralma | geri donus | gecis turu | dusen | sessiz kayip"); console.log("-----|----------|-----------------|------------|------------|-------|-------------"); for (const esik of [1, 2, 3, 4]) { const r = kosum({ esik, geriDonus: "otomatik" }); console.log(`${s(esik, 4)} | ${s(r.devralma, 8)} | ${s(r.yanlis, 15)} | ${s(r.donus, 10)} | ` + `${s(r.pencere, 10)} | ${s(r.dusen, 5)} | ${s(r.sessiz, 12)}`); } console.log(); console.log("geri donus | esik | devralma | geri donus | gecis turu | dusen | etkin kopya degisimi"); console.log("-----------|------|----------|------------|------------|-------|---------------------"); for (const geriDonus of ["otomatik", "kalici"]) { const r = kosum({ esik: 3, geriDonus }); console.log(`${geriDonus.padEnd(10)} | ${s(3, 4)} | ${s(r.devralma, 8)} | ${s(r.donus, 10)} | ` + `${s(r.pencere, 10)} | ${s(r.dusen, 5)} | ${s(r.devralma + r.donus, 20)}`); }
130 tur. A kopyasi: 3 tur gecici yanitsiz, 53 tur durdu, 21 tur yari dusuk. B modelde hep ayakta. kalipsiz duzen: kabul 53, dusen 56, sessiz kayip 21 esik | devralma | yanlis devralma | geri donus | gecis turu | dusen | sessiz kayip -----|----------|-----------------|------------|------------|-------|------------- 1 | 4 | 2 | 4 | 8 | 12 | 20 2 | 3 | 1 | 3 | 6 | 13 | 20 3 | 2 | 0 | 2 | 4 | 13 | 20 4 | 2 | 0 | 2 | 4 | 15 | 20 geri donus | esik | devralma | geri donus | gecis turu | dusen | etkin kopya degisimi -----------|------|----------|------------|------------|-------|--------------------- otomatik | 3 | 2 | 2 | 4 | 13 | 4 kalici | 3 | 1 | 0 | 1 | 7 | 1
Eşiğin İki Yüzü
Kalıpsız satır karşılaştırmanın tabanıdır: devralma olmadan 130 turun 56’sında yazma kabul edilmez. Eşik 3 ile aynı takvimde düşen tur 13’e iner — kalıbın arızalı gündeki kazancı budur.
Eşik sütunu ödünleşimi iki yönlü gösteriyor. Eşik küçüldükçe yanlış devralma artıyor. Eşik 1, kendiliğinden dönecek iki kesintiyi de geçiş olarak işledi: 4 devralmanın 2’si yanlış devralmadır, yani eski etkin kopya terfi biter bitmez yanıt vermeye başlamıştı. Eşik 2 bunlardan birini yakaladı, eşik 3 ve 4 hiçbirini tetiklemedi.
Eşik büyüdükçe algılama gecikiyor. Gerçek durmanın başladığı turdan geçişin tamamlandığı tura kadar geçen süre eşik kadar uzar; düşen tur eşik 3’te 13, eşik 4’te 15’tir. Toplam tek yönlü değildir: eşik 1 ile eşik 3 arasında düşen tur 12 ve 13 gibi birbirine yakın çıkıyor, çünkü eşik 1’in kazandığı algılama hızını yanlış devralmanın penceresi geri alıyor. Eşik seçimi bir hız kararı değil, iki maliyeti dengeleyen bir karardır; dengenin yeri arıza takvimine bağlıdır.
Sessiz kayıp sütunu dört satırda da 20’dir. Eşik ne seçilirse seçilsin değişmiyor, çünkü yarı düşük kopya sığ denetimi geçiyor ve sayaç hiç artmıyor.
Geri Dönüş İkinci Bir Penceredir
İkinci tablo aynı eşikle iki geri dönüş politikasını karşılaştırıyor. Otomatik geri dönüşte etkin kopya dört kez değişiyor (2 devralma, 2 geri dönüş) ve geçiş turu 4; kalıcı politikada tek bir değişim ve tek bir geçiş turu var. Düşen tur 13’ten 7’ye iniyor.
Fark iki yerden geliyor. Birincisi, her geri dönüş kendi penceresini üretir. İkincisi ve daha
önemlisi, otomatik geri dönüş sistemi aynı kopyaya yeniden bağlar: modelin takviminde A
kopyası ilk durmadan sonra geri dönüyor, etkinlik ona veriliyor ve az sonra ikinci kez duruyor.
Kalıcı politikada bu ikinci durma hiç kesinti üretmez, çünkü etkin kopya artık B’dir.
Otomatik geri dönüşün karşılığı işletme tarafındadır: kopyaların rolleri bilinen bir düzene döner. Karar, ölçülen iki sayının karşılaştırılmasıdır: 6 fazla düşen tur karşılığında bilinen bir yerleşim.
Yanıt Veren Ama Yazmayan Kopya
Yarı düşük pencere bu modelin en sessiz kısmıdır. Kopya ayaktadır, sağlık denetimini geçer ve istek kabul eder — ama kabul ettiği yazma durum deposuna ulaşmaz. Kalıpsız düzende 21, kalıplı düzende 20 tur boyunca yazma kabul edildi ve kayboldu. Kesinti bütçesi bu turları hiç görmez, çünkü sistem yanıt veriyordu.
İki Günün Sayısı
Turlar ancak bir çevrim varsayımıyla bütçeye çevrilir. Bu kursun kendi varsayımları K01’in tablosuna eklenmez, kendi adlarıyla anılır. KU1 — bir tur bir sağlık denetimi aralığıdır, 2 saniye. KU2 — ayda 2 gerçek durma; gerekçesi K01’in arıza payının ayda 2,82 arıza kaldırmasıdır. KU3 — ayda 20 geçici yanıtsızlık; gerekçesi kısa duraklamaların gerçek durmalardan sık olmasıdır. Kurtarma süresi, tepe yazma ve arıza payı K01’den okunur.
// devralma/butce.mjs — model turlarinin K01'in kesinti butcesine ve istek sayisina cevrilmesi const TUR_SN = 2; // KU1 (varsayim): bir tur bir saglik denetimi araligi, 2 saniye const GERCEK_AY = 2; // KU2 (varsayim): ayda 2 gercek durma const KESIK_AY = 20; // KU3 (varsayim): ayda 20 gecici yanitsizlik const KURTARMA_SN = 600; // K01: kurtarma suresi varsayimi 10 dakika const ARIZA_PAYI = 28.2; // K01: aylik kesinti butcesinin ariza payi (dakika) const TEPE_YAZMA = 97.22; // K01: tepe yazma istek/s const TEPE_UC = 513.89; // K01: tepe uctaki istek/s const TERFI = 1; const b = (x, n = 2) => x.toFixed(n); console.log(`${"esik".padStart(5)}${"gecis penceresi".padStart(17)}${"gercek durma (ay)".padStart(19)}` + `${"yanlis devralma (ay)".padStart(22)}${"toplam kesinti".padStart(16)}${"ariza payinin".padStart(15)}`); for (const esik of [1, 2, 3, 4]) { const pencere = (esik + TERFI) * TUR_SN; const gercek = GERCEK_AY * pencere; const yanlis = esik <= 2 ? KESIK_AY * (pencere + TERFI * TUR_SN) : 0; // esik 3+ kisa kesinti tetiklemiyor const toplam = gercek + yanlis; console.log(`${String(esik).padStart(5)}${(pencere + " sn").padStart(17)}${(b(gercek, 1) + " sn").padStart(19)}` + `${(b(yanlis, 1) + " sn").padStart(22)}${(b(toplam / 60, 2) + " dk").padStart(16)}` + `${("%" + b((100 * toplam) / 60 / ARIZA_PAYI, 2)).padStart(15)}`); } const kalipsiz = GERCEK_AY * KURTARMA_SN; console.log(`\nkalipsiz duzen: ayda ${GERCEK_AY} durma x ${KURTARMA_SN} sn = ${b(kalipsiz / 60, 1)} dk, ` + `ariza payinin %${b((100 * kalipsiz) / 60 / ARIZA_PAYI, 1)}'i`); const esik3 = GERCEK_AY * (3 + TERFI) * TUR_SN; console.log(`esik 3 ile ayni iki durma: ${esik3} sn, oran ${b(kalipsiz / esik3, 1)} kat kisalma`); console.log(`pencerede dusen: ${b((3 + TERFI) * TUR_SN * TEPE_YAZMA)} yazma, ` + `${b((3 + TERFI) * TUR_SN * TEPE_UC)} uc istegi (tepe yukte)`); const SESSIZ_TUR = 20; // modelden: yari dusuk pencerede kabul edilen ama depoya gitmeyen turlar console.log(`\nyari dusuk pencere: ${SESSIZ_TUR} tur x ${TUR_SN} sn = ${SESSIZ_TUR * TUR_SN} sn, ` + `${b(SESSIZ_TUR * TUR_SN * TEPE_YAZMA)} yazma sessizce kayboldu`); console.log(`bu pencere kesinti butcesinde gorunmez: sistem yanit veriyordu`); console.log(); for (const kopya of [2, 3]) { // etkin-etkin: bozuk kopya havuzun 1/k'sini tasiyor console.log(`etkin-etkin ${kopya} kopya: devreden cikarma penceresinde ` + `${b(((3 + TERFI) * TUR_SN * TEPE_YAZMA) / kopya)} yazma duser, ` + `yari dusuk pencerede ${b((SESSIZ_TUR * TUR_SN * TEPE_YAZMA) / kopya)} yazma sessizce kaybolur`); }
esik gecis penceresi gercek durma (ay) yanlis devralma (ay) toplam kesinti ariza payinin
1 4 sn 8.0 sn 120.0 sn 2.13 dk %7.57
2 6 sn 12.0 sn 160.0 sn 2.87 dk %10.17
3 8 sn 16.0 sn 0.0 sn 0.27 dk %0.95
4 10 sn 20.0 sn 0.0 sn 0.33 dk %1.18
kalipsiz duzen: ayda 2 durma x 600 sn = 20.0 dk, ariza payinin %70.9'i
esik 3 ile ayni iki durma: 16 sn, oran 75.0 kat kisalma
pencerede dusen: 777.76 yazma, 4111.12 uc istegi (tepe yukte)
yari dusuk pencere: 20 tur x 2 sn = 40 sn, 3888.80 yazma sessizce kayboldu
bu pencere kesinti butcesinde gorunmez: sistem yanit veriyordu
etkin-etkin 2 kopya: devreden cikarma penceresinde 388.88 yazma duser, yari dusuk pencerede 1944.40 yazma sessizce kaybolur
etkin-etkin 3 kopya: devreden cikarma penceresinde 259.25 yazma duser, yari dusuk pencerede 1296.27 yazma sessizce kaybolur
Arızalı günün kazancı ilk iki satırın karşılaştırmasıdır. Devralma olmadan aynı iki durma kurtarma süresi kadar sürer: 20,0 dakika, yani arıza payının yüzde 70,9’u. İki durma bütçenin neredeyse tamamını yer ve ayda üçüncü bir durma hedefi kırar. Eşik 3 ile aynı iki durma 16 saniye tutar — 75 kat kısalma — ve arıza payının yüzde 0,95’ini harcar. Bu oran koşumdan bağımsız türetilmiş bir niceliktir; makineye değil, kurtarma süresi ile geçiş penceresinin oranına bağlıdır.
Arızasız günün bedeli yanlış devralma sütunundadır. Eşik 1’de ayda 20 geçici yanıtsızlık, hiçbiri gerçek arıza olmadığı hâlde 120 saniye kesinti üretiyor; eşik 2’de 160 saniye. İki satırda da arızasız günün bedeli arızalı günün maliyetinden büyüktür: eşik 2’de 160 saniyeye karşı 12 saniye. Eşik 3’te bedel sıfıra iner ve karşılığında gerçek durmanın penceresi 4 saniyeden 8 saniyeye çıkar. Kalıbın arızasız gündeki ikinci bedeli aritmetikte görünmez: pasif kopya bütün kapasitesini taşır ve hiç istek yanıtlamaz.
Pencerenin tek seferlik faturası da yazılır: sekiz saniyelik bir geçişte tepe yükte 777,76 yazma ve uçta 4.111,12 istek düşer. Kesinti bütçesi ortalamayı ölçtüğü için bu yoğunlaşmayı göstermez.
Son iki satır kurulum farkını sayıya bağlıyor. Etkin–etkin düzende geçiş penceresi hizmetin tamamını durdurmaz, yalnız bozuk kopyanın payını düşürür: iki kopyada 388,88, üç kopyada 259,25 yazma. Aynı bölme sessiz kayıp için de geçerlidir — üç kopyalı düzende 3.888,80 yerine 1.296,27. Etkin–etkin kurulum arızayı ucuzlatmaz, böler; K01’in ölçtüğü çakışan yazma bu bölmenin karşılığıdır.
Özet
- Kurulum seçiminden sonra üç karar kalır: terfiyi tetikleyen eşik, eski etkin kopyaya geri dönüş politikası ve yanıt veren ama işini yapamayan kopyanın ayırt edilmesi.
- Eşik iki maliyeti dengeler: eşik 1 kendiliğinden dönecek iki kesintiyi de geçişe çevirdi (2 yanlış devralma), eşik 4 algılamayı geciktirdi (15 düşen tur); toplam düşen tur 12 ile 15 arasında dar bir aralıkta kaldı.
- Geri dönüş kendi penceresini üretir: otomatik politikada 4 geçiş ve 13 düşen tur, kalıcı politikada 1 geçiş ve 7 düşen tur.
- Hiçbir eşik yarı düşük kopyayı yakalamıyor: sessiz kayıp dört eşikte de 20 tur; sığ denetim yanıt aldığı için sayaç hiç artmıyor.
- KU1–KU3 varsayımlarıyla arızalı günün kazancı 20,0 dakikadan 16 saniyeye iniştir: 75 kat kısalma ve arıza payının yüzde 70,9 yerine yüzde 0,95’i.
- Arızasız günün bedeli eşik 1’de ayda 120, eşik 2’de 160 saniye yanlış devralma kesintisidir; eşik 3’te sıfırlanır, karşılığında geçiş penceresi 4 saniyeden 8 saniyeye çıkar.
Sonraki Adım
Bu dersin bütün kararları tek bir girdiye dayandı: sağlık denetiminin verdiği evet ya da hayır. O girdi yanlış olduğunda eşik de, geri dönüş politikası da anlamını yitiriyor — modelin yarı düşük penceresinde 3.888,80 yazma, sistem sağlıklı görünürken kayboldu. Sonraki ders denetimin içeriğini tasarlar: ucun bağımlılıklarına bakıp bakmadığı, bağımlılığı denetime katmanın bütün kopyaları birden sağlıksız işaretleme riski, trafik almaya hazır olmakla ayakta olmanın ayrılması ve denetim aralığının algılama gecikmesi ile yanlış devralma arasında nereye oturduğu.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.