Ders 12 / 15
Konteyner Çalışma Zamanı Tespiti
Bir haftalık süreç başlatma kaydında dört taban çizgisi aynı kümede koşturulur: görüntü envanteri 21 anormal olayın 5'ini yakalar ve 16'sını kaçırır, yedi günlük öğrenme 12'sini yakalar ama 9 meşru olayı yanlış pozitife çevirir, izin listesi çift olarak yazılınca yanlış pozitif 4'e iner, ikili olarak yazılınca yakalanan 6'ya düşer. Tespit gecikmesi akış kipinde 17, toplu kipte 47 saniyedir ve yakalanan 12 olayın yalnız 8'i ile 6'sı süreç hâlâ koşarken gelir; hattın taşıdığı 68.746 olayın yüzde 90,9'u hiçbir tabanda sapmaz ve görüntüyü 342 ikiliden 41 çifte daraltmak aynı üç sayıyı öğrenme penceresi kurmadan verir.
İçindekiler
Önceki ders servis sınırında durdu: çağıran başına izin listesi otuz beş çift kapattı ve sır deposuna giden yol kapanmadan uzadı. Sınırın içinde ne olduğu ise hiç sorulmadı. Bir servisin kendi kapsülü içinde açılan bir kabuk hiçbir çağrı çiftini ihlal etmez: ağ politikası da karşılıklı doğrulama da onu görmez, çünkü ortada bir çağrı yoktur.
Bu ders o tarafı ölçer ve ölçü birimi süreç başlatmadır: bir haftalık kayıtta kaç süreç başladı, kaçı taban çizgisinden sapıyor, sapanların kaçı gerçek bir anormallik ve kaçı meşru bir değişiklik. Konteyner çalıştırma seçenekleri — düşürülen yetenek, salt okunur kök, kullanıcı kimliği — Konteynerler kursunda ölçüldü ve burada girdi olarak alınıyor. Soru başkadır: koşan konteynerin davranışına bakan bir düzenek kurulduğunda üç sayı ne oluyor.
- AD7. Ortam öncekiyle aynıdır: dokuz servis, otuz bir kopya, bir küme. Gerçek bir konteyner
koşturulmuyor; ölçülen şey
nodeile kurulan bir modeldir. - AD8. Kayıt yalnız süreç başlatma olaylarından oluşur; dosya erişimi ve ağ bağlantısı modellenmiyor. Süreç sınıfı ve haftalık sayısı sabittir, aynı sınıftaki her olay aynı ikiliyi ve aynı ömrü taşır; gerçekte ömür bir dağılımdır.
- AD9. Bir olayın gerçek sınıfı modelde bilinir. Üretimde bu sınıf ancak inceleme sonrası bilinir; modelde bilindiği varsayılıyor ki yanlış pozitif sayılabilsin.
- AD10. Anormal sınıflar model olarak yazıldı: hangi ikilinin hangi serviste beklenmediği ve sürecin kaç saniye koştuğu. Hiçbir istismar adımı ya da kaçırma yöntemi yazılmaz.
- AD11. Öğrenme penceresi yedi gündür ve o pencereye anormal davranış karışmadığı varsayılır. Tespit gecikmesi hattın aşama sürelerinin toplamıdır; duvar saati ölçülmüyor.
Kayıt ve Dört Taban Çizgisi
// surec.mjs — bir haftalik surec baslatma kaydi ve dort taban cizgisi. MODELDIR, gercek kume degil. export const KOPYA = { 'portal-onu': 6, 'abone-servisi': 4, 'faturalama': 3, 'is-emri': 3, 'bildirim': 2, 'rapor': 2, 'sayac-toplama': 6, 'dogrulayici': 3, 'saha-senkron': 2 }; // Servis goruntusunde bulunan ikili sayisi (temel goruntu + uygulama katmani). export const GORUNTU_IKILI = { 'portal-onu': 34, 'abone-servisi': 41, 'faturalama': 41, 'is-emri': 38, 'bildirim': 29, 'rapor': 38, 'sayac-toplama': 44, 'dogrulayici': 29, 'saha-senkron': 48 }; export const SERVIS = Object.keys(KOPYA); export const kapsam = (s) => (s[1] === '*' ? SERVIS : [s[1]]); // [ad, servis ('*' = dokuzunun hepsi), ikili, haftalik olay, gercek sinif, goruntude mi, // ogrenme penceresinde goruldu mu, surec omru (sn), daha erken kapatma asamasi] export const SINIF = [ ['uygulama girdi noktasi', '*', 'app', 620, 'mesru', 1, 1, 0, '-'], ['saglik yoklamasi', '*', 'saglik', 62496, 'mesru', 1, 1, 0.4, '-'], ['gunluk donusturucu', '*', 'gunluk', 5208, 'mesru', 1, 1, 1.2, '-'], ['sertifika yenileme istemcisi', '*', 'sertifika', 217, 'mesru', 1, 1, 2, '-'], ['gecelik yedek isi', 'sayac-toplama', 'yedek', 7, 'mesru', 1, 1, 340, '-'], ['zamanlanmis rapor uretimi', 'rapor', 'rapor-uret', 168, 'mesru', 1, 1, 26, '-'], ['aylik uzlastirma isi', 'faturalama', 'uzlastirma', 1, 'mesru', 1, 0, 880, '-'], ['ceyreklik arsiv isi', 'rapor', 'arsiv', 1, 'mesru', 1, 0, 410, '-'], ['operator tanilama kabugu', 'is-emri', 'kabuk', 4, 'mesru', 1, 0, 210, '-'], ['yeni surumun gecis adimi', 'abone-servisi', 'gecis', 3, 'mesru', 1, 0, 64, '-'], ['kapsul icinde kabuk acilisi', 'dogrulayici', 'kabuk', 6, 'anormal', 1, 0, 95, 'yapi'], ['goruntude olmayan ag araci', 'saha-senkron', 'ag-araci', 3, 'anormal', 0, 0, 12, 'yapi'], ['disaridan getirilen ikili', 'portal-onu', 'gecici-ikili', 2, 'anormal', 0, 0, 40, 'yok'], ['kisa omurlu zamanlayici kaydi', 'is-emri', 'zamanlayici', 1, 'anormal', 1, 0, 0.5, 'yok'], ['yorumlayici icinde calistirma', 'abone-servisi', 'app', 9, 'anormal', 1, 1, 6, 'kod'], ]; // Elle yazilan izin listesi iki bicimde: (servis, ikili) cifti ya da yalniz ikili adi. export const CIFT_LISTE = new Set(['faturalama|uzlastirma', 'is-emri|kabuk']); export const IKILI_LISTE = new Set(['uzlastirma', 'kabuk']); export const TABAN = { 'goruntu envanteri': (s) => !s[5], '7 gunluk ogrenme': (s) => !s[6], 'ogrenme + cift listesi': (s) => !s[6] && !CIFT_LISTE.has(`${s[1]}|${s[2]}`), 'ogrenme + ikili listesi': (s) => !s[6] && !IKILI_LISTE.has(s[2]), }; export function olc(sapar) { let yakalanan = 0, kacan = 0, yanlis = 0, sapan = 0; const uyari = new Set(), gercek = new Set(); for (const s of SINIF) { const d = sapar(s); if (d) { sapan += s[3]; uyari.add(`${s[1]}|${s[2]}`); if (s[4] === 'anormal') gercek.add(`${s[1]}|${s[2]}`); } if (s[4] === 'anormal') d ? (yakalanan += s[3]) : (kacan += s[3]); else if (d) yanlis += s[3]; } return { sapan, yakalanan, kacan, yanlis, uyari: uyari.size, gercek: gercek.size }; } export const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0])).join(''); export const toplam = (f) => SINIF.filter(f).reduce((a, s) => a + s[3], 0);
Taban çizgisi bu modelde tek bir şeydir: hangi ikilinin hangi serviste meşru sayıldığı. Dört tanımın farkı yalnız o listenin nereden geldiğidir — görüntüde bulunanlar, gözlemlenenler ve gözlemlenenlerin üstüne iki farklı genişlikte yazılan izin listesi.
Aynı Hafta, Dört Taban
// kosum1.mjs — ayni haftalik kayit, degisen tek sey taban cizgisinin nereden geldigi import { SINIF, SERVIS, KOPYA, GORUNTU_IKILI, TABAN, olc, gen, toplam, kapsam } from './surec.mjs'; const top = (o) => Object.values(o).reduce((a, b) => a + b, 0); const ogr = new Set(SINIF.filter((s) => s[6]).flatMap((s) => kapsam(s).map((v) => `${v}|${s[2]}`))); console.log(`${SERVIS.length} servis, ${top(KOPYA)} kopya; bir haftada ${toplam(() => true)} surec baslatma ` + `(${toplam((s) => s[4] === 'mesru')} mesru / ${toplam((s) => s[4] === 'anormal')} anormal)`); console.log(`taban genisligi: goruntu envanteri ${top(GORUNTU_IKILI)} cift, ogrenme penceresi ${ogr.size} cift\n`); const yt = gen([26, 11, 7, 16, 7, 14]); console.log(yt(['taban cizgisi', 'yakalanan', 'kacan', 'yanlis pozitif', 'uyari', 'gercek uyari'])); for (const [ad, sapar] of Object.entries(TABAN)) { const r = olc(sapar); console.log(yt([ad, r.yakalanan, r.kacan, r.yanlis, r.uyari, r.gercek])); }
9 servis, 31 kopya; bir haftada 68746 surec baslatma (68725 mesru / 21 anormal) taban genisligi: goruntu envanteri 342 cift, ogrenme penceresi 38 cift taban cizgisi yakalanan kacan yanlis pozitif uyari gercek uyari goruntu envanteri 5 16 0 2 2 7 gunluk ogrenme 12 9 9 8 4 ogrenme + cift listesi 12 9 4 6 4 ogrenme + ikili listesi 6 15 4 5 3
Birinci satır tam olarak okunması gereken yerdir. Görüntü envanteri tabanı hiç yanlış pozitif üretmiyor — sıfır — ve bu, gündelik gösterge tablosunda kusursuz bir katman gibi görünür. Aynı satırda kaçan olay on altıdır, yani yirmi bir anormal olayın dörtte üçü. Nedeni dar bir tanım değil, geniş bir tanım olmasıdır: taban çizgisi üç yüz kırk iki çifttir ve servis görüntüsünde duran her ikili meşru sayıldığı için görüntüde zaten bulunan bir kabuğun açılması tabanı hiç ihlal etmez. Sıfır yanlış pozitif burada bir başarı ölçüsü değil, tabanın genişliğinin işaretidir.
İkinci satır tabanı otuz sekiz çifte indiriyor ve yakalanan olay beşten on ikiye çıkıyor. Bedel aynı satırda yazılı: dokuz meşru olay yanlış pozitife dönüşüyor ve bu dokuz olay rastgele değil, dört ayrı türden geliyor. Aylık uzlaştırma ile çeyreklik arşiv işi öğrenme penceresine hiç girmedi; operatör tanılama kabuğu bir mühendisin gerçekten yaptığı iştir; geçiş adımı bir dağıtımın normal parçasıdır. Uyarı sütunu operatörün gördüğü sayıyı verir: sapan olaylar sekiz ayrı gruba düşer ve dördü gerçektir, yani uyarıların yarısı incelemeden sonra kapatılacak kayıtlardır.
İzin Listesinin Genişliği
Üçüncü ve dördüncü satır aynı kusuru iki farklı genişlikte kapatıyor. Çift listesi servis|ikili
yazar, ikili listesi yalnız ikili adını; ikisi de aynı iki yanlış pozitifi kapatır ve yanlış pozitif
dokuzdan dörde iner.
Fark yakalanan sütunundadır. Çift listesinde yakalanan on iki kalır; ikili listesinde altıya düşer.
Kaybedilen altı olay, doğrulayıcı servisinde açılan kabuktur — listeye kabuk yazıldığı anda o
ikili dokuz servisin dokuzunda meşrulaşır. İki satır arasındaki fark bir sütundur ve bedeli
yakalanan olayın yarısıdır. Muafiyetin kapsadığı kümeyi saymadan yazmak, bu kursun ilk dersindeki uç
bazlı muafiyetle aynı hatadır: liste bir ayar değil, kapsamı ölçülmesi gereken bir envanterdir.
Gecikme ve Hattın Taşıdığı Olay
Tespit gecikmesi dört aşamanın toplamıdır: olay tamponu, gönderim penceresi, kural değerlendirme ve bildirim. Gönderim penceresi akış kipinde sıfır, toplu kipte otuz saniyedir.
// kosum2.mjs — tespit gecikmesi, hattin tasidigi olay ve tabani goruntuden daraltmak import { SINIF, SERVIS, KOPYA, GORUNTU_IKILI, TABAN, olc, gen, toplam, kapsam } from './surec.mjs'; // Hat asamalari: olay tamponu 2 sn + gonderim penceresi 0/30 sn + degerlendirme 3 sn + bildirim 12 sn const AKIS = 2 + 0 + 3 + 12, TOPLU = 2 + 30 + 3 + 12; const sapar = TABAN['ogrenme + cift listesi']; const yak = SINIF.filter((s) => s[4] === 'anormal' && sapar(s)); const yg = gen([32, 7, 8, 14, 15]); console.log(yg(['yakalanan anormal sinif', 'olay', 'omur sn', `akis ${AKIS} sn`, `toplu ${TOPLU} sn`])); for (const s of yak) console.log(yg([s[0], s[3], s[7], s[7] > AKIS ? 'evet' : 'hayir', s[7] > TOPLU ? 'evet' : 'hayir'])); const say = (b) => yak.filter((s) => s[7] > b).reduce((a, s) => a + s[3], 0); const yt = yak.reduce((a, s) => a + s[3], 0); console.log(`surec hala kosarken gelen tespit: akis ${say(AKIS)}/${yt} olay, toplu ${say(TOPLU)}/${yt} olay`); const olay = toplam(() => true), kopya = Object.values(KOPYA).reduce((a, b) => a + b, 0); const saglik = toplam((s) => s[2] === 'saglik'), r = olc(sapar); const oran = olay / kopya / (7 * 24 * 3600 / 30), surum = 2 * SERVIS.length; console.log(`\nhattin tasidigi olay ${olay}/hafta; saglik yoklamasinin payi ${saglik} olay ` + `(%${(100 * saglik / olay).toFixed(1)}) ve hicbir tabanda sapmiyor`); console.log(`bu tabanda sapan olay ${r.sapan} (%${(100 * r.sapan / olay).toFixed(3)}); 30 sn pencerede kopya basina ` + `beklenen olay ${oran.toFixed(2)}, sikistirma katsayisi ${Math.max(1, oran).toFixed(2)} -> gecikme ${AKIS} yerine ${TOPLU} sn`); console.log(`haftada ${surum} surum, servis basina dagitim araligi ${(7 * SERVIS.length / surum).toFixed(1)} gun: taban ` + `goruntu ozetine baglanirsa 7 gunluk ogrenme penceresi yarida kesilir, servise baglanirsa her ` + `yeni ikili haftada ${toplam((s) => s[2] === 'gecis')} yanlis pozitif uretir`); const MINIMAL = new Set(SINIF.filter((s) => s[4] === 'mesru').flatMap((s) => kapsam(s).map((v) => `${v}|${s[2]}`))); MINIMAL.delete('is-emri|kabuk'); const m = olc((s) => kapsam(s).some((v) => !MINIMAL.has(`${v}|${s[2]}`))); const gt = Object.values(GORUNTU_IKILI).reduce((a, b) => a + b, 0); console.log(`\ngoruntu ${gt} ikiliden ${MINIMAL.size} cifte daraltilirsa (tanilama kabugu cikarilir):`); const yz = gen([26, 11, 7, 16, 7]); console.log(yz(['taban cizgisi', 'yakalanan', 'kacan', 'yanlis pozitif', 'uyari'])); for (const [ad, o] of [['ogrenme + cift listesi', r], ['minimal goruntu envanteri', m]]) console.log(yz([ad, o.yakalanan, o.kacan, o.yanlis, o.uyari])); const asama = {}; for (const s of yak) asama[s[8]] = (asama[s[8]] || 0) + s[3]; console.log(`yakalanan ${yt} olayin erken kapatma asamasi: ${Object.entries(asama).map(([a, n]) => `${a} ${n}`).join(', ')}; ` + `kacan ${r.kacan} olay tek sinif: ${SINIF.find((s) => s[4] === 'anormal' && !sapar(s))[0]}, erken asama kod`);
yakalanan anormal sinif olay omur sn akis 17 sn toplu 47 sn kapsul icinde kabuk acilisi 6 95 evet evet goruntude olmayan ag araci 3 12 hayir hayir disaridan getirilen ikili 2 40 evet hayir kisa omurlu zamanlayici kaydi 1 0.5 hayir hayir surec hala kosarken gelen tespit: akis 8/12 olay, toplu 6/12 olay hattin tasidigi olay 68746/hafta; saglik yoklamasinin payi 62496 olay (%90.9) ve hicbir tabanda sapmiyor bu tabanda sapan olay 16 (%0.023); 30 sn pencerede kopya basina beklenen olay 0.11, sikistirma katsayisi 1.00 -> gecikme 17 yerine 47 sn haftada 18 surum, servis basina dagitim araligi 3.5 gun: taban goruntu ozetine baglanirsa 7 gunluk ogrenme penceresi yarida kesilir, servise baglanirsa her yeni ikili haftada 3 yanlis pozitif uretir goruntu 342 ikiliden 41 cifte daraltilirsa (tanilama kabugu cikarilir): taban cizgisi yakalanan kacan yanlis pozitif uyari ogrenme + cift listesi 12 9 4 6 minimal goruntu envanteri 12 9 4 5 yakalanan 12 olayin erken kapatma asamasi: yapi 9, yok 3; kacan 9 olay tek sinif: yorumlayici icinde calistirma, erken asama kod
Üst tablo tespitin ne işe yaradığını ayırıyor. Akış kipinde yakalanan on iki olayın sekizinde uyarı süreç hâlâ koşarken gelir; toplu kipte bu sayı altıya iner. Kalanlarda uyarı gelmediği için değil, geç geldiği için bir müdahale noktası yoktur: ağ aracı on iki saniye koşup çıkmıştır, zamanlayıcı kaydı yarım saniye. Bu iki sınıf için tespit bir önleme değil, bir kayıttır.
Orta blok hattın fiyatını yazıyor. Haftada altmış sekiz bin yedi yüz kırk altı olay toplanıyor ve bunun yüzde doksan virgül dokuzu sağlık yoklamasıdır: her kopyada beş dakikada bir koşan, hiçbir tabanda sapmayan bir süreç. Sapan olay on altıdır, yani toplanan hacmin yüzde sıfır virgül sıfır iki üçü. Otuz saniyelik toplu gönderim bu hacmi küçültmüyor: kopya başına pencereye düşen beklenen olay sayısı birden küçük olduğu için sıkıştırma katsayısı birde kalır ve otuz saniyelik gecikme karşılıksız kalır. Üçüncü satır tabanın ne kadar dayandığını söylüyor: haftada on sekiz sürüm çıkarken taban görüntü özetine bağlanırsa hiçbir yedi günlük pencere kapanmaz, servise bağlanırsa pencere kapanır ama her yeni ikili bir yanlış pozitif üretir. Taban çizgisi bir kez kurulup bırakılan bir şey değil, dağıtım hızına bağlı bir bakım kalemidir.
Daha Erken Nerede Kapanırdı
Son tablonun iki satırı üç sayının üçünde de aynı: on iki yakalanan, dokuz kaçan, dört yanlış pozitif. Üstteki satır bir öğrenme penceresi, bir izin listesi ve bir bakım takvimi gerektiriyor; alttaki satır yalnızca görüntünün daraltılmasını — üç yüz kırk iki ikili yerine uygulamanın gerçekten koşturduğu kırk bir çift. Aynı üç sayı, bir çalışma zamanı düzeneği olmadan, yapı aşamasında ve kalıcı olarak elde ediliyor, üstelik bir uyarı grubu daha az.
Erken aşama dağılımı aynı sonucu ikinci kez söylüyor. Yakalanan on iki olayın dokuzu yapı aşamasında kapatılabilir: doğrulayıcıda kabuk bulunmasaydı altı olay, saha senkronunda ağ aracı bulunmasaydı üç olay hiç doğmayacaktı. Kalan üç olay için erken aşama yoktur — dışarıdan getirilen ikili ve zamanlayıcı kaydı ancak koşan bir düzeneğin görebileceği kalemlerdir. Katmanın ölçüsü on iki değil, üçtür.
Kaçan dokuz olay ters yönü söylüyor. Yorumlayıcı içinde çalıştırma yeni bir süreç başlatmaz; uygulamanın kendi ikilisi zaten koşmaktadır. Süreç davranışına bakan bir düzenek, süreç doğurmayan bir davranışı tanım gereği kaçırır; bu kalem kod aşamasına aittir.
Özet
- Bir haftalık kayıtta 68.746 süreç başlatma var; 21’i anormal. 342 çift genişliğindeki görüntü envanteri tabanı 5 olay yakalar, 16’sını kaçırır ve sıfır yanlış pozitif üretir — bu sıfır dar değil, geniş bir tanımın işaretidir.
- Yedi günlük öğrenme tabanı 38 çifte iner, yakalananı 12’ye çıkarır ve 9 meşru olayı yanlış pozitife çevirir: nadir işler, operatör tanılaması ve yeni sürümün geçiş adımı.
- İzin listesi
servis|ikiliçifti olarak yazılınca yanlış pozitif 4’e iner ve yakalanan 12 kalır; yalnız ikili adıyla yazılınca yanlış pozitif yine 4’tür ama yakalanan 6’ya düşer. - Tespit gecikmesi akış kipinde 17, toplu kipte 47 saniyedir; yakalanan 12 olayın 8’i ile 6’sı süreç hâlâ koşarken gelir. Toplu gönderim bu olay yoğunluğunda hiçbir sıkıştırma sağlamaz.
- Hattın taşıdığı olayın yüzde 90,9’u sağlık yoklamasıdır; sapan pay yüzde 0,023’tür. Haftada 18 sürüm çıkarken görüntü özetine bağlı bir taban hiç tamamlanmaz.
- Görüntüyü 41 çifte daraltmak aynı üç sayıyı yapı aşamasında verir. Yakalanan 12 olayın 9’u yapı aşamasında kapatılabilir; yalnız çalışma zamanında kapatılabilen pay 3 olaydır.
Sonraki Adım
Bu dersin bütün ölçümü konteyner koşmaya başladıktan sonra yapıldı: süreç başladı, olay toplandı, kural değerlendirildi ve on yedi ya da kırk yedi saniye sonra bir uyarı üretildi. Doğrulayıcıda kabuğun bulunması ve otuz bir kopyanın hangi ayrıcalıklarla koştuğu ise koşum başlamadan önce belliydi; bunların hepsi kümeye bir nesne gönderildiği anda okunabilen alanlardır. Sonraki ders o anı ölçer: kabul denetleyicisi kuralları yirmi iki küme nesnesi üzerinde koşturulur, zorlama kipine geçildiğinde kaç dağıtımın reddedileceği ve bunların kaçının meşru olduğu sayılır. Reddin kime ve ne zaman değdiği de aynı tabloda yazılır: kaç ekip etkileniyor ve aynı kural hattın hangi aşamasında kimseyi bekletmeden koşabilirdi.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.