Ders 09 / 16
Uç Nokta Tespit ve Yanıt
Yedi telemetri kaynağı sekiz tutunma noktası türü üzerinde ölçülür: hangi nokta hangi kaynakta görünüyor, hiçbir kaynakta görünmeyen iki nokta türü, hiçbir nokta görmeyen iki kaynak, nokta kazancı başına hacim sırasıyla kaynak eklendikçe görünen noktanın altıda durması, günlük hacmin saklama penceresini 6657 günden 19,5 güne indirmesi ve pencereye sığmayan tespitler.
İçindekiler
Önceki dersin uyarı kipi hiçbir meşru işi kesmiyordu ve bu yüzden ucuz göründü. Bir kalemin görünür olması için ondan geriye bir kayıt kalmış olması gerekir, ve o kayıt kendiliğinden var olmaz: uçta toplanmalı, bir yere taşınmalı ve bakılana kadar saklanmalıdır. Bu dersin konusu o kayıtları üreten katmandır.
Ölçülen üç sayı var. Birincisi kapsamdır: sekiz tutunma noktası türünün kaçı en az bir telemetri kaynağında görünüyor, kaçı hiçbirinde. İkincisi hacimdir: her kaynak günde kaç bayt üretiyor. Üçüncüsü penceredir: sabit bir saklama bütçesi altında toplanan veri kaç gün geriye bakmaya yeter. Üçü bağımsız değildir — kapsamı büyütmenin tek yolu kaynak eklemektir ve her kaynak pencereyi kısaltır. Bu katmanın kursun iki sütunundan hangisine yazıldığı da bu derste netleşir: kapattığı nokta sayısı sıfırdır.
- UK13. Yedi kaynak, olay oranları, olay boyutları ve saklama bütçesi kurgusal bölgesel ölçüm
ağına aittir; 432 uç dört sınıftan oluşur. Ölçülen şey
nodeile kurulan modeldir. - UK14. Olay oranları uç başına sabit ortalamadır. Gerçekte sunucular saha dizüstülerinden çok daha fazla olay üretir ve oran gün içinde dalgalanır; ortalama pencere hesabının yönünü değiştirmez.
- UK15. Bir nokta türü ya bir kaynakta görünür ya görünmez. Kısmi görünürlük — noktanın yazılmasının değil yalnız çalışmasının görülmesi — modellenmedi; bu, kapsamı olduğundan iyi gösterir.
- UK16. Sıkıştırma, örnekleme ve soğuk katmana taşıma modellenmedi. Üçü de pencereyi uzatır ve üçünün de kendi bedeli vardır; eğrinin biçimi değişmez.
- UK17. Tespit gecikmeleri kurgu bir listedir: geçmiş olayların fark edilmesine kadar geçen gün sayısı. Gerçek dağılım uzun kuyrukludur.
- UK18. Uçta çalışan telemetri ajanının kendisi bir yazılımdır ve envantere kalem ekler; bu kalem sayılıyor, ajanın kendi güvenliği ölçülmüyor.
Kaynaklar ve Gördükleri
Model iki tablodan oluşuyor. Birincisi her telemetri kaynağının uç başına günlük olay sayısını ve olay başına bayt boyunu tutuyor; ikincisi hangi tutunma noktası türünün hangi kaynakta iz bıraktığını. İkinci tablo teknik bir gerçeği kodluyor: bir nokta türü ancak onu yazan ya da çalıştıran eylem kaydedildiğinde görünür olur.
// telemetri.mjs — uc nokta telemetri kaynaklari, gorunurluk matrisi ve saklama butcesi; model export const UC = 432; // kurgusal filo: saha dizustu, sube ucu, toplayici, sunucu export const BUTCE = 120 * 1024 ** 3; // saklama butcesi, bayt (kurgu) // kaynak -> [uc basina gunluk olay, olay basina bayt] export const KAYNAK = { 'yapilandirma degisikligi kaydi': [140, 320], 'betik blok kaydi': [260, 4096], 'modul yukleme kaydi': [9800, 384], 'dosya degisikligi kaydi': [31000, 256], 'surec olusturma kaydi': [2400, 512], 'ag baglanti kaydi': [5600, 224], 'oturum acma kaydi': [18, 448], }; // tutunma noktasi turu -> onu goren kaynaklar export const GORUNURLUK = { 'acilis-girisi': ['yapilandirma degisikligi kaydi', 'surec olusturma kaydi'], 'servis-tanimi': ['yapilandirma degisikligi kaydi', 'surec olusturma kaydi'], 'zamanlanmis-gorev': ['yapilandirma degisikligi kaydi', 'surec olusturma kaydi'], 'oturum-betigi': ['betik blok kaydi', 'surec olusturma kaydi', 'dosya degisikligi kaydi'], 'yukleme-yolu-kancasi': ['modul yukleme kaydi', 'dosya degisikligi kaydi'], 'mesru-ikiliye-ilisme': ['dosya degisikligi kaydi'], 'olay-aboneligi': [], 'ortam-otomatik-calistirma': [], }; export const NOKTA = Object.keys(GORUNURLUK); export const gunluk = (k) => KAYNAK[k][0] * KAYNAK[k][1] * UC; export const gorunen = (kume) => NOKTA.filter((n) => GORUNURLUK[n].some((k) => kume.includes(k))); export const pencere = (kume) => BUTCE / kume.reduce((a, k) => a + gunluk(k), 0); export const gib = (b) => (b / 1024 ** 3).toFixed(2); // kurgu: gecmis olaylarin tespit edilene kadar gectigi gun export const GECIKME = [3, 7, 12, 18, 21, 26, 34, 45, 60, 90];
// kosum1.mjs — kaynak hacimleri ve gorunurluk matrisi: hangi nokta hangi kaynakta gorunuyor import { KAYNAK, GORUNURLUK, NOKTA, UC, BUTCE, gunluk, gib } from './telemetri.mjs'; const kaynaklar = Object.keys(KAYNAK); console.log(`${UC} uc, ${kaynaklar.length} telemetri kaynagi, ${NOKTA.length} tutunma noktasi turu; ` + `saklama butcesi ${gib(BUTCE)} GiB\n`); console.log(`${'kaynak'.padEnd(31)} ${'olay/uc/gun'.padStart(11)} ${'bayt/olay'.padStart(9)} ` + `${'GiB/gun'.padStart(8)} ${'gordugu nokta'.padStart(13)}`); for (const k of kaynaklar) console.log(`${k.padEnd(31)} ${String(KAYNAK[k][0]).padStart(11)} ${String(KAYNAK[k][1]).padStart(9)} ` + `${gib(gunluk(k)).padStart(8)} ${String(NOKTA.filter((n) => GORUNURLUK[n].includes(k)).length).padStart(13)}`); const toplam = kaynaklar.reduce((a, k) => a + gunluk(k), 0); console.log(`${'toplam'.padEnd(31)} ${''.padStart(11)} ${''.padStart(9)} ${gib(toplam).padStart(8)}`); console.log(`\n${'tutunma noktasi turu'.padEnd(26)} ${'kaynak'.padStart(6)} goren kaynaklar`); for (const n of NOKTA) console.log(`${n.padEnd(26)} ${String(GORUNURLUK[n].length).padStart(6)} ${GORUNURLUK[n].join(', ') || '-'}`); const kor = NOKTA.filter((n) => GORUNURLUK[n].length === 0); console.log(`\nhicbir kaynakta gorunmeyen nokta turu: ${kor.length}/${NOKTA.length} (${kor.join(', ')})`); console.log(`hicbir nokta turu gormeyen kaynak: ` + kaynaklar.filter((k) => !NOKTA.some((n) => GORUNURLUK[n].includes(k))).join(', '));
432 uc, 7 telemetri kaynagi, 8 tutunma noktasi turu; saklama butcesi 120.00 GiB kaynak olay/uc/gun bayt/olay GiB/gun gordugu nokta yapilandirma degisikligi kaydi 140 320 0.02 3 betik blok kaydi 260 4096 0.43 1 modul yukleme kaydi 9800 384 1.51 1 dosya degisikligi kaydi 31000 256 3.19 3 surec olusturma kaydi 2400 512 0.49 4 ag baglanti kaydi 5600 224 0.50 0 oturum acma kaydi 18 448 0.00 0 toplam 6.16 tutunma noktasi turu kaynak goren kaynaklar acilis-girisi 2 yapilandirma degisikligi kaydi, surec olusturma kaydi servis-tanimi 2 yapilandirma degisikligi kaydi, surec olusturma kaydi zamanlanmis-gorev 2 yapilandirma degisikligi kaydi, surec olusturma kaydi oturum-betigi 3 betik blok kaydi, surec olusturma kaydi, dosya degisikligi kaydi yukleme-yolu-kancasi 2 modul yukleme kaydi, dosya degisikligi kaydi mesru-ikiliye-ilisme 1 dosya degisikligi kaydi olay-aboneligi 0 - ortam-otomatik-calistirma 0 - hicbir kaynakta gorunmeyen nokta turu: 2/8 (olay-aboneligi, ortam-otomatik-calistirma) hicbir nokta turu gormeyen kaynak: ag baglanti kaydi, oturum acma kaydi
İki sayı hemen okunuyor ve ikisi de tersini bekleyenleri şaşırtır. Sekiz nokta türünün ikisi hiçbir kaynakta görünmüyor. Kalıcı olay aboneliği ve çıkarılabilir ortamın otomatik çalıştırma girişi telemetrinin dışında kalıyor; birincisi yönetim düzeneğinin kendi kayıt alanına yazıldığı, ikincisi uçta değil takılan ortamda durduğu için. Bu iki nokta türü, önceki derste en ucuz kapatılabilen noktalardı — kapatılmadıklarında yerlerine geçecek bir görünürlük de yoktur.
İkinci sayı ters yönde: iki kaynak hiçbir tutunma noktası görmüyor. Ağ bağlantı kaydı günde yarım GiB üretiyor ve tek bir noktayı görünür kılmıyor. Bu, o kaynağın gereksiz olduğu anlamına gelmez; bir kalem yakalandıktan sonra nereye bağlandığını, hangi uçlarla konuştuğunu yalnız o kaynak söyler. Ama tutunma noktası ölçüsünde karşılığı sıfırdır ve bütçeden payını alır.
Hacim sütunu üçüncü şaşırtıcı sayıyı veriyor. En çok nokta gören iki kaynak — yapılandırma değişikliği kaydı ve süreç oluşturma kaydı — en ucuz iki kaynaktan biridir ve ikisi birlikte günde yarım GiB’nin biraz üstünde durur. En pahalı kaynak olan dosya değişikliği kaydı günde 3,19 GiB üretiyor ve üç nokta türü görüyor; ikisini zaten başka kaynaklar görüyor. Kapsam ile hacim arasında düzgün bir orantı yok.
Kapsam Büyürken Pencere Kısalır
// kosum2.mjs — kaynaklari nokta kazanci / hacim oranina gore ekler; pencere ve kacan tespit import { KAYNAK, NOKTA, GECIKME, gunluk, gorunen, pencere, gib } from './telemetri.mjs'; const kalan = Object.keys(KAYNAK), secili = []; console.log(`${'eklenen kaynak'.padEnd(31)} ${'yeni nokta'.padStart(10)} ${'gorunen'.padStart(7)} ` + `${'GiB/gun'.padStart(7)} ${'pencere gun'.padStart(11)} ${'penceredeki tespit'.padStart(18)}`); while (kalan.length) { let en = null; for (const k of kalan) { const yeni = gorunen([...secili, k]).length - gorunen(secili).length; const oran = yeni / gunluk(k); if (!en || oran > en.oran || (oran === en.oran && gunluk(k) < gunluk(en.k))) en = { k, yeni, oran }; } secili.push(en.k); kalan.splice(kalan.indexOf(en.k), 1); const p = pencere(secili), hacim = secili.reduce((a, k) => a + gunluk(k), 0); console.log(`${en.k.padEnd(31)} ${String(en.yeni).padStart(10)} ${`${gorunen(secili).length}/${NOKTA.length}`.padStart(7)} ` + `${gib(hacim).padStart(7)} ${p.toFixed(1).padStart(11)} ${`${GECIKME.filter((g) => g <= p).length}/${GECIKME.length}`.padStart(18)}`); } const dort = Object.keys(KAYNAK).slice(0, 4); console.log(`\ndort kaynakli kurulum : gorunen ${gorunen(dort).length}/${NOKTA.length}, ` + `pencere ${pencere(dort).toFixed(1)} gun, penceredeki tespit ${GECIKME.filter((g) => g <= pencere(dort)).length}/${GECIKME.length}`); const hepsi = Object.keys(KAYNAK); console.log(`yedi kaynakli kurulum : gorunen ${gorunen(hepsi).length}/${NOKTA.length}, ` + `pencere ${pencere(hepsi).toFixed(1)} gun, penceredeki tespit ${GECIKME.filter((g) => g <= pencere(hepsi)).length}/${GECIKME.length}`); console.log(`\nyedi kaynakla 21 gunluk pencere icin gereken butce: ` + `${gib(21 * hepsi.reduce((a, k) => a + gunluk(k), 0))} GiB (mevcut butcenin ` + `${(21 * hepsi.reduce((a, k) => a + gunluk(k), 0) / (120 * 1024 ** 3)).toFixed(2)} kati)`); console.log(`kapanan tutunma noktasi: 0 — bu katman nokta kapatmaz, gorunur kilar`); console.log(`telemetri ajaninin uca ekledigi nokta: 2 (servis-tanimi, yukleme-yolu-kancasi)`);
eklenen kaynak yeni nokta gorunen GiB/gun pencere gun penceredeki tespit yapilandirma degisikligi kaydi 3 3/8 0.02 6657.6 10/10 betik blok kaydi 1 4/8 0.45 268.8 10/10 modul yukleme kaydi 1 5/8 1.96 61.2 9/10 dosya degisikligi kaydi 1 6/8 5.15 23.3 5/10 oturum acma kaydi 0 6/8 5.16 23.3 5/10 surec olusturma kaydi 0 6/8 5.65 21.2 5/10 ag baglanti kaydi 0 6/8 6.16 19.5 4/10 dort kaynakli kurulum : gorunen 6/8, pencere 23.3 gun, penceredeki tespit 5/10 yedi kaynakli kurulum : gorunen 6/8, pencere 19.5 gun, penceredeki tespit 4/10 yedi kaynakla 21 gunluk pencere icin gereken butce: 129.27 GiB (mevcut butcenin 1.08 kati) kapanan tutunma noktasi: 0 — bu katman nokta kapatmaz, gorunur kilar telemetri ajaninin uca ekledigi nokta: 2 (servis-tanimi, yukleme-yolu-kancasi)
Ekleme sırası nokta kazancının bayt başına oranıyla belirlendi ve eğri dört adımda tükeniyor. Yapılandırma değişikliği kaydı tek başına üç nokta türü görünür kılıyor ve günde 0,02 GiB tutuyor — pencere altı bin altı yüz elli yedi gün, yani bütçe pratikte sınırsız. Dördüncü adımdan sonra hiçbir kaynak yeni nokta getirmiyor: kapsam altıda kalıyor ve kalan üç kaynak yalnız hacim ekliyor. Pencere yirmi üç günden on dokuz buçuğa iniyor.
Bu son üç satır bir israf listesi değildir ve öyle okunursa ölçüm yanlış kullanılmış olur. Süreç oluşturma kaydı en çok nokta türü gören kaynaktır; sırada geç kalmasının nedeni gördüğü dört noktanın hepsinin daha ucuz kaynaklarca zaten görülmesidir. Ama bir kalem fark edildikten sonra neyin neyi başlattığını yalnız o kaynak söyler; beşinci derste ölçülecek olan bağlam tam olarak budur. Ağ bağlantı kaydı ile oturum açma kaydı da aynı sınıftadır. Tutunma noktası ölçüsü bu üç kaynağın değerini göstermez; gösterdiği şey, bu üç kaynağın kapsam gerekçesiyle savunulamayacağıdır.
Alt satırlar dersin asıl gerilimini veriyor. Yedi kaynağın hepsi toplandığında pencere on dokuz buçuk gün; kurgu tespit gecikmelerinin onda dördü bu pencereye sığıyor. Yirmi bir günde fark edilen bir olay için uçtan gelen kayıt artık silinmiştir — tespit çalıştı, kanıt yok. Dört kaynakla aynı kapsam yirmi üç günlük pencereyle elde ediliyor ve onda beş tespit içeride kalıyor. Aynı bütçeyle daha az toplamak, bu modelde daha fazla görmek demektir.
Son üç satır bu katmanın kursun iki sütunundaki yerini yazıyor. Kapattığı tutunma noktası sayısı sıfırdır; sekiz nokta türünün altısını görünür kılar, ikisini hiç görmez. Bunun üstüne uçta kendi ajanı için bir servis tanımı ve bir yükleme yolu kancası ister: envantere iki nokta ekler. Görünürlük katmanının bedeli yalnız depolama değil, ölçtüğü şeyin kendisinden iki kalemdir.
Görünürlüğün Derinliği
Kapsam sütunu bir noktanın görünüp görünmediğini söyler, kaç kaynaktan göründüğünü söylemez. Fark önemlidir: tek bir kaynağa bağlı bir nokta, o kaynak sustuğunda görünmez olur ve bir kaynağı susturmak uçta tek bir yapılandırma kalemidir.
// kosum3.mjs — gorunurluk derinligi: bir nokta turu kac kaynakta gorunuyor, tek kaynaga bagli kac nokta import { KAYNAK, GORUNURLUK, NOKTA, gorunen, pencere } from './telemetri.mjs'; const DORT = Object.keys(KAYNAK).slice(0, 4), HEPSI = Object.keys(KAYNAK); const derinlik = (kume, n) => GORUNURLUK[n].filter((k) => kume.includes(k)).length; console.log(`${'tutunma noktasi turu'.padEnd(26)} ${'dort kaynakta'.padStart(13)} ${'yedi kaynakta'.padStart(13)}`); for (const n of NOKTA) console.log(`${n.padEnd(26)} ${String(derinlik(DORT, n)).padStart(13)} ${String(derinlik(HEPSI, n)).padStart(13)}`); for (const [ad, kume] of [['dort kaynak', DORT], ['yedi kaynak', HEPSI]]) { const g = gorunen(kume); console.log(`\n${ad}: gorunen ${g.length}/${NOKTA.length}, pencere ${pencere(kume).toFixed(1)} gun`); console.log(` tek kaynaga bagli nokta : ${g.filter((n) => derinlik(kume, n) === 1).length}`); console.log(` iki ve uzeri kaynakli : ${g.filter((n) => derinlik(kume, n) >= 2).length}`); const bir = g.filter((n) => derinlik(kume, n) === 1) .map((n) => GORUNURLUK[n].find((k) => kume.includes(k))); const enkritik = [...new Set(bir)].map((k) => [k, bir.filter((x) => x === k).length]) .sort((a, b) => b[1] - a[1])[0]; console.log(` susturuldugunda en cok nokta karartan kaynak: ${enkritik[0]} (${enkritik[1]} nokta)`); }
tutunma noktasi turu dort kaynakta yedi kaynakta acilis-girisi 1 2 servis-tanimi 1 2 zamanlanmis-gorev 1 2 oturum-betigi 2 3 yukleme-yolu-kancasi 2 2 mesru-ikiliye-ilisme 1 1 olay-aboneligi 0 0 ortam-otomatik-calistirma 0 0 dort kaynak: gorunen 6/8, pencere 23.3 gun tek kaynaga bagli nokta : 4 iki ve uzeri kaynakli : 2 susturuldugunda en cok nokta karartan kaynak: yapilandirma degisikligi kaydi (3 nokta) yedi kaynak: gorunen 6/8, pencere 19.5 gun tek kaynaga bagli nokta : 1 iki ve uzeri kaynakli : 5 susturuldugunda en cok nokta karartan kaynak: dosya degisikligi kaydi (1 nokta)
İki kurulum aynı kapsamı veriyor ve derinlikleri farklı. Dört kaynaklı kurulumda görünen altı noktanın dördü tek bir kaynağa bağlı ve üçü aynı kaynağa: yapılandırma değişikliği kaydı susturulduğunda açılış girişi, servis tanımı ve zamanlanmış görev aynı anda karanlıkta kalır. Yedi kaynaklı kurulumda tek kaynağa bağlı nokta bire iniyor. Fazladan toplanan üç kaynak kapsam sütununda hiçbir şey getirmiyordu; derinlik sütununda üç noktayı ikiye, birini üçe çıkarıyor.
Bu, önceki tablonun okunuşunu değiştirir. “Yeni nokta getirmeyen kaynak” ile “hiçbir işe yaramayan kaynak” aynı şey değildir. Üç ölçü birbiriyle çelişiyor: kapsam dördüncü kaynakta doyuyor, derinlik yedincide en yüksek, pencere ise her eklemede kısalıyor. Üçünü aynı anda en iyi yapan bir kurulum modelde yok. Karar, hangi ölçünün ne kadar kaybedileceğinin yazılmasıyla verilir — ve o yazımın kendisi bu tablodur.
Özet
- 8 tutunma noktası türünün 2’si hiçbir telemetri kaynağında görünmüyor (kalıcı olay aboneliği, çıkarılabilir ortam girişi). Bu ikisi önceki derste en ucuz kapatılabilen noktalardı.
- 2 kaynak hiçbir nokta türü görmüyor (ağ bağlantı kaydı, oturum açma kaydı) ve birlikte günde 0,50 GiB tutuyor. Değerleri yanıt bağlamındadır, kapsamda değil.
- Nokta kazancı bayt başına sıralandığında kapsam 4 kaynakta 6/8’e ulaşıp duruyor; kalan 3 kaynak yeni nokta getirmeden günlük hacmi 5,15 GiB’den 6,16 GiB’ye çıkarıyor.
- 120 GiB bütçede pencere 4 kaynakla 23,3 gün, 7 kaynakla 19,5 gündür. Kurgu tespit gecikmelerinden 21 günlük olan ikinci durumda pencerenin dışında kalır: tespit çalışır, kanıt bulunmaz. Aynı pencereyi 7 kaynakla tutmak bütçenin 1,08 katını ister.
- Bu katmanın kapattığı nokta sayısı 0’dır; 6 noktayı görünür kılar ve uca kendi ajanı için 2 nokta ekler. Görünürlük kapatma değildir ve bedeli yalnız depolama değildir.
Sonraki Adım
Bu dersin telemetrisi uçta olan biteni kaydetti, ama uçların birbiriyle olan ilişkisini yalnız bir kaynak gördü ve o kaynak kapsam gerekçesiyle savunulamadı. Uçlar arasındaki bağlantının kendisi başka bir yerde ölçülmüştü: ağın sınırında duran kutu, bölgeler arasında geçen akışı sayabiliyordu. O ölçümün göremediği bir küme var — aynı bölgede duran iki ucun arasındaki bağlantı sınırdan hiç geçmez. Sonraki dersin sorusu budur: aynı ağdaki uçlar arasında kaç bağlantı yolu var, çevre kuralı bunların kaçını hiç görmüyor ve konak tarafında duran bir filtre bu yolların kaçını kapatırken kaç meşru işi birlikte kesiyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.