İçeriğe geç
academia.sh

Ders 11 / 21

Aşamalı Yayın

Yüzdelik dağıtımın karar tarafı ölçülür: yüzdeyi artıran ölçüt, ölçüt penceresi ve karar eşiği taranır. Üç merdivende belirgin ve silik kusurun durdurulma oranı, etkilenen istek, temiz sürümün yanlış geri alınması ve yayının toplam süresi sayılır.

İçindekiler

Terfi kapısı tek bir karardı: çıktı geçti ya da geçmedi, geçtiğinde tamamına açıldı. Terfi tek adımda olmak zorunda değil. Yeni sürüm önce isteklerin küçük bir yüzdesine açılabilir, bir süre izlenebilir, sonra pay artırılabilir. Bu, kapıyı tek karardan bir karar dizisine dönüştürür.

Dağıtımın kendisi — payın nasıl kaydırıldığı, kaç kopyanın hangi sürümde durduğu, kaçan hatanın kaç isteğe dokunduğu — ölçülmüş bir konudur ve burada tekrarlanmıyor; bu dersin girdisidir. Buranın sorusu bir adım geridedir: payı kim, neye bakarak artırıyor. Her adımın sonunda bir ölçüt okunur, bir eşikle karşılaştırılır ve iki karardan biri verilir: yüzdeyi artır ya da geri al. Kapı budur. Ölçülecek şey de bu kapının üç sayısıdır — hangi kusuru tutuyor, hangi temiz sürümü boşuna durduruyor, yayına kaç dakika ekliyor.

  • YS13. Kurgusal bölgesel ölçüm ağının faturalama servisi dakikada beş yüz istek alır. Günün saatine göre değişim, bölge farkı ve istek karması modellenmiyor. Ağ da rakamlar da kurgudur.
  • YS14. Bozuk sürüm terfi kapılarını geçmiştir; kusuru yalnız üretim trafiğinde görünür. İki şiddet ölçülür: belirgin kusur isteklerin yüzde bir virgül altısında, silik kusur yüzde sekiz onda birinde hata verir. Tabandaki hata oranı yüzde dört onda birdir.
  • YS15. Ölçüt tek kalemdir: yeni sürümün hata oranı. Gecikme, doygunluk ve iş ölçütleri ile çok kalemli karar modelin dışındadır.
  • YS16. Pencere adımın sonunda bir kez okunur. Kayan pencere, ardışık ihlal sayacı ve ölçüt toplama gecikmesi modellenmiyor.
  • YS17. Geri alma anında ve bedelsizdir. Geri almanın tur maliyeti bu dersin konusu değildir.
  • YS18. Her ayar iki yüz kez koşturulur; oranlar bu iki yüz koşumun payıdır. Tohum görünürdür.

Ölçüm Düzeneği

Ölçülen şey gerçek bir yayın değil, node ile kurulan bir modeldir. Model bir merdiveni adım adım tırmanır, her adımda pencereye düşen istekleri tek tek üretir ve adımın sonunda kararı verir. Rastgelelik üreteci kendi yazılmıştır, tohumu görünürdür.

// yayin.mjs — asamali yayinin karar tarafinin modeli; gercek trafik degil, bir modeldir
export const TOHUM = 20260903;
export const ISTEK_DK = 500, TABAN = 0.004, BELIRGIN = 0.016, SILIK = 0.008;
export const PENCERE = 10, CARPAN = 2.5, TEKRAR = 200;

export function uretec(tohum) {                    // dogrusal eslesik uretec, tohum gorunur
  let x = tohum >>> 0;
  return () => { x = (Math.imul(x, 1664525) + 1013904223) >>> 0; return x / 4294967296; };
}

export const merdivenler = {                       // yuzde adimlari
  hizli: [5, 50, 100], dengeli: [1, 5, 25, 50, 100], dikkatli: [1, 2, 5, 10, 25, 50, 100],
};

// Bir yayin: merdiven adim adim tirmanir, her adimin sonunda olcut penceresi okunur.
// Karar kapisi buradadir: pencerede gorulen hata orani esigi asarsa geri al, asmazsa yuzdeyi artir.
export function kosum(rnd, merdiven, pencere, esik, oran) {
  let dokunulan = 0;
  for (let i = 0; i < merdiven.length; i += 1) {
    const n = Math.round(ISTEK_DK * pencere * merdiven[i] / 100);
    let h = 0;
    for (let r = 0; r < n; r += 1) if (rnd() < oran) h += 1;
    dokunulan += n;
    if (n > 0 && h / n > esik) return { karar: 'geri al', adim: i + 1, dokunulan };
  }
  return { karar: 'tamam', adim: merdiven.length, dokunulan };
}

export function kostur(merdiven, oran, pencere = PENCERE, carpan = CARPAN) {
  const esik = TABAN * carpan, rnd = uretec(TOHUM);
  let durdurulan = 0, adim = 0, dokunulan = 0;
  const dagilim = merdiven.map(() => 0);
  for (let k = 0; k < TEKRAR; k += 1) {
    const s = kosum(rnd, merdiven, pencere, esik, oran);
    if (s.karar === 'geri al') { durdurulan += 1; adim += s.adim; dagilim[s.adim - 1] += 1; }
    dokunulan += s.dokunulan;
  }
  return { dagilim, oran: durdurulan / TEKRAR, ortAdim: durdurulan ? adim / durdurulan : 0,
    ortDokunulan: Math.round(dokunulan / TEKRAR), sure: merdiven.length * pencere, esik };
}

Aynı kostur üç ayrı sürüm için çağrılır. Belirgin ve silik kusurlu sürümlerde oran sonucu kapının tuttuğudur; taban oranıyla çağrıldığında aynı sayı kapının yanlış tuttuğudur — çünkü o sürümde kusur yoktur.

Üç Merdiven

// kosum1.mjs — uc merdiven, uc surum: belirgin kusurlu, silik kusurlu, temiz
import { kostur, merdivenler, TOHUM, ISTEK_DK, TABAN, BELIRGIN, SILIK, PENCERE, CARPAN, TEKRAR } from './yayin.mjs';

console.log(`tohum ${TOHUM} | ${ISTEK_DK} istek/dk, pencere ${PENCERE} dk, ${TEKRAR} tekrar`);
console.log(`taban hata orani %${TABAN * 100} | belirgin kusur %${BELIRGIN * 100} | silik kusur %${SILIK * 100}`);
console.log(`karar esigi: tabanin ${CARPAN} kati, yani %${TABAN * CARPAN * 100}\n`);
console.log('merdiven  yuzde adimlari        belirgin kusur        silik kusur      temiz surum  yayin');
console.log('                                durdu  adim  etkilen  durdu  etkilen  yanlis durdu suresi');
for (const [ad, m] of Object.entries(merdivenler)) {
  const b = kostur(m, BELIRGIN), s = kostur(m, SILIK), t = kostur(m, TABAN);
  console.log(`${ad.padEnd(9)} ${m.join('-').padEnd(20)} ${`%${(b.oran * 100).toFixed(0)}`.padEnd(6)} ` +
    `${b.ortAdim.toFixed(2).padEnd(5)} ${String(b.ortDokunulan).padEnd(8)} ${`%${(s.oran * 100).toFixed(0)}`.padEnd(6)} ` +
    `${String(s.ortDokunulan).padEnd(8)} ${`%${(t.oran * 100).toFixed(0)}`.padEnd(12)} ${b.sure} dk`);
}
console.log('\nadim basina olcut penceresine dusen istek ve gorulebilecek en kucuk sifir disi oran:');
for (const p of [1, 2, 5, 10, 25, 50, 100]) {
  const n = ISTEK_DK * PENCERE * p / 100;
  console.log(`  %${String(p).padStart(3)} pay: ${String(n).padStart(5)} istek/pencere, tek hata = %${(100 / n).toFixed(2)}` +
    ` -> esik %${(TABAN * CARPAN * 100).toFixed(1)} ${100 / n > TABAN * CARPAN * 100 ? 'ayirt edilemez' : 'ayirt edilebilir'}`);
}
tohum 20260903 | 500 istek/dk, pencere 10 dk, 200 tekrar
taban hata orani %0.4 | belirgin kusur %1.6 | silik kusur %0.8
karar esigi: tabanin 2.5 kati, yani %1

merdiven  yuzde adimlari        belirgin kusur        silik kusur      temiz surum  yayin
                                durdu  adim  etkilen  durdu  etkilen  yanlis durdu suresi
hizli     5-50-100             %100   1.23  825      %40    5375     %9           30 dk
dengeli   1-5-25-50-100        %100   1.60  306      %70    3423     %27          50 dk
dikkatli  1-2-5-10-25-50-100   %100   1.72  188      %82    2403     %32          70 dk

adim basina olcut penceresine dusen istek ve gorulebilecek en kucuk sifir disi oran:
  %  1 pay:    50 istek/pencere, tek hata = %2.00 -> esik %1.0 ayirt edilemez
  %  2 pay:   100 istek/pencere, tek hata = %1.00 -> esik %1.0 ayirt edilebilir
  %  5 pay:   250 istek/pencere, tek hata = %0.40 -> esik %1.0 ayirt edilebilir
  % 10 pay:   500 istek/pencere, tek hata = %0.20 -> esik %1.0 ayirt edilebilir
  % 25 pay:  1250 istek/pencere, tek hata = %0.08 -> esik %1.0 ayirt edilebilir
  % 50 pay:  2500 istek/pencere, tek hata = %0.04 -> esik %1.0 ayirt edilebilir
  %100 pay:  5000 istek/pencere, tek hata = %0.02 -> esik %1.0 ayirt edilebilir

Belirgin kusurda üç merdiven de tam not aldı: iki yüz koşumun iki yüzünde de sürüm durduruldu. Ayrıştıkları yer etkilenen istek sayısı. Hızlı merdiven ilk adımını yüzde beşten açtığı için sekiz yüz yirmi beş isteğe dokundu; dikkatli merdiven yüzde birden başlayıp yüz seksen sekizde kaldı. Bedeli süre: otuz dakikaya karşı yetmiş dakika.

Silik kusur sütunu tabloyu çeviriyor. Hata oranı yüzde sekiz onda bir olan sürüm eşiğin altındadır; kapı onu ancak gürültü eşiği aştırdığında yakalar. Hızlı merdiven bu sürümü on koşumdan dördünde durdurdu, dikkatli merdiven sekizinde. Ama durduramadığında dokunduğu istek sayısı hızlıda beş bin üç yüz yetmiş beş, dikkatlide iki bin dört yüz üç. Kapının kaçırdığı bir kusurda merdivenin ayrıntısı hâlâ işe yarıyor — çünkü kaçırma anında bile pay küçük kalıyor.

Son sütun faturayı yazıyor. Dikkatli merdiven temiz bir sürümü on koşumdan üçünde durdurdu. Yüzde otuz iki. Bunun neden böyle olduğunu alttaki tablo söylüyor: yüzde bir paya on dakikalık pencerede elli istek düşer. Elli istekte görülebilecek en küçük sıfır olmayan hata oranı yüzde ikidir — karar eşiğinin iki katı. O adımda tek bir taban hatası bile kapıyı tetikler. Kapı orada sürümü ölçmüyor, gürültüyü ölçüyor.

Pencere ve Eşik

// kosum2.mjs — dengeli merdivende olcut penceresi ve karar esigi ayri ayri taranir
import { kostur, merdivenler, TABAN, BELIRGIN, SILIK, PENCERE, CARPAN } from './yayin.mjs';
const m = merdivenler.dengeli;

console.log(`merdiven ${m.join('-')} | esik carpani ${CARPAN} sabit`);
console.log('pencere  belirgin durdu  silik durdu  temiz yanlis durdu  etkilenen  yayin suresi');
for (const p of [5, 10, 20, 40, 80]) {
  const b = kostur(m, BELIRGIN, p), s = kostur(m, SILIK, p), t = kostur(m, TABAN, p);
  console.log(`${`${p} dk`.padEnd(8)} ${`%${(b.oran * 100).toFixed(0)}`.padEnd(15)} ${`%${(s.oran * 100).toFixed(0)}`.padEnd(12)} ` +
    `${`%${(t.oran * 100).toFixed(0)}`.padEnd(19)} ${String(b.ortDokunulan).padEnd(10)} ${b.sure} dk`);
}
console.log(`\npencere ${PENCERE} dk sabit | esik = taban x carpan`);
console.log('carpan  esik    belirgin durdu  silik durdu  temiz yanlis durdu  etkilenen');
for (const c of [1.5, 2, 2.5, 3, 4, 6]) {
  const b = kostur(m, BELIRGIN, PENCERE, c), s = kostur(m, SILIK, PENCERE, c), t = kostur(m, TABAN, PENCERE, c);
  console.log(`${String(c).padEnd(7)} ${`%${(TABAN * c * 100).toFixed(1)}`.padEnd(7)} ${`%${(b.oran * 100).toFixed(0)}`.padEnd(15)} ` +
    `${`%${(s.oran * 100).toFixed(0)}`.padEnd(12)} ${`%${(t.oran * 100).toFixed(0)}`.padEnd(19)} ${b.ortDokunulan}`);
}

const t2 = kostur(m, TABAN), b2 = kostur(m, BELIRGIN);
console.log(`\npencere ${PENCERE} dk, esik carpani ${CARPAN}: durusun hangi adimda oldugu`);
console.log(`  yuzde adimi:         ${m.map((x) => `%${x}`.padStart(6)).join('')}`);
console.log(`  temiz surum durdu:   ${t2.dagilim.map((x) => String(x).padStart(6)).join('')}`);
console.log(`  belirgin kusur durdu:${b2.dagilim.map((x) => String(x).padStart(6)).join('')}`);
merdiven 1-5-25-50-100 | esik carpani 2.5 sabit
pencere  belirgin durdu  silik durdu  temiz yanlis durdu  etkilenen  yayin suresi
5 dk     %100            %64          %20                 341        25 dk
10 dk    %100            %70          %27                 306        50 dk
20 dk    %100            %48          %9                  563        100 dk
40 dk    %100            %40          %5                  770        200 dk
80 dk    %100            %34          %2                  890        400 dk

pencere 10 dk sabit | esik = taban x carpan
carpan  esik    belirgin durdu  silik durdu  temiz yanlis durdu  etkilenen
1.5     %0.6    %100            %100         %53                 236
2       %0.8    %100            %91          %26                 306
2.5     %1.0    %100            %70          %27                 306
3       %1.2    %100            %45          %23                 565
4       %1.6    %94             %37          %19                 1373
6       %2.4    %31             %7           %2                  6333

pencere 10 dk, esik carpani 2.5: durusun hangi adimda oldugu
  yuzde adimi:             %1    %5   %25   %50  %100
  temiz surum durdu:       37    16     0     0     0
  belirgin kusur durdu:   100    79    21     0     0

Pencere taraması düz bir eğri vermiyor. Beş dakikadan on dakikaya çıkıldığında yanlış durdurma yüzde yirmiden yirmi yediye yükseliyor, sonra düşüyor. Sebep karar kuralında: yüzde bir payda pencere ne kadar küçükse o kadar az istek gelir, ama tek bir hata hâlâ eşiği aşar. Pencereyi büyütmek önce “tek hata görme” olasılığını artırır; ancak pencere iki hata gerektirecek kadar büyüdüğünde eğri döner. Yirmi dakikada yanlış durdurma yüzde dokuza, seksen dakikada yüzde ikiye iner — karşılığında yayın süresi elli dakikadan dört yüz dakikaya çıkar ve etkilenen istek üç yüz altıdan sekiz yüz doksana yükselir. Beklemenin bedeli, beklerken dokunulan isteklerdir.

Eşik taraması kesin bir değiş tokuş gösteriyor. Çarpanı bir buçuğa indirmek silik kusurun tamamını yakalatıyor, ama temiz sürümlerin yarısından fazlasını durduruyor. Altıya çıkarmak yanlış durdurmayı yüzde ikiye indiriyor; bu kez belirgin kusurun bile yalnız üçte biri yakalanıyor ve etkilenen istek altı bin üç yüz otuz üçe fırlıyor. İki ile iki buçuk arasındaki satırlar dikkate değer: yanlış durdurma neredeyse aynı kalırken silik kusur yakalama yüzde yetmişten doksan bire çıkıyor. Eşiği iki buçuktan ikiye çekmek karşılıksız bir kazançtır.

Bunun nedeni son bloktadır. Temiz sürümün elli üç yanlış duruşunun otuz yedisi ilk adımda, on altısı ikinci adımda oldu; üçüncü adımdan sonra bir tane bile yok. Yanlış durdurmaları eşik değil küçük paylı adımlar üretiyor. Eşiği oynatmak o adımları düzeltmiyor, çünkü orada ölçülen sayı zaten eşikten bağımsız olarak sıçrıyor. Belirgin kusur satırı da aynı yerde yoğunlaşıyor: yüz koşum ilk adımda, yetmiş dokuzu ikinci adımda durduruldu. Yani ilk iki adım hem kararların hem yanlışların neredeyse tamamını üretiyor; sonraki üç adım yalnız süre ekliyor.

Kapının Üç Sayısı

Tuttuğu: belirgin kusurlu sürümü iki yüz koşumun iki yüzünde durdurdu. Yalnız kendisinin tuttuğu: bu kusurların hepsi — bozuk sürüm tanım gereği terfi kapılarını geçmiş bir sürümdür ve kusuru yalnız üretim trafiğinde görünür. Yüzde artırma kapısı, gerçek trafiği ölçüte çeviren ilk kapıdır; marjinali bu yüzden yüzde yüzdür.

Kaçırdığı: silik kusurun merdivene göre yüzde on sekizi ile altmışı; eşik altıya çekildiğinde belirgin kusurun bile yüzde altmış dokuzu. Yanlış tuttuğu: dengeli merdivende temiz sürümlerin yüzde yirmi yedisi, dikkatli merdivende yüzde otuz ikisi; seksen dakikalık pencerede yüzde ikiye iniyor. Eklediği süre: merdiven başına otuz, elli ve yetmiş dakika; pencere büyütüldüğünde dört yüz dakikaya kadar.

Bu üç sayının hiçbiri kalıbın adından okunamaz. “Kanarya yaptık” cümlesi, kapının hangi ölçüte, hangi pencereyle, hangi eşikle baktığını söylemedikçe boş bir cümledir — ve bu üç ayarın en kötüsü, kararın alınamayacağı kadar küçük bir payda karar almaya çalışmaktır.

Özet

  • Üç merdiven aynı kusur şiddetlerinde koşturuldu: belirgin kusuru üçü de iki yüz koşumda durdurdu, ama etkilenen istek sekiz yüz yirmi beşten yüz seksen sekize indi, süre otuz dakikadan yetmiş dakikaya çıktı.
  • Silik kusurda durdurma oranı yüzde kırk ile seksen iki arasında değişti; kapının kaçırdığı durumda bile ayrıntılı merdiven dokunulan isteği beş bin üç yüz yetmiş beşten iki bin dört yüz üçe indirdi.
  • Yanlış geri alma ölçüldü: dengeli merdivende yüzde yirmi yedi, dikkatlide yüzde otuz iki. Elli üç yanlış duruşun tamamı ilk iki adımda gerçekleşti, üçüncü adımdan sonra bir tane bile yok.
  • Pencere taraması tek yönlü değil: beş dakikadan on dakikaya çıkmak yanlış durdurmayı artırdı, yirmiden sonra düşürdü; seksen dakikada yüzde iki, karşılığında yayın süresi dört yüz dakika.
  • Eşik taramasında iki buçuk yerine iki çarpanı silik kusur yakalamasını yüzde yetmişten doksan bire çıkardı ve yanlış durdurmayı artırmadı; eşiği yükseltmek kaçırmayı hızla büyüttü.
  • Yüzde bir paya on dakikalık pencerede elli istek düşer; tek hata yüzde iki okunur, eşik yüzde bir. O adımda kapı sürümü değil gürültüyü ölçer — küçük pay etkiyi sınırlar, kararı sağlamaz.

Sonraki Adım

Bu ölçümün tamamı bir varsayıma yaslandı: geri alma anında ve bedelsizdir. Kapı “geri al” dediği anda modelde hiçbir şey olmuyordu. Gerçekte geri almanın bir turu, bir maliyeti ve bir sınırı vardır. Eski sürüm hâlâ ayakta duruyorsa geri alma tek anahtar çevirme işidir; ayakta değilse yeniden yayın demektir. Sonraki ders iki tam ortamı yan yana tutan düzeni ölçer: geri almanın tur maliyetini, iki ortamı sürekli ayakta tutmanın kaynak bedelini, geçiş anında kesilen durum taşıyan istekleri ve veri katmanı paylaşıldığında geri almanın gerçekte neyi geri almadığını sayar.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat