Ders 10 / 21
Sertifika İptali
İptal kararı ile doğrulayanın bunu öğrenmesi arasındaki pencere ölçülür: günlük liste yayınında ortalama 29,5 saat ve 271.877 kabul edilen bağlantı, çevrimiçi sorguda 1,5 saat ve 13.925 bağlantı, sunucunun taşıdığı yanıtta 0,5 saat ve 4.621 bağlantı; listenin penceresini iki saate indirmek günlük indirmeyi 152 MB'tan 1.828 MB'a çıkarıyor ve sorgu yanıtsız kaldığında yumuşak başarısızlık 2 yol açarken sert başarısızlık 6.161 meşru bağlantı düşürüyor.
İçindekiler
Önceki ders kırılan bir kökün, depolardan çıkarılmadığı her makinede geçerli kalmaya devam ettiğini gösterdi. Aynı sorun tek bir uç kalem için de geçerlidir: bir sunucunun özel anahtarı denetim dışına çıktığında ya da bir sayaç ucu sahadan sökülüp alındığında o kalemin geçersiz sayılması gerekir — ama kalemin alanları değişmez. Geçerlilik penceresi hâlâ açıktır, imza hâlâ doğrulanır, ad hâlâ eşleşir. Bir önceki dersin on dört kalemi, iptal edilmiş bir kalem için de eksiksiz tutar.
İptal bu yüzden sertifikanın dışında durur: doğrulayanın başka bir yerden öğrenmesi gereken bir bilgidir. Öğrenmenin iki temel yolu vardır — iptal edilmiş kalemlerin listesini dağıtmak ya da her kullanımda otoriteye tek tek sormak. Bu ders ikisini aynı ölçüde karşılaştırır: karar ile öğrenme arasında kaç saat geçiyor, o pencerede kaç bağlantı kabul ediliyor ve öğrenme kanalı çalışmadığında verilen karar kaç yol açıyor.
- PK11. İptal, bir kalemin geçerlilik penceresi dolmadan geçersiz sayılması kararıdır. Karar otoritede verilir ve kalemin alanlarına dokunmaz.
- PK12. Öğrenme penceresi, iptal kararı ile o kararın belirli bir doğrulayana ulaşması arasındaki süredir. İstemcilerin tazeleme anları eşit dağıtılmıştır; bu bir model kararıdır.
- PK13. Pencerede kabul edilen bağlantı, pencere süresi ile istemcinin bağlantı hızının çarpımıdır. Adetler, hızlar, liste boyutu ve kesinti süresi kurgudur.
- PK14. Yumuşak başarısızlık, durum öğrenilemediğinde bağlantının kabul edilmesi; sert başarısızlık reddedilmesidir. Üçüncü bir seçenek yoktur.
- PK15. Sunucunun taşıdığı yanıt, durum yanıtını sunucunun kendi tazeleyip bağlantı sırasında istemciye vermesidir; istemcinin dış bir uca sorması gerekmez.
Öğrenmenin Penceresi
Üç yöntemin farkı bir mekanizma farkı değil, bir gecikme farkıdır. İptal listesinde karar önce bir yayına girer, sonra istemci o yayını kendi sırasında indirir; iki gecikme üst üste biner. Çevrimiçi sorguda yayın gecikmesi yoktur, yalnız istemcinin önbelleği vardır.
// iptal.mjs — iptal karari ile ogrenme arasindaki pencerenin modeli. MODELDIR. // Kurgu bolgesel olcum agi: adetler, hizlar ve saatler uydurmadir. export const SINIF = [ // ad, istemci adedi, istemci basina saatte baglanti ["sayac ucu", 4100, 2], ["ic servis", 26, 30], ["personel is istasyonu", 262, 1], ].map(([ad, adet, hiz]) => ({ ad, adet, hiz })); export const IPTAL = 30; // kurgu iptal karari ani, saat export const KESINTI = 40; // kurgu sorgulayici kesintisi, dakika export const KAYIT_BAYT = 28; // iptal listesinde kalem basina bayt (kurgu) export const IPTALLI = 1240; // listede duran iptal edilmis kalem sayisi (kurgu) export const YONTEM = [ // ad, yayin araligi (0 = gecikmesiz), istemcinin tazeleme araligi, istemci disa sorar mi ["iptal listesi", 24, 24, false], ["cevrimici durum sorgusu", 0, 4, true], ["sunucunun tasidigi yanit", 0, 2, false], ].map(([ad, yayin, tazeleme, disaSorar]) => ({ ad, yayin, tazeleme, disaSorar })); // Bir istemcinin ogrenme ani: once karar yayina girer, sonra istemci kendi sirasinda tazeler. export const pencere = (y, ofset) => { const yayinAni = y.yayin ? Math.ceil(IPTAL / y.yayin) * y.yayin : IPTAL; const ogrenme = yayinAni + (((ofset - yayinAni) % y.tazeleme) + y.tazeleme) % y.tazeleme; return ogrenme - IPTAL; }; export const ISTEMCI = SINIF.flatMap((s) => Array.from({ length: s.adet }, (_, i) => ({ sinif: s.ad, hiz: s.hiz, ofset: i }))); export const yaz = (g) => (h) => h.map((v, i) => (i ? String(v).padStart(g[i]) : String(v).padEnd(g[0]))).join("");
// pencere.mjs — ogrenme penceresi, penceredeki baglanti ve basarisizlik kararinin actigi yol import { SINIF, YONTEM, ISTEMCI, IPTAL, KESINTI, KAYIT_BAYT, IPTALLI, pencere, yaz } from "./iptal.mjs"; const TOPLAM = ISTEMCI.length; const SAATLIK = ISTEMCI.reduce((t, i) => t + i.hiz, 0); console.log(`${TOPLAM} istemci, saatte ${SAATLIK} baglanti, iptal karari ${IPTAL}. saatte`); console.log(`liste boyutu: ${IPTALLI} iptalli kalem x ${KAYIT_BAYT} bayt = ` + `${IPTALLI * KAYIT_BAYT} bayt`); const y1 = yaz([26, 10, 10, 10, 14, 12]); console.log("\n" + y1(["yontem", "en kisa", "en uzun", "ortalama", "kabul edilen", "gunluk dis"])); for (const y of YONTEM) { const p = ISTEMCI.map((i) => pencere(y, i.ofset)); const kabul = ISTEMCI.reduce((t, i, k) => t + p[k] * i.hiz, 0); const ort = p.reduce((a, b) => a + b, 0) / TOPLAM; const disSorgu = y.disaSorar ? TOPLAM * (24 / y.tazeleme) : y.yayin ? TOPLAM * (24 / y.tazeleme) : 24 / y.tazeleme; console.log(y1([y.ad, `${Math.min(...p)} sa`, `${Math.max(...p)} sa`, `${ort.toFixed(1)} sa`, kabul, disSorgu])); } // Liste yayin araligini daraltmanin pencereye ve indirme hacmine etkisi. const y4 = yaz([16, 12, 12, 14, 16]); console.log("\n" + y4(["liste araligi", "en uzun", "ortalama", "kabul edilen", "gunluk MB"])); for (const d of [24, 12, 6, 2]) { const y = { yayin: d, tazeleme: d }; const p = ISTEMCI.map((i) => pencere(y, i.ofset)); const mb = (TOPLAM * (24 / d) * IPTALLI * KAYIT_BAYT) / 1e6; console.log(y4([`${d} saat`, `${Math.max(...p)} sa`, `${(p.reduce((a, b) => a + b, 0) / TOPLAM).toFixed(1)} sa`, ISTEMCI.reduce((t, i, k) => t + p[k] * i.hiz, 0), mb.toFixed(0)])); } // Ayni pencerenin sinif basina dagilimi (iptal listesi ile cevrimici sorgu). const y2 = yaz([24, 10, 14, 14, 12]); console.log("\n" + y2(["sinif", "istemci", "liste kabul", "sorgu kabul", "oran"])); for (const s of SINIF) { const grup = ISTEMCI.filter((i) => i.sinif === s.ad); const [liste, sorgu] = [YONTEM[0], YONTEM[1]].map((y) => grup.reduce((t, i) => t + pencere(y, i.ofset) * i.hiz, 0)); console.log(y2([s.ad, grup.length, liste, sorgu, `${(liste / sorgu).toFixed(1)}x`])); } // Sorgulayici ulasilamadiginda verilen karar: yumusak ve sert basarisizlik. const kesintiBaglanti = Math.round(SAATLIK * (KESINTI / 60)); const KARAR = [ // ad, istemci disa soruyor mu, kabul mu, acilan yol, duran mesru is ["iptal listesi, onbellek gecerli", false, true, 0, 0], ["cevrimici sorgu, yumusak basarisizlik", true, true, 2, 0], ["cevrimici sorgu, sert basarisizlik", true, false, 0, kesintiBaglanti], ["sunucunun tasidigi yanit, sert", false, true, 0, 0], ]; const y3 = yaz([40, 11, 8, 13, 17]); console.log(`\nsorgulayici kesintisi ${KESINTI} dk -> ${kesintiBaglanti} baglanti etkileniyor`); console.log(y3(["karar", "dis bagim", "kabul", "acilan yol", "duran mesru is"])); for (const [ad, dis, kabul, yol, duran] of KARAR) console.log(y3([ad, dis ? "var" : "yok", kabul ? "evet" : "hayir", yol, duran])); const YOL = ["iptal edilmis kalem kabul edilir", "sorgulayiciya erisimi kesen taraf iptali gorunmez kilar"]; console.log("\nyumusak basarisizligin actigi yol:"); YOL.forEach((y, i) => console.log(` ${i + 1}. ${y}`)); console.log(`sert basarisizligin bedeli: ${kesintiBaglanti} mesru baglanti, ` + `${KESINTI} dk boyunca`);
4388 istemci, saatte 9242 baglanti, iptal karari 30. saatte liste boyutu: 1240 iptalli kalem x 28 bayt = 34720 bayt yontem en kisa en uzun ortalama kabul edilen gunluk dis iptal listesi 18 sa 41 sa 29.5 sa 271877 4388 cevrimici durum sorgusu 0 sa 3 sa 1.5 sa 13925 26328 sunucunun tasidigi yanit 0 sa 1 sa 0.5 sa 4621 12 liste araligi en uzun ortalama kabul edilen gunluk MB 24 saat 41 sa 29.5 sa 271877 152 12 saat 17 sa 11.5 sa 105941 305 6 saat 5 sa 2.5 sa 22973 609 2 saat 1 sa 0.5 sa 4621 1828 sinif istemci liste kabul sorgu kabul oran sayac ucu 4100 241820 12300 19.7x ic servis 26 22350 1230 18.2x personel is istasyonu 262 7707 395 19.5x sorgulayici kesintisi 40 dk -> 6161 baglanti etkileniyor karar dis bagim kabul acilan yol duran mesru is iptal listesi, onbellek gecerli yok evet 0 0 cevrimici sorgu, yumusak basarisizlik var evet 2 0 cevrimici sorgu, sert basarisizlik var hayir 0 6161 sunucunun tasidigi yanit, sert yok evet 0 0 yumusak basarisizligin actigi yol: 1. iptal edilmis kalem kabul edilir 2. sorgulayiciya erisimi kesen taraf iptali gorunmez kilar sert basarisizligin bedeli: 6161 mesru baglanti, 40 dk boyunca
İlk tablo pencerenin şeklini veriyor. Günlük yayınlanan bir listede iptal kararı en iyi ihtimalle on sekiz, en kötü ihtimalle kırk bir saat sonra öğreniliyor; ortalama yirmi dokuz buçuk saat. Sayının yirmi dörtten büyük olması ilk bakışta şaşırtıcıdır ve iki gecikmenin toplanmasından gelir: karar otuzuncu saatte verildiği için o günün yayınını kaçırır, kırk sekizinci saatteki yayına girer, sonra her istemci kendi tazeleme sırasında indirir.
Çevrimiçi sorguda yayın gecikmesi ortadan kalkıyor ve pencere en fazla üç saate iniyor. Sunucunun yanıtı kendisi taşıdığında en fazla bir saat. Penceredeki bağlantı sayısı bu üç yöntemi kıyaslanabilir hâle getiriyor: 271.877, 13.925, 4.621. İlk iki yöntem arasında yirmi katına yakın fark var ve bu farkın tamamı zamansaldır — sınıf tablosu bunu doğruluyor, üç istemci sınıfının üçünde de oran on sekiz ile yirmi arasında. Pencere, istemcinin ne yaptığına değil, ne zaman sorduğuna bağlıdır.
Ortalama sütunu yanıltıcı olabilir. İptal edilmiş bir kalemi sunacak tarafın hangi istemciye gideceğini seçebildiği bir durumda geçerli olan sayı ortalama değil, en uzun penceredir: kırk bir saat. Ortalama, kaç bağlantının etkilendiğini söyler; en uzun pencere ise tek bir bağlantının ne kadar süre boyunca mümkün olduğunu söyler. İki sayı iki ayrı soruya bakar ve bir yöntemi seçerken ikisi de yazılır.
Pencereyi Daraltmanın Bedeli
İkinci tablo, liste yönteminin penceresinin bir kader olmadığını gösteriyor. Yayın aralığı yirmi dört saatten iki saate indirildiğinde ortalama pencere 29,5 saatten 0,5 saate düşüyor ve kabul edilen bağlantı 271.877’den 4.621’e — yani sunucunun taşıdığı yanıtla tam olarak aynı değere. Liste yöntemi çevrimiçi sorgudan yapısal olarak daha kötü değildir; yalnız varsayılan aralığıyla öyledir.
Bedeli ise son sütunda. İki saatlik aralık günlük indirmeyi 152 MB’tan 1.828 MB’a çıkarıyor, on iki katına. Bunun nedeni listenin tamamının her tazelemede yeniden indirilmesidir: dört bin üç yüz seksen sekiz istemcinin her biri, on iki kez, bin iki yüz kırk kalemlik listenin tamamını alır — oysa iptal edilen kalem bir tanedir. İptal listesi, aradığı tek kaydı bulmak için her seferinde bütün defteri taşır.
Listenin boyutu da sabit değil. Bin iki yüz kırk kalem, geçmişte iptal edilmiş her kalemin geçerlilik penceresi dolana kadar listede kalmasından gelir; iptal sayısı arttıkça liste büyür ve her tazelemede taşınan bayt onunla birlikte artar. Sıklığı artırmanın maliyeti bu yüzden zamanla kendiliğinden yükselir — aynı aralık, bir yıl sonra daha pahalıdır.
Dış sorgu sütunu ise ters yönde bir tablo çiziyor. Günlük listede istemci başına bir indirme var, toplam 4.388. Çevrimiçi sorguda istemci başına altı sorgu, toplam 26.328; her biri ayrı bir uca gidiyor ve her biri o ucun ayakta olmasını gerektiriyor. Sunucunun taşıdığı yanıtta ise günlük dış sorgu on iki, çünkü soran taraf istemci değil sunucudur ve bir kez sorup yanıtı bütün istemcilere dağıtır. En dar pencereyi veren yöntem, en az dış sorgu üreten yöntemdir; iki ölçü burada aynı yöne bakar.
Sorgu Yanıtsız Kaldığında
Son tablo dersin asıl ayrımını kuruyor. Çevrimiçi sorgunun eklediği şey yalnız hız değil, bir dış bağımlılıktır; ve o bağımlılık düştüğünde doğrulayanın elinde iki seçenek kalır.
Yumuşak başarısızlık bağlantıyı kabul eder. Kırk dakikalık kesintide altı bin yüz altmış bir bağlantı, durumu bilinmeden kurulur ve bu iki yol açar: iptal edilmiş bir kalem kabul edilir, ve sorgulayıcıya erişimi kesebilen taraf iptali görünmez kılar. İkincisi birincisini içerir — öğrenmenin tek kanalı düşürülebiliyorsa, iptal kararının kendisi düşürülebilir demektir.
Sert başarısızlık hiçbir yol açmaz ve altı bin yüz altmış bir meşru bağlantıyı düşürür. Kırk dakika boyunca ölçüm ağının veri alımı durur. Bu, ölçülebilir bir bedeldir ve yumuşak başarısızlığın açtığı iki yolun karşılığıdır; ikisinin arasında doğru bir seçim yoktur, yalnız yazılı bir seçim vardır.
İlk ve dördüncü satırlar bu ikilemin nasıl kurulmadığını gösteriyor. Liste yönteminde istemcinin elinde geçerli bir önbellek varken dış bağımlılık yoktur; sorgulayıcının ayakta olup olmaması bağlantıyı etkilemez. Sunucunun taşıdığı yanıtta da yoktur, çünkü soran taraf istemci değildir. İkilem ortadan kalkmaz — sunucu yanıtı tazeleyemediğinde aynı iki seçenek sunucu tarafında yeniden kurulur — ama dört bin üç yüz seksen sekiz istemciden bir sunucuya taşınır. Yumuşak ya da sert başarısızlık kararını dört bin kez değil bir kez vermek, kararın kendisini değiştirmez; kararın verildiği yeri değiştirir ve o yer, izlenebilen tek yerdir.
Bir kalem türü ise bu üç yöntemin hiçbiriyle iptal edilemez. İptal listesini imzalayan, iptal edilecek kalemin vereni olan otoritedir; kök için bu, kökün kendi iptalini kendi imzasıyla duyurması demektir. Kırılmış bir kökün imzası kanıt taşımadığına göre, o duyuru da kanıt taşımaz. Bir önceki dersin 4.400 makinelik dokunuş sayısı tam olarak bu yüzden ödenir: kök iptal edilemediği için çıkarılır, ve çıkarma işi bir yayınla değil, makine makine yapılır.
Bütün bu ölçümün altında değişmeyen bir sınır duruyor. İptal, doğrulanan alanlarda iz bırakmayan tek karardır: iptal edilmiş bir kalem, öğrenme gerçekleşene kadar on dört kalemin on dördünü de geçer. Pencere daraltılabilir, sıfırlanamaz. Sıfırlamanın tek yolu, kalemin ömrünü öğrenme penceresinden kısa tutmaktır — o zaman iptal duyurusu tamamlanmadan kalem kendiliğinden düşer. Bu, iptali bir duyuru sorunu olmaktan çıkarıp bir yenileme sorununa çevirir; o ölçüm bu konunun beşinci dersinde yapılır.
Özet
- İptal kararı sertifikanın alanlarına dokunmaz; iptal edilmiş bir kalem, öğrenme gerçekleşene kadar doğrulamanın bütün denetimlerini geçer. Ölçülen şey mekanizma değil, öğrenme gecikmesidir.
- Günlük yayınlanan listede pencere 18–41 saat (ortalama 29,5) ve penceredeki bağlantı 271.877; çevrimiçi sorguda 0–3 saat ve 13.925; sunucunun taşıdığı yanıtta 0–1 saat ve 4.621. Oran üç istemci sınıfında da 18–20 kat arasında, çünkü fark tümüyle zamansaldır.
- Yayın aralığını 2 saate indirmek listeyi çevrimiçi sorgunun da altına, 4.621 bağlantıya çekiyor; bedeli günlük indirmenin 152 MB’tan 1.828 MB’a çıkmasıdır, çünkü her tazelemede 1.240 kalemlik listenin tamamı yeniden iner.
- Dış sorgu sayısı ters sıralanıyor: liste 4.388, çevrimiçi sorgu 26.328, sunucunun taşıdığı yanıt 12. En dar pencereyi veren yöntem en az dış bağımlılık üretendir.
- Sorgulayıcının 40 dakikalık kesintisinde yumuşak başarısızlık 2 yol açıp 0 meşru işi durduruyor, sert başarısızlık 0 yol açıp 6.161 meşru bağlantıyı düşürüyor. Sunucunun yanıtı taşıması bu kararı ortadan kaldırmaz, 4.388 istemciden 1 sunucuya taşır.
Sonraki Adım
Bu üç dersin ölçtüğü her şey — alan denetimleri, zincirin kalemleri, iptal durumu — tek bir yerde, bağlantının kurulduğu ilk saniyelerde toplanır. O konuşma el sıkışmadır ve içinde her adımın kanıtladığı ayrı bir iddia vardır: karşı tarafın sunduğu kalemin geçerli olduğu, o kalemin özel anahtarını gerçekten elinde tuttuğu, konuşulan adın kaleme yazılı olduğu. Sonraki ders el sıkışmayı adım adım söker ve tek soruyu sorar: hangi adım hangi iddiayı kanıtlıyor, bir adım atlandığında hangi iddia kanıtsız kalıyor ve istemcinin de kalem sunması kaç kalem ekliyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.