İçeriğe geç
academia.sh

Ders 01 / 16

Sertleştirme İlkeleri

Kursun ölçü birimi kurulur: varsayılan kurulumun dört makine sınıfında bıraktığı 84 tutunma noktası sayılır, gereksiz kalemin ayıklanması 40'ını kapatır, 44'ü yalnız taban çizgisine yazılır ve kapatmanın meşru işe bedeli 41 elle adım olarak çıkar.

İçindekiler

Önceki kurs kimliği bir köke bağladı: anahtarın kime ait olduğu artık adlandırılmış bir zincire dayanıyor. Zincirin tamamı doğru kurulmuş olsa bile o kök bir makinenin üzerinde duruyor ve makine ele geçirilirse zincir saldırganın elinde geçerli kalmaya devam eder.

Bu kurs oradan başlar ve önceki dört kurstan farklı bir varsayımla açılır: kod bir kez uçta çalıştı. Sayılan şey artık girişin engellenmesi değil, girişten sonra kalıcı olmanın kaç noktadan mümkün olduğudur. Bir kez çalışan kod, makine yeniden başladığında ya da kullanıcı oturum açtığında kendiliğinden yeniden çalışmıyorsa tek seferliktir; yeniden çalışabilmesi için makinenin kendi otomatik çalıştırma düzenine bir kalem eklenmesi gerekir. O düzendeki her kalem bir tutunma noktasıdır ve sayılabilir. Bu ders kursun ölçü birimini kurar.

Tutunma Noktası ve Kurulu Kalem

Bir envanter kalemi, çalıştırılması için kimsenin bir şey yapması gerekmiyorsa tutunma noktasıdır. Beş tür bu tanıma girer: açılış girişi, servis tanımı, zamanlanmış görev, oturum betiği ve yapılandırma kancası. Ortak yanları biçimsel değil işlevseldir — her biri bir tanım taşır ve o tanımı yazabilen, makinenin bir sonraki açılışında ya da bir sonraki oturum açılışında kendi seçtiği şeyin çalışmasını sağlar.

Kurulu bir paket bu tanıma girmez. Diskte duran bir ikili kendiliğinden çalışmaz; çalışması için ya bir kullanıcının onu çağırması ya da yukarıdaki beş türden birinin onu adıyla anması gerekir. Ayrım ölçümü küçültür ve keskinleştirir: envanterin tamamı değil, otomatik çalışan bölümü sayılır. Bu kursta bir tutunma noktasının nasıl tanımlandığı — hangi dosyaya ne yazıldığı — hiçbir yerde yazılmaz; sayılan şey türün var olması ve kaç tane olduğudur.

Ölçüm kurgu bölgesel ölçüm ağının dört makine sınıfında yapılır: saha ekiplerinin dizüstü bilgisayarları, şube uçları, sayaç toplayıcı makineler ve merkezî işleme sunucuları.

  • SS1. Otuz üç kalemlik envanter ve dört sınıf modeldir; gerçek bir makine taranmıyor, gerçek bir kaldırma yapılmıyor.
  • SS2. Tutunma noktası sayımına yalnız beş otomatik tür girer; kurulu paket ayrı sayılır.
  • SS3. “Gerekli” sütunu iş tanımından türetilmiş sayılır ve modelde sabittir. Gerçekte bu sütun bir envanter çalışmasıyla doldurulur ve rol değiştikçe değişir.
  • SS4. Kaldırma bedeli, kalem kaldırıldığında elle adıma düşen meşru iş sayısıdır; elle yazıldı.
  • SS5. Kaldırma tamdır: kalem ya vardır ya yoktur. Devre dışı bırakma ile kaldırma arasındaki ayrım modellenmiyor; ikincisi tanımı da siler, birincisi bırakır.
  • SS6. Tanımı yazabilen alan tek değer taşır ve en geniş yetkiyi gösterir.
// sert/envanter.mjs — varsayilan kurulumun biraktigi kalem envanteri MODELIDIR.
// Gercek bir makine taranmaz, gercek bir kaldirma yapilmaz; sayilar bu dosyadan turer.
export const SINIF = ['saha-dizustu', 'sube-ucu', 'toplayici', 'islem-sunucusu'];
// Otomatik calistirilan bes kalem turu tutunma noktasi sayilir; 'paket' sayilmaz.
export const NOKTA_TUR = ['acilis', 'servis', 'gorev', 'oturum', 'kanca'];
// satir: ad | tur | kurulu maskesi | gerekli maskesi | tanimini yazabilen | kaldirma bedeli
// maske dort karakter, sirasiyla SINIF; 'k' var, '.' yok.
// bedel: kalem kaldirilinca elle adima dusen mesru is sayisi.
export const KALEM = `
  acilis-yoneticisi-girisi     acilis kkkk kkkk yonetici       0
  kurtarma-acilis-girisi       acilis kkkk .... yonetici       2
  ag-uzerinden-acilis          acilis .kkk ..k. yonetici       0
  uzak-yonetim-hizmeti         servis kkkk .kkk yonetici       0
  yazdirma-kuyrugu             servis kk.. .k.. yonetici       0
  kesif-yayini                 servis kkkk .... yonetici       1
  uzak-masaustu                servis kk.. .k.. yonetici       0
  olcut-toplayici-ajani        servis kkkk kkkk yonetici       0
  gunluk-aktarim-ajani         servis kkkk kkkk yonetici       0
  yama-ajani                   servis kkkk kkkk yonetici       0
  yardimci-arac-hizmeti        servis kkkk .... yerel-yonetici 0
  bulut-esitleme-hizmeti       servis k... .... kullanici      2
  sayac-alim-hizmeti           servis ..k. ..k. yonetici       0
  is-kuyrugu-hizmeti           servis ...k ...k yonetici       0
  guncelleme-denetimi          gorev  kkkk kkkk yonetici       0
  disk-bakimi                  gorev  kkkk kkkk yonetici       0
  telemetri-gonderimi          gorev  kkkk .... yonetici       0
  yardimci-arac-guncellemesi   gorev  kkkk .... yerel-yonetici 1
  kullanici-gorev-klasoru      gorev  kk.. .... kullanici      3
  yedek-tetigi                 gorev  ..kk ..kk yonetici       0
  oturum-acilis-betigi         oturum kk.. kk.. yonetici       0
  kullanici-baslangic-klasoru  oturum kk.. .... kullanici      3
  kabuk-yapilandirma-dosyasi   oturum kkkk k.k. kullanici      2
  paket-yoneticisi-kancasi     kanca  kkkk ...k yonetici       1
  surucu-yukleme-kancasi       kanca  kkkk kk.. yonetici       0
  kimlik-dogrulama-eklentisi   kanca  kkkk .kkk yonetici       0
  kabuk-eklenti-dizini         kanca  kk.. .... kullanici      2
  belge-duzenleyici            paket  kk.. kk.. -              0
  arsiv-araci                  paket  kkkk kkkk -              0
  betik-calisma-zamani         paket  kkkk ..kk -              1
  veri-tabani-istemcisi        paket  ..kk ..kk -              0
  tanilama-araci-takimi        paket  kkkk .... -              3
  saha-olcum-uygulamasi        paket  k... k... -              0`
  .trim().split('\n').map((r) => {
    const [ad, tur, kurulu, gerek, yazan, bedel] = r.trim().split(/\s+/);
    return { ad, tur, kurulu, gerek, yazan, bedel: Number(bedel),
      nokta: NOKTA_TUR.includes(tur) };
  });

export const varMi = (k, i) => k.kurulu[i] === 'k';
export const gerekli = (k, i) => k.gerek[i] === 'k';
// Bir sinifta kurulu olan, gerekmeyen ve bu yuzden kaldirilabilen kalemler.
export const fazla = (i) => KALEM.filter((k) => varMi(k, i) && !gerekli(k, i));
export const noktalar = (i) => KALEM.filter((k) => k.nokta && varMi(k, i));
export const kalanlar = (i) => noktalar(i).filter((k) => gerekli(k, i));
export const olc = (i) => ({
  kurulu: KALEM.filter((k) => varMi(k, i)).length,
  nokta: noktalar(i).length,
  kapanan: fazla(i).filter((k) => k.nokta).length,
  kalan: kalanlar(i).length,
  bedel: fazla(i).filter((k) => k.nokta).reduce((a, k) => a + k.bedel, 0),
});

Envanterin Sayımı

// sert/say.mjs — dort makine sinifinda tutunma noktasi, kapanan nokta ve kaldirma bedeli
import { SINIF, NOKTA_TUR, KALEM, olc, varMi, gerekli, noktalar, kalanlar, fazla } from './envanter.mjs';

const y = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join('').trimEnd());
const top = (f) => SINIF.reduce((a, _, i) => a + f(i), 0);

console.log(`${KALEM.length} envanter kalemi; ${KALEM.filter((k) => k.nokta).length} tanesi ` +
  `otomatik calistirilan turden (${NOKTA_TUR.join(', ')})`);

const A = [-16, 8, 7, 9, 7, 8];
console.log('\n1. sinif basina sayim');
y(A, 'sinif', 'kurulu', 'nokta', 'kapanan', 'kalan', 'bedel');
for (const [i, s] of SINIF.entries()) {
  const o = olc(i);
  y(A, s, o.kurulu, o.nokta, o.kapanan, o.kalan, o.bedel);
}
y(A, 'toplam', top((i) => olc(i).kurulu), top((i) => olc(i).nokta),
  top((i) => olc(i).kapanan), top((i) => olc(i).kalan), top((i) => olc(i).bedel));

const B = [-8, 7, 9, 7, 8];
console.log('\n2. tur basina, dort sinifin toplami');
y(B, 'tur', 'nokta', 'kapanan', 'kalan', 'bedel');
for (const t of NOKTA_TUR)
  y(B, t, top((i) => noktalar(i).filter((k) => k.tur === t).length),
    top((i) => fazla(i).filter((k) => k.nokta && k.tur === t).length),
    top((i) => kalanlar(i).filter((k) => k.tur === t).length),
    top((i) => fazla(i).filter((k) => k.nokta && k.tur === t).reduce((a, k) => a + k.bedel, 0)));

console.log('\n3. sinifa gore ayrisan nokta (bir sinifta gerekli, otekinde fazla)');
const ayrisan = KALEM.filter((k) => k.nokta && SINIF.some((_, i) => varMi(k, i) && gerekli(k, i))
  && SINIF.some((_, i) => varMi(k, i) && !gerekli(k, i)));
for (const k of ayrisan) y([-30, -8, -6], k.ad, k.tur, k.gerek);

const yz = (i) => noktalar(i).filter((k) => k.yazan !== 'yonetici');
console.log(`\nayri karar isteyen nokta        ${ayrisan.length} kalem, ` +
  `${top((i) => ayrisan.filter((k) => varMi(k, i)).length)} karar`);
console.log(`yoneticisiz tanimlanabilen nokta ${top((i) => yz(i).length)} karar, ` +
  `kapanan ${top((i) => yz(i).filter((k) => !gerekli(k, i)).length)}, ` +
  `kalan ${top((i) => yz(i).filter((k) => gerekli(k, i)).length)}`);
console.log(`kaldirilabilir paket             ${top((i) => fazla(i).filter((k) => !k.nokta).length)} karar, ` +
  `bedel ${top((i) => fazla(i).filter((k) => !k.nokta).reduce((a, k) => a + k.bedel, 0))}`);
console.log(`toplam nokta karari ${top((i) => olc(i).nokta)}: ` +
  `kapatilan ${top((i) => olc(i).kapanan)}, ` +
  `yalniz taban cizgisine yazilan ${top((i) => olc(i).kalan)}`);
33 envanter kalemi; 27 tanesi otomatik calistirilan turden (acilis, servis, gorev, oturum, kanca)

1. sinif basina sayim
sinif             kurulu  nokta  kapanan  kalan   bedel
saha-dizustu          28     23       14      9      15
sube-ucu              27     23       11     12      15
toplayici             23     19        7     12       5
islem-sunucusu        23     19        8     11       6
toplam               101     84       40     44      41

2. tur basina, dort sinifin toplami
tur       nokta  kapanan  kalan   bedel
acilis       11        6      5       8
servis       31       12     19       6
gorev        20       10     10      10
oturum        8        4      4      10
kanca        14        8      6       7

3. sinifa gore ayrisan nokta (bir sinifta gerekli, otekinde fazla)
ag-uzerinden-acilis           acilis  ..k.
uzak-yonetim-hizmeti          servis  .kkk
yazdirma-kuyrugu              servis  .k..
uzak-masaustu                 servis  .k..
kabuk-yapilandirma-dosyasi    oturum  k.k.
paket-yoneticisi-kancasi      kanca   ...k
surucu-yukleme-kancasi        kanca   kk..
kimlik-dogrulama-eklentisi    kanca   .kkk

ayri karar isteyen nokta        8 kalem, 27 karar
yoneticisiz tanimlanabilen nokta 19 karar, kapanan 17, kalan 2
kaldirilabilir paket             6 karar, bedel 14
toplam nokta karari 84: kapatilan 40, yalniz taban cizgisine yazilan 44

Kapatılan Nokta ile Kayda Geçen Nokta

Toplam satırı kursun iki sütununu birden veriyor. Dört sınıfta 84 tutunma noktası kararı var; gereksiz kalemin ayıklanması bunların 40’ını kapatıyor ve 44’ü açık kalıyor. Açık kalan 44 nokta için yapılabilecek tek şey tanımlarının bir taban çizgisine yazılması ve sonraki sapmaların o çizgiyle karşılaştırılmasıdır. Bu bir kapatma değildir; kaydedilmiş bir nokta kullanıldığında hâlâ çalışır, yalnız karşılaştırma yapıldığında görülür.

İki sütunun ayrı tutulması bu kursun kuralıdır. “Sertleştirildi” cümlesi tek başına hangi sütuna yazıldığını söylemez. Kapatılan nokta bir daha kullanılamaz; kayda geçen nokta kullanılabilir ve yalnız birileri kaydı okuduğunda fark edilir.

Model bir kalemi ya var ya yok sayıyor (SS5) ve bu, gerçekte iki ayrı işlemi tek sayıya indiriyor. Bir servisi devre dışı bırakmak onun tanımını yerinde bırakır ve yalnız çalıştırma bayrağını kapatır; kaldırmak tanımı da siler. Sayım açısından fark şudur: devre dışı bırakılmış bir kalem kapatılan sütununa değil, kayda geçen sütununa aittir, çünkü tanımı yazabilen biri bayrağı geri açabilir. Aradaki fark ölçüldüğünde çoğu envanterde 40 sayısı düşer — kaldırılamayan ama devre dışı bırakılabilen kalemler kapatılmış sanılır. Bu dersin sayımı, kaldırmanın gerçekten yapıldığını varsayar; bir uçta yapılmadıysa o kalem ikinci sütuna taşınır.

Sınıf satırları ters bir dağılım gösteriyor. Saha dizüstü bilgisayarı en çok kalem taşıyan sınıftır (28 kurulu, 23 nokta) ve en çok temizlenen sınıftır: 14 nokta kapanıyor, 9 kalıyor. Toplayıcı makinede 19 noktanın yalnız 7’si kapanıyor, çünkü kurulu olan neredeyse hep gereklidir. Yani temizlik en çok, tek bir işi olmayan ve çok amaçlı kurulan makinede kazandırır; tek işi olan makinede kazanılacak alan zaten dardır.

Tür tablosu kalan tarafın nerede toplandığını veriyor. Otuz bir servis tanımının yalnız 12’si kapanıyor; 19 servis kalıyor ve bu, kalan 44 noktanın en büyük parçasıdır. Ölçüt toplayıcı, günlük aktarımı, yama ajanı ve kimlik doğrulama eklentisi kaldırılamaz, çünkü makinenin yönetilebilir olması bunlara bağlıdır. Sertleştirmenin sınırı burada görünür: bir uç noktayı yönetilebilir kılan kalemler, o uçta kalıcı olmanın da yollarıdır.

Kimin Yazabildiği, Kaç Tane Olduğundan Önemli

Ayrı satır 84 noktanın 19’unu işaretliyor: yönetici yetkisi olmadan tanımlanabilen noktalar. Kullanıcı görev klasörü, kullanıcı başlangıç klasörü, kabuk eklenti dizini, kabuk yapılandırma dosyası, bulut eşitleme hizmeti ve yerel yönetici yetkisiyle gelen iki yardımcı araç kalemi bu kümededir. Temizlik bunların 17’sini kapatıyor, geriye 2 kalıyor.

Sayının küçüklüğü sonucun önemini azaltmaz. Yönetici yetkisi gerektiren bir tutunma noktası, o yetkiyi zaten elde etmiş birinin kullanabileceği bir kalemdir; yönetici yetkisi gerektirmeyen bir nokta, sıradan bir kullanıcı oturumunda çalışan koda açıktır. İki kalem arasındaki fark sayıda değil, hangi adımdan sonra kullanılabildiğindedir. Kalan iki kalem — saha dizüstü bilgisayarında ve toplayıcı makinede kabuk yapılandırma dosyası — kaldırılamaz, çünkü iki sınıfta da işin kendisi kabuk üzerinden yürüyor.

Sınıfa Göre Ayrışan Kalem

Üçüncü blok sekiz kalemi ayırıyor: her biri bir sınıfta gerekli, ötekinde fazla. Uzak yönetim hizmeti üç sınıfta zorunlu, saha dizüstü bilgisayarında gereksiz. Yazdırma kuyruğu yalnız şube ucunda gerekli. Ağ üzerinden açılış yalnız toplayıcı makinede. Paket yöneticisi kancası yalnız işleme sunucusunda.

Bu sekiz kalem 27 karar üretiyor ve tek bir kurumsal “kaldırılacaklar listesi” bunları çözemez. Liste sekiz kalemi de kaldırırsa üç sınıfta yönetim erişimi kapanır; hiçbirini kaldırmazsa saha dizüstü bilgisayarında gereksiz bir nokta açık kalır. Doğru olan sınıf başına ayrı karar vermektir ve bakım maliyeti tam olarak budur: dört liste, 84 karar ve her rol değişikliğinde yeniden bakılması gereken 8 sınır kalemi.

Kapatmanın Bedeli

Bedel sütunu 41 elle adım gösteriyor ve dağılımı da terstir: en çok nokta kapatılan iki sınıf en yüksek bedeli ödüyor (15 ve 15), en az kapatılan iki sınıf en düşüğü (5 ve 6). Tür tablosunda oran daha keskin: oturum betiklerinde 4 kapanan noktaya 10 bedel düşüyor, servis tanımlarında 12 kapanan noktaya 6. Kullanıcının kendi kurduğu kalemleri kapatmak, servis tanımlarını kapatmaktan yaklaşık beş kat pahalıdır — çünkü kullanıcı o kalemi bir işi yürütmek için kurmuştu ve kalem kapandığında iş yönetime düşer.

Kalemler adıyla okunduğunda bedel somutlaşıyor. Kurtarma açılış girişi dört sınıfta da fazladır ve kaldırıldığında yerinde onarım taşınabilir ortam ister; dört sınıfta 8 elle adım. Kullanıcı görev klasörü ve başlangıç klasörü, kullanıcıların kendi zamanlamalarını kurma yoludur; kapatıldığında her istek bir yönetim işine dönüşür.

Paket tarafı ayrı sayılıyor: 6 kaldırma kararı ve 14 elle adım. Tanılama araç takımı dört sınıfta da fazladır ama sorun giderme onunla yapılır; kaldırılırsa her olayda yeniden kurulum gerekir. Bu paket bir tutunma noktası değildir — kendiliğinden çalışmaz — ama disk üzerinde durduğu sürece onu çağırabilecek bir noktanın işine yarar. Aynı kalem uygulama izin listesi dersinde yeniden sayılacak.

Özet

  • Tutunma noktası, çalıştırılması için kimsenin bir şey yapması gerekmeyen kalemdir: açılış girişi, servis tanımı, zamanlanmış görev, oturum betiği ve yapılandırma kancası. Kurulu paket bu kümeye girmez ve ayrı sayılır.
  • Dört makine sınıfında 101 kurulu kalem kararının 84’ü tutunma noktasıdır; gereksiz kalemin ayıklanması 40’ını kapatır, 44’ü açık bırakır. Açık kalanlar için yapılabilecek tek şey taban çizgisine yazmaktır — bu bir kapatma değil, görünür kılmadır.
  • Servis tanımları kalan tarafın en büyük parçasıdır: 31 noktanın 19’u kaldırılamaz, çünkü uç noktayı yönetilebilir kılan kalemler aynı zamanda orada kalıcı olmanın yollarıdır.
  • Yönetici yetkisi olmadan tanımlanabilen 19 noktanın 17’si kapanır, 2’si kalır. Bir noktanın kim tarafından yazılabildiği, kaç tane olduğundan daha çok karar taşır.
  • Sekiz kalem sınıfa göre ayrışır ve 27 karar üretir; tek bir kurumsal liste bunları ya bir sınıfta gereksiz iş ya ötekinde eksik kapatma olarak çözer.
  • Kapatmanın bedeli 41 elle adımdır ve en çok temizlenen sınıflarda en yüksektir; oturum betiklerinde kapanan nokta başına bedel, servis tanımlarının yaklaşık beş katıdır.

Sonraki Adım

Kalan 44 nokta kapatılamıyor, çünkü iş onları gerektiriyor. Ama bu noktaları taşıyan bileşenler durdukları yerde eskiyor: bir servis tanımının arkasındaki ikilide kusur duyurulduğunda o nokta, kaldırılamadığı için, yama uygulanana kadar kullanılabilir kalır. Sonraki dersin ölçüsü bu yüzden penceredir: yayımla uygulama arasında geçen gün, o pencerede açık kalan nokta sayısı ve ikisinin çarpımı. Acil yama pencereyi kısaltır ama sınama adımlarının kaçını atladığı ve kaç kesinti ürettiği ayrıca sayılır. Yamanın kapattığı şeyin ne olduğu da ayrı bir sorudur: bir yama tutunma noktasını kaldırmaz, yalnız o noktaya ulaşmanın bilinen bir yolunu kapatır.

İ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