İçeriğe geç
academia.sh

Ders 02 / 16

Yama Yönetimi

Yamanın ölçüsü pencere olarak alınır: 102 makinelik filoda 12 duyuru için yayımla uygulama arasındaki gün, o pencerede açık kalan 1038 tutunma noktasının nokta-günü karşılığı, acil yolun 48 sınama kaleminden 36'sını atlayarak ürettiği 939 plan dışı kesinti ve hiçbir düzende kapanmayan 12 nokta.

İçindekiler

Önceki ders dört makine sınıfında 44 tutunma noktasını kapatılamaz olarak bıraktı: işin kendisi onları gerektiriyor. Kapatılamayan bir nokta durduğu yerde eskimez, ama onu tanımlayan bileşen eskir. Bir servis tanımının arkasındaki ikilide kusur duyurulduğunda o nokta — kaldırılamadığı için — yama uygulanana kadar bilinen bir yolla kullanılabilir kalır.

Bu dersin ölçüsü penceredir: duyurunun yayımlandığı gün ile yamanın uygulandığı gün arasındaki süre. Pencere tek başına bir zaman aralığıdır; taşıdığı ağırlık, o aralıkta açık kalan nokta sayısıyla çarpıldığında çıkar. Birim nokta-günüdür.

Yama Neyi Kapatır

Bu ders bir ayrımla başlar, çünkü ayrım yapılmadığında sonraki bütün sayılar yanlış sütuna yazılır. Bir yama tutunma noktasını kaldırmaz. Yama uygulandıktan sonra servis tanımı yerinde durur, zamanlanmış görev yerinde durur, açılış girişi yerinde durur. Değişen tek şey, o noktanın tanımını yazmaya izin veren bilinen bir kusurun ortadan kalkmasıdır.

Bu, kursun iki sütunu açısından şu demektir: yamanın kapattığı nokta sayısı sıfırdır. Yamanın azalttığı şey, noktanın ulaşılabilir olduğu süredir. Önceki dersin ayıklaması 40 noktayı gerçekten kapattı; yama hiçbirini kapatmaz, yalnız kalan 44’ün ne kadar süreyle açık olduğunu belirler. İki iş birbirinin yerine geçmez ve birbirini de gereksiz kılmaz.

Kurulum sonrası açık yüzey ve yama penceresinin dört parçası Sunucu, Ağ ve Sertleştirme kursunda ölçüldü; burada tekrarlanmaz. Buradaki ölçü sunucu kalemi değil tutunma noktasıdır ve sayım filo üzerinde yapılır.

  • SS7. 102 makinelik filo, dört sınıf ve 12 duyuru modeldir; gerçek bir yama indirilmiyor, gerçek bir filo taranmıyor. Sınıf başına kalan nokta sayısı (9, 12, 12, 11) önceki dersten gelir.
  • SS8. Her tutunma noktasının tanımı tek bir bileşene ait sayılır. Gerçekte bir nokta birden çok bileşene bağlı olabilir; bu, sayıları büyütür, yönünü değiştirmez.
  • SS9. Rastgelelik yok: duyuru günleri, bileşenler ve takvim modelde yazılıdır.
  • SS10. Kusurlu yama ve geri alma modellenmiyor; ikisi de önceki kursta ölçüldü ve burada girdi olarak alınır.
  • SS11. Bakım takvimi sabit aralıklıdır. Çevrimdışı olduğu için turu kaçıran makine sayısı sınıf başına sabittir ve o makineler bir sonraki turda yamalanır.
  • SS12. Acil yol 1,5 günde uygular ve dört sınama kaleminin üçünü atlar; turu kaçıran makineler acil yolu da kaçırır.
// yama/model.mjs — pencere MODELIDIR: kurgu filoda duyuru gunu, uygulama gunu ve o araliktaki
// acik tutunma noktasi. Gercek bir yama indirilmez, gercek bir filo taranmaz.
// Sinif basina kalan nokta sayisi (9, 12, 12, 11) onceki dersten gelir.
export const SINIF = [
  // ad, makine, takvim araligi (gun), takvim ofseti, cevrimdisi kaldigi icin turu kaciran makine
  { ad: 'saha-dizustu',   makine: 60, takvim: 21, ofs: 6, kacan: 9 },
  { ad: 'sube-ucu',       makine: 24, takvim: 14, ofs: 3, kacan: 1 },
  { ad: 'toplayici',      makine: 12, takvim: 7,  ofs: 2, kacan: 0 },
  { ad: 'islem-sunucusu', makine: 6,  takvim: 30, ofs: 9, kacan: 0 },
];
// Her bilesen, sinif basina kac tutunma noktasinin tanimini tasiyor; agir: makine yeniden baslar.
export const BILESEN = {
  cekirdek:             { nokta: [2, 2, 2, 2], agir: true },
  'sistem-kitapligi':   { nokta: [1, 1, 1, 1], agir: true },
  'uzak-yonetim':       { nokta: [0, 1, 1, 1], agir: false },
  'gozetim-ajani':      { nokta: [2, 2, 2, 2], agir: false },
  'yama-ajani':         { nokta: [2, 2, 2, 2], agir: false },
  'kimlik-eklentisi':   { nokta: [0, 1, 1, 1], agir: false },
  kabuk:                { nokta: [2, 2, 2, 1], agir: false },
  'is-yazilimi':        { nokta: [0, 1, 1, 1], agir: false },
};
export const DUYURU = [                       // [gun, bilesen, acil mi]
  [4.0, 'sistem-kitapligi', false], [13.5, 'cekirdek', true], [21.0, 'kabuk', false],
  [28.5, 'gozetim-ajani', false], [34.0, 'uzak-yonetim', true], [42.5, 'sistem-kitapligi', false],
  [51.5, 'yama-ajani', false], [58.5, 'cekirdek', false], [66.0, 'is-yazilimi', false],
  [74.5, 'kimlik-eklentisi', true], [88.0, 'kabuk', false], [97.5, 'sistem-kitapligi', true],
];
export const UFUK = 120, ACIL_SURE = 1.5, SINAMA_KALEM = 4, ACIL_ATLANAN = 3;
// Yamalanamayan kalem: alim hizmeti surum uyumlulugu nedeniyle yukseltilemiyor.
export const YAMALANAMAZ = [['is-yazilimi', 'toplayici']];
export const yamalanir = (b, i) => !YAMALANAMAZ.some(([x, y]) => x === b && y === SINIF[i].ad);
export const takvimGunu = (i, g) => {
  const s = SINIF[i];
  return Math.ceil((g - s.ofs) / s.takvim) * s.takvim + s.ofs;
};
export const TOPLAM_NOKTA = SINIF.reduce((a, s, i) =>
  a + s.makine * Object.values(BILESEN).reduce((b, c) => b + c.nokta[i], 0), 0);

// Bir duyurunun bir siniftaki penceresi ve nokta-gunu. duzen: 'takvim' | 'karma' | 'hepsi-acil'
export function pencere(d, i, duzen) {
  const [g, b, acil] = d, n = BILESEN[b].nokta[i], s = SINIF[i];
  const bos = { nokta: 0, noktaGun: 0, acikNoktaGun: 0, kesinti: 0, acikKalan: 0 };
  if (n === 0) return bos;
  if (!yamalanir(b, i))
    return { ...bos, nokta: n * s.makine, acikNoktaGun: n * s.makine * (UFUK - g),
      acikKalan: n * s.makine };
  const acilYol = duzen === 'hepsi-acil' || (duzen === 'karma' && acil);
  const ilk = acilYol ? g + ACIL_SURE : takvimGunu(i, g);
  const sonra = takvimGunu(i, ilk + 0.001);          // ilk turu kaciran makineler
  const zamaninda = s.makine - s.kacan;
  return { ...bos, nokta: n * s.makine,
    noktaGun: n * (zamaninda * (ilk - g) + s.kacan * (sonra - g)),
    kesinti: acilYol ? zamaninda : 0 };
}

export function tara(duzen) {
  let noktaGun = 0, agirlik = 0, tam = 0, servis = 0, acik = 0, acikGun = 0, atlanan = 0;
  for (const d of DUYURU) {
    const acilYol = duzen === 'hepsi-acil' || (duzen === 'karma' && d[2]);
    if (acilYol) atlanan += ACIL_ATLANAN;
    for (let i = 0; i < SINIF.length; i += 1) {
      const p = pencere(d, i, duzen);
      noktaGun += p.noktaGun; acikGun += p.acikNoktaGun; acik += p.acikKalan;
      if (p.acikKalan === 0) agirlik += p.nokta;
      if (BILESEN[d[1]].agir) tam += p.kesinti; else servis += p.kesinti;
    }
  }
  return { ortPencere: noktaGun / agirlik, noktaGun, tam, servis, acik, acikGun, atlanan };
}

Duyuru Başına Pencere

// yama/olc.mjs — pencere, penceredeki acik nokta ve acil yamanin bedeli
import { SINIF, BILESEN, DUYURU, UFUK, ACIL_SURE, SINAMA_KALEM, TOPLAM_NOKTA,
  YAMALANAMAZ, pencere, takvimGunu, tara } from './model.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 s2 = (x) => x.toFixed(1);

console.log(`${SINIF.reduce((a, s) => a + s.makine, 0)} makine, ${TOPLAM_NOKTA} tutunma noktasi, ` +
  `${UFUK} gunde ${DUYURU.length} duyuru (${DUYURU.filter((d) => d[2]).length} acil isaretli)`);

const A = [-18, 6, 8, 8, 11, 9, 12, 12];
console.log('\n1. takvim duzeninde duyuru basina pencere (gun) ve acik nokta');
y(A, 'duyuru', 'gun', 'saha', 'sube', 'toplayici', 'sunucu', 'acik nokta', 'nokta-gunu');
for (const d of DUYURU) {
  const p = SINIF.map((_, i) => pencere(d, i, 'takvim'));
  y(A, d[1], s2(d[0]), ...SINIF.map((s, i) => (BILESEN[d[1]].nokta[i] === 0 ? '-'
    : s2(takvimGunu(i, d[0]) - d[0]))),
  p.reduce((a, x) => a + x.nokta, 0),
  p.reduce((a, x) => a + x.noktaGun + x.acikNoktaGun, 0));
}

const B = [-12, 14, 13, 10, 13, 14, 12];
console.log('\n2. uc duzen: pencere, nokta-gunu ve acil yamanin bedeli');
y(B, 'duzen', 'ort pencere', 'nokta-gunu', 'atlanan', 'tam kesinti', 'servis kes.', 'acik nokta');
for (const duzen of ['takvim', 'karma', 'hepsi-acil']) {
  const t = tara(duzen);
  y(B, duzen, s2(t.ortPencere), t.noktaGun, `${t.atlanan}/${SINAMA_KALEM * DUYURU.length}`,
    t.tam, t.servis, t.acik);
}

console.log('\n3. yamanin nokta sayisina etkisi');
const t = tara('karma');
y([-40, 12], 'yamadan onceki tutunma noktasi', TOPLAM_NOKTA);
y([-40, 12], 'yamanin kapattigi nokta', 0);
y([-40, 12], 'yamadan sonraki tutunma noktasi', TOPLAM_NOKTA);
y([-40, 12], 'bilinen yolu kapanan nokta-gunu', t.noktaGun);
for (const [b, sad] of YAMALANAMAZ) {
  const i = SINIF.findIndex((s) => s.ad === sad), d = DUYURU.find((x) => x[1] === b);
  y([-40, 12], `yamalanamayan ${b}/${sad}`,
    `${BILESEN[b].nokta[i] * SINIF[i].makine} nokta x ${s2(UFUK - d[0])} gun`);
}
y([-40, 12], 'acil yolun kisalttigi ortalama pencere',
  s2(tara('takvim').ortPencere - tara('hepsi-acil').ortPencere));
y([-40, 12], 'acil yolun uygulama suresi', `${s2(ACIL_SURE)} gun`);
102 makine, 1038 tutunma noktasi, 120 gunde 12 duyuru (4 acil isaretli)

1. takvim duzeninde duyuru basina pencere (gun) ve acik nokta
duyuru               gun    saha    sube  toplayici   sunucu  acik nokta  nokta-gunu
sistem-kitapligi     4.0     2.0    13.0        5.0      5.0         102         725
cekirdek            13.5    13.5     3.5        2.5     25.5         204        2560
kabuk               21.0     6.0    10.0        2.0     18.0         198        1762
gozetim-ajani       28.5    19.5     2.5        1.5     10.5         204        3028
uzak-yonetim        34.0       -    11.0        3.0      5.0          42         344
sistem-kitapligi    42.5     5.5     2.5        1.5     26.5         102         770
yama-ajani          51.5    17.5     7.5        6.5     17.5         204        3232
cekirdek            58.5    10.5     0.5        6.5     10.5         204        1972
is-yazilimi         66.0       -     7.0        6.0      3.0          42         848
kimlik-eklentisi    74.5       -    12.5        4.5     24.5          42         515
kabuk               88.0     2.0    13.0        5.0     11.0         198        1456
sistem-kitapligi    97.5    13.5     3.5        2.5      1.5         102        1136

2. uc duzen: pencere, nokta-gunu ve acil yamanin bedeli
duzen          ort pencere   nokta-gunu   atlanan  tam kesinti   servis kes.  acik nokta
takvim                10.8        17700      0/48            0             0          12
karma                  8.6      14080.5     12/48          184            82          12
hepsi-acil             2.3         3801     36/48          460           479          12

3. yamanin nokta sayisina etkisi
yamadan onceki tutunma noktasi                  1038
yamanin kapattigi nokta                            0
yamadan sonraki tutunma noktasi                 1038
bilinen yolu kapanan nokta-gunu              14080.5
yamalanamayan is-yazilimi/toplayici     12 nokta x 54.0 gun
acil yolun kisalttigi ortalama pencere           8.5
acil yolun uygulama suresi                   1.5 gun

Pencere Bileşenin Değil, Takvimin Ürünü

İlk tablonun satırları aynı duyuruyu dört ayrı pencere olarak gösteriyor. Yirmi birinci gündeki kabuk duyurusunda saha dizüstü bilgisayarında pencere 6 gün, şube ucunda 10, toplayıcı makinede 2 ve işleme sunucusunda 18. Aradaki fark bileşenden gelmiyor; duyurunun bakım takvimine göre nereye düştüğünden geliyor. Yedi günlük takvimi olan toplayıcı makinede en uzun pencere bile 6,5 günü geçmiyor; otuz günlük takvimi olan işleme sunucusunda 26,5 güne çıkabiliyor.

Bu, “yama ne kadar hızlı uygulanıyor” sorusunun tek bir sayıyla yanıtlanamayacağı anlamına gelir. Sunucu sınıfının takvimi en seyrek olandır ve gerekçesi vardır: yeniden başlatma iş kesintisi demektir, dolayısıyla değişiklik onayı gerekir. Aynı gerekçe pencereyi otuz güne kadar uzatır.

Nokta-günü sütunu duyuruları büyüklüğe göre yeniden sıralıyor ve sıralama gün sayısını izlemiyor. Elli birinci gündeki yama ajanı duyurusu 3232 nokta-günü taşıyor; kırk ikinci gündeki sistem kitaplığı duyurusu, dört sınıfın hepsinde çok kısa pencerelere denk geldiği için 770. Aradaki farkın bir bölümü etkilenen nokta sayısından geliyor (204’e karşı 102), bir bölümü takvim hizalanmasından. İki duyuru “aynı önem düzeyinde” işaretlense bile taşıdıkları ağırlık dört kat farklıdır ve fark ancak nokta-günü hesaplandığında görünür.

Üç Düzen ve Acil Yolun Bedeli

İkinci tablo üç düzeni karşılaştırıyor: her şey takvimle, yalnız acil işaretli duyurular acil yolla ve her şey acil yolla. Ortalama pencere 10,8 günden 8,6’ya, oradan 2,3 güne iniyor. Nokta-günü 17.700’den 3801’e düşüyor — beşte birden az.

Aynı satırlarda üç bedel sütunu var. Kırk sekiz sınama kaleminin (on iki duyuru, dört kalem) takvim düzeninde hiçbiri atlanmıyor; karma düzende 12’si, her şeyin acil yolla uygulandığı düzende 36’sı atlanıyor. Atlanan kalemler uyumluluk sınaması, geri alma provası ve kullanıcı bildirimidir; pilot grup her düzende korunuyor.

Kesinti sütunları asıl bedeli veriyor. Takvim düzeninde yeniden başlatmalar bakım penceresine denk geldiği için plan dışı kesinti sıfırdır. Karma düzende 184 makine plan dışı tam yeniden başlatma, 82 makine servis kesintisi yaşıyor. Her şey acil yolla uygulandığında bu sayılar 460 ve 479 oluyor: 120 günde 939 plan dışı kesinti, yüz iki makinelik bir filoda makine başına dokuzdan fazla. Sekiz buçuk günlük pencere kazancının karşılığı budur ve kararı veren kişinin iki sayıyı yan yana okuması gerekir.

Üçüncü blokta bir sayı bu bedeli sınırlıyor: acil yol 1,5 günde uyguluyor ama ortalama pencere 2,3 günde kalıyor. Aradaki 0,8 gün, sahada çevrimdışı olduğu için turu kaçıran dokuz dizüstü bilgisayardan ve bir şube ucundan geliyor. Bu on makine acil yolu da kaçırıyor ve bir sonraki takvim gününü bekliyor. Pencereyi kısaltmanın alt sınırı yamanın hazır olma süresi değil, filonun ulaşılabilirliğidir.

Kapanmayan Nokta

Üçüncü blok dersin ayrımını sayıya bağlıyor. Filodaki tutunma noktası sayısı yamadan önce 1038, sonra 1038. Yamanın kapattığı nokta sıfır. Kapanan şey 14.080,5 nokta-günüdür: noktaların bilinen bir yolla ulaşılabilir olduğu sürenin toplamı.

Son sütundaki 12 sayısı üç düzende de aynı kalıyor. Toplayıcı makinelerdeki alım hizmeti sürüm uyumluluğu nedeniyle yükseltilemiyor; duyurudan sonraki 54 gün boyunca 12 nokta açık kalıyor ve hiçbir takvim değişikliği bunu kapatmıyor. Bu kalem için pencere kavramı anlamını yitirir, çünkü pencerenin kapanacağı bir gün yoktur.

Yamalanamayan bir kalemin karşılığı yamada değil, önceki dersin sütunundadır: nokta kapatılamıyorsa en azından görünür kılınmalıdır. On iki noktanın tanımı taban çizgisine yazılır ve değişip değişmediği karşılaştırılır. Bu, kusuru gidermez; kusurun kullanıldığı anı kayda geçirilebilir kılar. İki sütun arasındaki fark tam olarak budur ve bu kalemde ikinci sütundan başkası yoktur.

Özet

  • Yama bir tutunma noktasını kaldırmaz: filodaki nokta sayısı yamadan önce de sonra da 1038’dir. Yamanın azalttığı şey noktanın bilinen bir yolla ulaşılabilir olduğu süredir; kapattığı nokta sayısı sıfırdır.
  • Pencere bileşenin değil takvimin ürünüdür: aynı duyuru yedi günlük takvimde 2, otuz günlük takvimde 18 gün açık kalır. Tek bir “ortalama yama süresi” bu farkı gizler.
  • Nokta-günü duyuruları yeniden sıralar: 204 nokta etkileyen bir duyuru 3232, 102 nokta etkileyen bir başkası 770 nokta-günü taşır. Aynı önem düzeyi aynı ağırlık demek değildir.
  • Acil yol ortalama pencereyi 10,8 günden 2,3 güne indirir; karşılığında 48 sınama kaleminin 36’sı atlanır ve 120 günde 939 plan dışı kesinti üretilir.
  • Pencerenin alt sınırını yamanın hazır olma süresi değil filonun ulaşılabilirliği belirler: acil yol 1,5 günde uygulanır, ortalama 2,3 günde kalır, fark çevrimdışı 10 makineden gelir.
  • Yamalanamayan kalem üç düzende de 12 nokta açık bırakır ve 54 gün boyunca kapanmaz; bu kalemin tek karşılığı ikinci sütundur — kapatma değil, taban çizgisine yazıp karşılaştırma.

Sonraki Adım

Buraya kadar iki iş yapıldı: gereksiz kalem ayıklandı ve kalanların bilinen kusurları kapatıldı. İkisinin de dayandığı liste bu iki derste elle yazıldı — hangi kalemin gerekli olduğuna ve hangi takvimin uygun olduğuna karar veren biri vardı ve kararların gerekçesi yazılmadı. Sonraki dersin konusu bu boşluktur: yapılandırma kıyaslama kılavuzları aynı kararları madde madde toplar ve bir taban çizgisi önerir. Ölçü, kılavuzun kaç madde içerdiği değil, o maddelerin bu ortamda ne yaptığıdır: kaç madde uçların taban çizgisiyle uyumsuz, kaç madde bu ortamda hiç uygulanamıyor ve kaç madde uygulandığında meşru bir işi durduruyor. Üçü ayrı sayılmadığında tek bir uyum yüzdesi kalır ve o yüzde, kapanan nokta sayısı hakkında hiçbir şey söylemez.

İ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