Ders 06 / 11
Sorun Giderme Yöntemi
Sorun gidermenin eleme sayısıyla ölçülmesi: 16 olasılık ve 8 test üzerinde bilgi öncelikli sıranın ortalama 3,50 adımda, liste sırasının 5,81 adımda bitirmesi, en kötü adımın 6'ya karşı 8 olması, hiçbir olasılığı elemeyen adımın 0'a karşı 22 çıkması ve iki nedenin hiçbir testle ayrılamaması.
İçindekiler
Önceki ders yönetim işlerinin bıraktığı izi saydı ve makine beklendiği gibi çalışırken geçerli olan bir düzenin ölçüsünü verdi. Makine beklendiği gibi çalışmadığında elde yalnız belirtiler kalır: bir servis veri alamıyor, bir istek yanıtsız dönüyor, bir iş gecikiyor.
Belirtiden nedene giden yol bir yöntemdir ve yöntem ölçülebilir. Bu ders onu tek bir sayıya bağlar: bir hipotez sınandığında kaç olasılık eleniyor.
Yöntem Bir Eleme Sayısıdır
Sorun giderme, tahmin ile deneme arasında bir yerde anlatılır. Ölçülebilir hâle getirmek için üç şey yazılır.
Olasılık kümesi. Belirti görüldüğünde hangi nedenler hâlâ mümkündür. Bu küme yazılmadığında “neden arıyorum” cümlesi bir sayı taşımaz.
Test kümesi. Her test bir hipotezi sınar ve bir sonuç verir. Bir testin gücü, sonucun kaç olasılığı elediğidir — ve bu sayı kötü durumda okunur, çünkü hangi sonucun çıkacağı önceden bilinmez.
Sıra. Testler bir sırayla koşturulur. Aynı test kümesi farklı sıralarla farklı sayıda adımda bitirir; sıra, ek bir araç almadan kazanılan tek şeydir.
On Altı Olasılık, Sekiz Test
Örnek, kurgu bölgesel ölçüm ağında bir belirtidir: şube sunucusundan faturalama servisine veri gitmiyor. Belirti de neden listesi de kurgudur; aşağıdaki değerlendirme bir modeldir, gerçek bir olay kaydı yoktur.
DI28: belirti görüldüğünde 16 neden mümkündür. DI29: 8 test vardır; her test her neden için
tek bir sonuç verir ve aynı sonucu veren nedenler o testle birbirinden ayrılmaz. DI30: bir
test koşturulduğunda aday kümesi, doğru nedenle aynı sonucu veren nedenlere daralır. DI31: üç
sıra denenir — bilgi kötü durumda en çok eleyen testi seçer, liste testleri yazıldıkları sırayla
koşturur, zayif kötü durumda en az eleyen testi öne alır. DI32: koşum, aday kümesi tek nedene
indiğinde ya da hiçbir test kümeyi daha fazla ayıramadığında durur.
// bt/tani.mjs — bir belirti kumesinde hipotez basina elenen olasilik (model): kurgu olcum agi, // gercek bir olay kaydi yok. Rastgelelik yok. // Belirti: sube sunucusundan faturalama servisine veri gitmiyor. Baslangicta 16 olasilik. export const NEDEN = ["ag-kablosu", "anahtar-uc-durumu", "adres-catismasi", "ad-cozumleme", "guvenlik-duvari-kurali", "yonlendirme-tablosu", "hizmet-durmus", "hizmet-yanlis-ucta", "sertifika-suresi", "kimlik-bilgisi", "izin-degisikligi", "disk-dolu", "bellek-tukendi", "saat-kaymasi", "surum-uyumsuzlugu", "yapilandirma-hatasi"]; // Her test bir hipotezi sinar. Dizideki her karakter, o nedenin testte verecegi sonuctur; // ayni karakteri veren nedenler o testle birbirinden ayrilamaz. export const TEST = [ ["ag-baglantisi", "hheeeeeeeeeeeeee"], ["adres-ve-yonlendirme", "eeceeyeeeeeeeeee"], ["ad-cozumleme", "eeeheeeeeeeeeeee"], ["uc-erisimi", "eeeehekkeeeeeeee"], ["hizmet-durumu", "eeeeeedyeeeeeeee"], ["kimlik-ve-sertifika", "eeeeeeeeskieeeee"], ["kaynak-durumu", "eeeeeeeeeeedbeee"], ["saat-surum-yapilandirma", "eeeeeeeeeeeeetsy"], ].map(([ad, s]) => ({ ad, s })); // Bir testin verilen aday kumesinde birakacagi en buyuk grup: kotu durumda kalan olasilik. export const enBuyuk = (t, aday) => Math.max(...[...new Set(aday.map((c) => t.s[c]))] .map((v) => aday.filter((c) => t.s[c] === v).length)); export const SIRA = { // bilgi-oncelikli: kotu durumda en cok eleyen test. Hicbiri elemiyorsa dur. bilgi: (aday, kul) => { const k = TEST.map((t, i) => i).filter((i) => !kul.has(i)); if (!k.length) return null; const e = k.reduce((a, i) => (enBuyuk(TEST[i], aday) < enBuyuk(TEST[a], aday) ? i : a)); return enBuyuk(TEST[e], aday) === aday.length ? null : e; }, // liste: testler yazildigi sirayla. liste: (aday, kul) => TEST.map((t, i) => i).find((i) => !kul.has(i)) ?? null, // zayif: kotu durumda en az eleyen testi one alan sira. zayif: (aday, kul) => { const k = TEST.map((t, i) => i).filter((i) => !kul.has(i)); if (!k.length) return null; return k.reduce((a, i) => (enBuyuk(TEST[i], aday) > enBuyuk(TEST[a], aday) ? i : a)); }, }; export function kos(dogru, sira) { let aday = NEDEN.map((n, i) => i); const kul = new Set(); let adim = 0, bos = 0; while (aday.length > 1) { const i = SIRA[sira](aday, kul); if (i === null) break; kul.add(i); const once = aday.length; aday = aday.filter((c) => TEST[i].s[c] === TEST[i].s[dogru]); adim++; if (aday.length === once) bos++; } return { adim, bos, kalan: aday.length }; }
// bt/taniolc.mjs — hipotez basina kac olasilik eleniyor, hangi sira kac adimda bitiriyor. import { NEDEN, TEST, enBuyuk, SIRA, kos } from "./tani.mjs"; const yaz = (g, ...s) => console.log(s.map((v, i) => (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join("")); const HEPSI = NEDEN.map((n, i) => i); const S = Object.keys(SIRA); if (TEST.some((t) => t.s.length !== NEDEN.length)) throw new Error("test uzunlugu uyusmuyor"); console.log(`belirti: sube sunucusundan veri gitmiyor; ${NEDEN.length} olasilik, ` + `${TEST.length} test`); const A = [-26, 13, 15, 16]; console.log("\n1. tek basina her testin gucu (16 olasilik uzerinde)"); yaz(A, "test", "sonuc turu", "kotu durumda", "en az elenen"); for (const t of TEST) { const b = enBuyuk(t, HEPSI); yaz(A, t.ad, new Set(t.s).size, b, NEDEN.length - b); } const B = [-38, 10, 10, 10]; console.log("\n2. uc sira, 16 nedenin her biri dogru neden olarak denendiginde"); const R = Object.fromEntries(S.map((s) => [s, HEPSI.map((c) => kos(c, s))])); yaz(B, "olcu", ...S); for (const [ad, f] of [["ortalama adim", (r) => (r.reduce((a, x) => a + x.adim, 0) / r.length).toFixed(2)], ["en kotu adim", (r) => Math.max(...r.map((x) => x.adim))], ["hicbir olasiligi elemeyen adim", (r) => r.reduce((a, x) => a + x.bos, 0)], ["tek nedene inen senaryo (16 uzerinden)", (r) => r.filter((x) => x.kalan === 1).length]]) yaz(B, ad, ...S.map((s) => f(R[s]))); const C = [-38, 10, 10, 10]; console.log("\n3. dort neden icin adim sayisi"); yaz(C, "dogru neden", ...S); for (const c of [0, 7, 10, 15]) yaz(C, NEDEN[c], ...S.map((s) => kos(c, s).adim)); const D = [-38, 10]; console.log("\n4. yontemin tabani"); const ayrilamaz = HEPSI.filter((c) => HEPSI .some((d) => d !== c && TEST.every((t) => t.s[c] === t.s[d]))); yaz(D, "olcu", "deger"); yaz(D, "hicbir testin ayiramadigi neden", ayrilamaz.length); yaz(D, "bilgi sirasinda ulasilan en kucuk kume", Math.min(...HEPSI.map((c) => kos(c, "bilgi").kalan))); yaz(D, "bilgi sirasinda kalan en buyuk kume", Math.max(...HEPSI.map((c) => kos(c, "bilgi").kalan))); console.log(`ayrilamayan nedenler: ${ayrilamaz.map((c) => NEDEN[c]).join(", ")}`);
belirti: sube sunucusundan veri gitmiyor; 16 olasilik, 8 test 1. tek basina her testin gucu (16 olasilik uzerinde) test sonuc turu kotu durumda en az elenen ag-baglantisi 2 14 2 adres-ve-yonlendirme 3 14 2 ad-cozumleme 2 15 1 uc-erisimi 3 13 3 hizmet-durumu 3 14 2 kimlik-ve-sertifika 4 13 3 kaynak-durumu 3 14 2 saat-surum-yapilandirma 4 13 3 2. uc sira, 16 nedenin her biri dogru neden olarak denendiginde olcu bilgi liste zayif ortalama adim 3.50 5.81 5.81 en kotu adim 6 8 8 hicbir olasiligi elemeyen adim 0 22 12 tek nedene inen senaryo (16 uzerinden) 14 14 14 3. dort neden icin adim sayisi dogru neden bilgi liste zayif ag-kablosu 4 8 8 hizmet-yanlis-ucta 2 5 4 izin-degisikligi 2 6 7 yapilandirma-hatasi 3 8 8 4. yontemin tabani olcu deger hicbir testin ayiramadigi neden 2 bilgi sirasinda ulasilan en kucuk kume 1 bilgi sirasinda kalan en buyuk kume 2 ayrilamayan nedenler: ag-kablosu, anahtar-uc-durumu
Sayılar ölçüm sınıfındadır; girdileri DI28–DI32’dir.
Testler Dengesiz, Bölme Yarı Yarıya Değil
Birinci tablo bir beklentiyi yıkar. Sekiz testin hiçbiri olasılık kümesini ortadan bölmez: kötü
durumda kalan olasılık 13 ile 15 arasındadır, yani en güçlü test bile 16’dan yalnız 3 olasılık
eler. ad-cozumleme testinin kötü durumda elediği olasılık 1’dir.
Nedeni, testlerin sonuç türü sayısındadır. Bir test iki sonuç veriyorsa olasılıkları en fazla ikiye böler; dört sonuç veriyorsa dörde. Ama bölmenin eşit olması gerekmez, ve bu modelde eşit değildir: her test birkaç nedeni ayırır, kalan on üç ya da on dördü aynı sonuçta bırakır. Bir sistemde testler doğal olarak dengesizdir, çünkü her test belirli bir katmanı sınar ve o katmanın dışındaki nedenler testin gözünde birbirinin aynıdır.
Bunun pratik sonucu şudur: kötü durumda en çok eleyen testi seçmek, ikiye bölmeyi bulmak değil, en az kötü bölmeyi bulmaktır. 16 olasılığı ikili aramayla dört adımda bitirme beklentisi bu test kümesinde karşılanmaz.
Sıra Ne Değiştiriyor
İkinci tablo üç sırayı on altı nedenin her biri doğru neden alınarak koşturur. Bilgi öncelikli sıra ortalama 3,50 adımda bitirir; liste sırası ve zayıf sıra 5,81 adımda. En kötü adım bilgi öncelikli sırada 6, ötekilerde 8’dir — sekiz, test sayısının tamamıdır, yani bu iki sıra kötü durumda bütün testleri koşturur.
Fark yaklaşık kırk beş dakikalık bir olayda kırk beş dakikalık bir fark demek değildir; adım başına maliyet testten teste değişir. Ama sayı yön verir: aynı test kümesi, aynı bilgi ve aynı araçlarla, yalnız sıra değiştirilerek ortalama adımın üçte birinden fazlası kazanılır.
Üçüncü tablo bunun her nedende geçerli olmadığını gösterir. hizmet-yanlis-ucta nedeninde bilgi
öncelikli sıra 2, zayıf sıra 4, liste sırası 5 adımdır. izin-degisikligi nedeninde ise zayıf sıra
7, liste sırası 6 adımdır — zayıf sıra liste sırasından daha kötüdür. ag-kablosu nedeninde
liste ve zayıf sıraların ikisi de 8 adım koşar, bilgi öncelikli sıra 4.
Sabit Sıra, Uyarlanan Kötü Sıradan Daha Çok Boş Adım Üretir
İkinci tablonun üçüncü satırı dersin en beklenmedik sayısını verir. Hiçbir olasılığı elemeyen adım sayısı bilgi öncelikli sırada 0, liste sırasında 22, zayıf sırada 12’dir.
Zayıf sıra, kötü durumda en az eleyen testi bile bile öne alır; yine de liste sırasının yarısı kadar boş adım üretir. Nedeni, ikisi arasındaki gerçek farkın “iyi seçim / kötü seçim” değil, uyarlanan / uyarlanmayan olmasıdır. Zayıf sıra her adımda o anki aday kümesine bakar ve kümeyi hiç bölmeyen bir test kalmadıysa onu seçmez; liste sırası aday kümesine hiç bakmaz ve sırasıyla, zaten elenmiş bir katmanı sınayan testleri de koşturur.
Boş adım, sorun gidermenin görünmeyen maliyetidir. Koşulur, zaman alır, bir sonuç üretir ve o sonuç aday kümesini değiştirmez — ama sonucun kendisi bir bilgi gibi görünür, çünkü “şu da normalmiş” cümlesi bir ilerleme duygusu verir. Sayılması gereken şey koşulan test sayısı değil, elenen olasılık sayısıdır. Liste sırasının 22 boş adımı, koşan ama hiçbir şey elemeyen 22 sınamadır.
Eleme Sayısı Tek Ölçü Değil
Model her nedeni eşit olası sayar ve testleri yalnız eleme güçlerine göre sıralar. Bir olayda iki şey daha vardır ve ikisi de bu tabloda yoktur.
Birincisi nedenlerin olasılığıdır. On altı nedenin hepsi aynı sıklıkta görülmez; bir yapılandırma
değişikliğinden hemen sonra ortaya çıkan bir belirtinin arkasında yapilandirma-hatasi bulunma
olasılığı ötekilerden yüksektir. Eleme sayısı bunu görmez: en çok eleyen testi seçer, en olası
nedeni sınayan testi değil. İkisi çakışmıyorsa seçim, beklenen adım sayısı ile en kötü adım sayısı
arasında bir tercihtir. Belirtiyi hızla kapatmak beklenen sayıyı, kötü durumu sınırlamak en kötü
sayıyı önemser.
İkincisi testin maliyetidir. Modelde her adımın maliyeti eşittir; gerçekte bir test bir komutla
saniyeler içinde, bir başkası saha ekibinin şubeye gitmesiyle saatler içinde biter. Üç olasılık
eleyen pahalı bir test ile iki olasılık eleyen ucuz bir test arasındaki seçim, eleme sayısına
bakılarak yapılamaz. ag-kablosu ile anahtar-uc-durumu ayrımının yeni bir gözlem istemesi tam
olarak böyle bir kalemdir: ayrımın bedeli bir ziyarettir.
Bu iki ekseni eklemek modeli değiştirmez, okunmasını değiştirir. Tablodaki 3,50 sayısı, adımların eşit maliyetli ve nedenlerin eşit olası olduğu durumda geçerlidir; bu iki varsayım yazılmadan sayı bir hedefe dönüştürülemez. Ölçümün değeri, hangi varsayımla üretildiği yazıldığında ortaya çıkar.
Yöntemin Tabanı
Dördüncü tablo yöntemin nerede durduğunu yazar. On altı nedenin ikisi hiçbir testle
ayrılamaz: ag-kablosu ile anahtar-uc-durumu. İkisi de aynı testte aynı sonucu verir, çünkü
sunucudan bakıldığında ikisinin belirtisi aynıdır.
Bu yüzden üç sıranın da tek nedene indirdiği senaryo sayısı 14/16’dır. Kalan iki senaryoda yöntem iki olasılıkla durur ve bu bir eksiklik değil, test kümesinin çözünürlüğüdür. Ayrımı yapmak yeni bir sıra değil, yeni bir test ister — bu modelde sunucunun dışından, bağlantının öteki ucundan yapılacak bir gözlem.
Bunun bir karar karşılığı vardır. Bir sorun giderme yordamı yazılırken önce test kümesinin
ayıramadığı neden çiftleri çıkarılır; o çiftler için ya yeni bir gözlem eklenir ya da ayrım
yapılmadan uygulanabilecek tek bir düzeltme tanımlanır. Ölçüm ağında ag-kablosu ile
anahtar-uc-durumu ayrımı yapılmadan da ilerlenebilir: iki neden de saha ekibinin aynı ziyaretinde
görülür. Ayırt edilemeyen iki neden, düzeltmeleri aynıysa bir sorun değildir.
Özet
- Sorun giderme, hipotez başına elenen olasılık sayısıyla ölçülür; bu sayı kötü durumda okunur, çünkü hangi sonucun çıkacağı önceden bilinmez.
- Testler dengesizdir: sekiz testin en güçlüsü 16 olasılıktan kötü durumda yalnız 3’ünü eler, en zayıfı 1’ini. İkiye bölme beklentisi gerçek test kümelerinde karşılanmaz.
- Bilgi öncelikli sıra ortalama 3,50 adımda, liste ve zayıf sıra 5,81 adımda bitirir; en kötü adım 6’ya karşı 8’dir. Sıra, yeni bir araç almadan kazanılan tek şeydir.
- Hiçbir olasılığı elemeyen adım sayısı 0, 22 ve 12’dir. Sabit liste sırası, bile bile zayıf seçim yapan uyarlanan sıradan iki kat fazla boş adım üretir; belirleyici olan seçimin iyiliği değil, aday kümesine bakılıp bakılmamasıdır.
- Eleme sayısı tek ölçü değildir: nedenlerin olasılığı ve testlerin maliyeti tabloda yoktur. 3,50 sayısı, adımların eşit maliyetli ve nedenlerin eşit olası sayıldığı varsayımıyla geçerlidir.
- İki neden hiçbir testle ayrılamaz; üç sıra da 16 senaryonun 14’ünü tek nedene indirir. Kalan ayrım yeni bir sıra değil yeni bir gözlem ister, ve düzeltmeleri aynıysa ayrım gerekmeyebilir.
Sonraki Adım
Bu konu tek bir makinenin sınırlarını kalem kalem saydı. Donanımın çizdiği sekiz sınır ve ikisinin envanterin tamamını açması; işletim sistemi ailelerinin aynı istekte 4, 11 ve 12 kalemde ayrışması; temiz kurulumun bıraktığı 17 riskli kalem ve kapanmayan 5’i; iki izin modelinin 6 istekte ifade sınırına çarpması; iki yönetim biçiminin aynı 11 denetim izi kalemini bırakması; ve şimdi belirtiden nedene giden yolun 3,50 adıma inmesi. Makinenin sınırı artık bir sıfat değil, bir sayıdır.
Bütün bu ölçümlerin sessiz bir varsayımı vardı: sayılan makine kendi donanımının üzerinde koşuyor. Bugün bu makinelerin çoğu için doğru değildir. Şube sunucusunun altında bir katman daha vardır ve o katmanın sınırı hiç ölçülmedi: hangi kalem konukla konak arasında paylaşılıyor, o sınırı geçmek kaç kalem istiyor ve sınır düştüğünde kaç kaleme erişiliyor. Sonraki konu Sanallaştırma ve Yedeklilik bu soruyla başlar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.