Ders 05 / 30
Yerel ve Yönetilen Küme
Kümeyi kendin işletmek ile işletimini devretmek aynı kalemlerde karşılaştırılır: devredilen ve elde kalan işletim kalemi, aylık saat, sürüm yükseltme penceresi, denetim düzlemine erişimin kaybı ve çıkış maliyeti. Erişim kaybının bir önceki dersin salınım bağıntısındaki kaldıracı elden aldığı sayıyla gösterilir.
İçindekiler
Bu konu kümenin ne olduğunu, hangi bileşenlerden kurulduğunu ve nasıl uzlaştığını ölçtü. Geriye tek bir işletim kararı kalıyor: bu düzlemi kendin mi işleteceksin, yoksa işletimini devralan bir tarafa mı bırakacaksın. İki seçenek burada tür olarak anılır — kendi işlettiğin küme ve işletimi devredilmiş küme — ve aynı kalemlerde karşılaştırılır.
Karar bu kursun ölçüsünün bir üst katmanıdır. Önceki dersler yerleştirme ve kopya sayısı kararını bir sisteme devretmenin bedelini saydı; bu ders o sistemin kendisinin işletimini devretmenin bedelini sayar. Sorular aynıdır: hangi kalemler devrediliyor, karşılığında hangi bilgi ve hangi denetim kaybediliyor, ve karar geri alınabilir mi.
Ölçüm yine bölgesel ölçüm ağı üzerindedir ve kurgudur; koşan şey node ile kurulmuş
modellerdir.
KM26. İşletim yirmi bir kalemle temsil edilir; her kalemin aylık saati, sorumlusu ve çıkışta yeniden kurulup kurulmayacağı yazılıdır. KM27. Paylaşılan kalemlerde saatin yarısı devralan tarafa geçer. KM28. Çıkışta yeniden kurulacak kalemlerin ilk kurulum yükü aylık saatin dört katıdır. KM29. Sürüm her dört ayda bir çıkar, desteği on iki ay sürer; koşum otuz altı aydır. KM30. Kendi işletimde yükseltme ekibin kapasitesine göre yapılır; devredilmiş işletimde destek bittiği ay yapılır ve takvim devralandadır. KM31. Yükseltme başına yük kendi işletimde 8 saat denetim düzlemi artı 7 saat düğüm, devredilmiş işletimde yalnız 7 saat düğümdür. KM32. Rapor gecikmesi ve başlama süresi önceki derslerden alınır: ortalama 13,53 ve en kötü 26,36 saniye, başlama süresi 5 saniye.
Aynı Kalemler, İki Sahip
// kalemler.mjs — kume isletiminin kalemleri. [ad, aylik saat, kim, cikista yeniden kurulur mu] // "kim" iki secenekte de ayni ada bakar: isletimi devralan taraf, paylasilan, ya da sen. export const KALEM = [ ["denetim duzlemi kurulumu", 6, "devralan", true], ["denetim duzlemi surum yukseltme", 8, "devralan", true], ["durum deposu yedekleme", 5, "devralan", true], ["durum deposu onarimi", 4, "devralan", true], ["arayuz sertifikalari", 2, "devralan", true], ["denetim duzlemi yedekliligi", 5, "devralan", true], ["denetim duzlemi olcut toplama", 3, "devralan", true], ["dugum hazirlama", 6, "paylasilan", false], ["dugum surum yukseltme", 7, "paylasilan", false], ["dugum isletim sistemi yamasi", 5, "paylasilan", false], ["kume olcekleme kurallari", 3, "paylasilan", false], ["ag yapilandirmasi", 4, "paylasilan", false], ["depolama baglama", 3, "paylasilan", false], ["olay mudahalesi", 6, "paylasilan", false], ["is yuku bildirimleri", 9, "sen", false], ["kaynak istekleri ve sinirlari", 5, "sen", false], ["yetki kurallari", 4, "sen", false], ["ag politikalari", 3, "sen", false], ["gozlem ve uyari", 8, "sen", false], ["surum yayma", 7, "sen", false], ["maliyet takibi", 3, "sen", false], ]; const PAY = 0.5; // paylasilan kalemde saatin yarisi devralan tarafa gecer if (import.meta.url === `file://${process.argv[1]}`) { const say = (k) => KALEM.filter(([, , x]) => x === k); const saat = (l) => l.reduce((t, [, s]) => t + s, 0); const toplam = saat(KALEM); const devir = saat(say("devralan")) + saat(say("paylasilan")) * PAY; console.log("kalem toplam devralan paylasilan sen"); console.log(`sayi ${String(KALEM.length).padStart(6)}${String(say("devralan").length).padStart(10)}` + `${String(say("paylasilan").length).padStart(12)}${String(say("sen").length).padStart(5)}`); console.log(`saat ${String(toplam).padStart(6)}${String(saat(say("devralan"))).padStart(10)}` + `${String(saat(say("paylasilan"))).padStart(12)}${String(saat(say("sen"))).padStart(5)}`); console.log(`\nkendi islettigin kume : kalem ${KALEM.length} aylik saat ${toplam}`); console.log(`isletimi devredilmis : kalem ${say("paylasilan").length + say("sen").length}` + ` aylik saat ${toplam - devir} devredilen ${devir} oran %${(100 * devir / toplam).toFixed(1)}`); const cikis = KALEM.filter(([, , , c]) => c); console.log(`cikis maliyeti : yeniden kurulacak kalem ${cikis.length}` + ` aylik saat ${saat(cikis)} ilk kurulum ${saat(cikis) * 4} saat (dort aylik es deger)`); }
kalem toplam devralan paylasilan sen sayi 21 7 7 7 saat 106 33 34 39 kendi islettigin kume : kalem 21 aylik saat 106 isletimi devredilmis : kalem 14 aylik saat 56 devredilen 50 oran %47.2 cikis maliyeti : yeniden kurulacak kalem 7 aylik saat 33 ilk kurulum 132 saat (dort aylik es deger)
Yirmi bir kalemin yedisi devredilir, yedisi paylaşılır, yedisi her durumda sende kalır. Saat tarafında devredilen pay aylık 106 saatin 50 saatidir — yüzde 47,2. Kalem sayısı 21’den 14’e, aylık yük 106 saatten 56 saate iner.
Bu tablonun en çok yanlış okunan yeri elde kalan sütunudur. Devir yarıya yakın bir azalma sağlıyor ama yarıdan fazlası duruyor: iş yükü bildirimleri, kaynak istekleri, yetki kuralları, ağ politikaları, gözlem, sürüm yayma ve maliyet takibi hiçbir devirde azalmaz, çünkü bunların hepsi kümenin değil senin uygulamanın kalemleridir. Devir kararı bu kalemlerin hiçbirine dokunmaz ve dokunduğunu sanmak devir sonrası ekip yükünün en sık yanlış tahmin edilen yeridir. Ölçüm ağının dört servisi ve gecelik toplu işi için yazılacak bildirim, kümeyi kimin işlettiğinden bağımsızdır.
Ortadaki yedi kalem — paylaşılan sütun — iki seçenekte de tam olarak kimseye ait değildir ve sürprizlerin çıktığı yer burasıdır. Düğüm hazırlama, düğüm sürüm yükseltme, ağ yapılandırması ve olay müdahalesi devirden sonra da yarı yarıya sende kalır; devir sözleşmesinde bu kalemlerin sınırı yazılı değilse, aylık 34 saatin hangi yarısının kime düştüğü ancak ilk olayda belli olur. Ölçüm ağında bunun karşılığı şudur: sayaç toplayıcının düğümü kapasitesi dolduğu için kopya alamıyorsa, sorunun kümede mi yoksa iş yükü bildiriminde mi olduğunu iki taraf ayrı ayrı arar.
Son satır kararın geri alınabilirliğini veriyor. Devredilen yedi kalem çıkışta yeniden kurulmak zorundadır; aylık 33 saatlik bakım yüküne karşılık ilk kurulumları 132 saattir. Çıkış maliyeti kalem sayısıyla ölçülür: yedi kalem, ve bu yedi kalemin hiçbiri gündelik işte görünmez, çünkü devredildikleri sürece kimse onlara bakmaz. Karar geri alınabilir, ama geri alma bedeli devir kararının verildiği gün ödenmeyen bedeldir.
Sürüm Yükseltme Penceresi
// pencere.mjs — 36 aylik surum yukseltme penceresi. Surum her 4 ayda cikar, destegi 12 ay surer. const AY = 36, ARALIK = 4, DESTEK = 12, SAAT_DUZLEM = 8, SAAT_DUGUM = 7; const sonSurum = (ay) => Math.floor(ay / ARALIK) * ARALIK; function kos({ ad, ekip, zorunlu }) { // ekip: kendi kapasiten (ay); zorunlu: devralanin let s = 0, yukseltme = 0, desteksiz = 0, enYasli = 0, saat = 0; for (let ay = 1; ay <= AY; ay++) { if (zorunlu ? ay === s + DESTEK : ay % ekip === 0 && sonSurum(ay) > s) { s = sonSurum(ay); yukseltme++; saat += zorunlu ? SAAT_DUGUM : SAAT_DUZLEM + SAAT_DUGUM; } const yas = ay - s; enYasli = Math.max(enYasli, yas); if (yas > DESTEK) desteksiz++; } return [ad, yukseltme, desteksiz, enYasli, saat, zorunlu ? "devralanda" : "sende"]; } const satir = (r) => console.log(`${String(r[0]).padEnd(27)}${String(r[1]).padStart(9)}` + `${String(r[2]).padStart(14)}${String(r[3]).padStart(14)}${String(r[4]).padStart(6)} ${r[5]}`); satir(["secenek", "yukseltme", "desteksiz ay", "en yasli (ay)", "saat", "takvim"]); for (const ekip of [4, 6, 12, 18, 24]) satir(kos({ ad: `kendi isletim (ekip ${ekip} ay)`, ekip })); satir(kos({ ad: "isletimi devredilmis", zorunlu: true }));
secenek yukseltme desteksiz ay en yasli (ay) saat takvim kendi isletim (ekip 4 ay) 9 0 3 135 sende kendi isletim (ekip 6 ay) 6 0 7 90 sende kendi isletim (ekip 12 ay) 3 0 11 45 sende kendi isletim (ekip 18 ay) 2 12 19 30 sende kendi isletim (ekip 24 ay) 1 11 23 15 sende isletimi devredilmis 3 0 11 21 devralanda
Altı satır aynı otuz altı ayı anlatıyor. Kendi işletimde yükseltme sıklığı ekibin kapasitesine bağlıdır ve sonuçları doğrusaldır: dört ayda bir yükselten ekip 9 yükseltme ve 135 saat harcar, sürüm hiç 3 aydan eski olmaz. On iki ayda bir yükselten ekip 3 yükseltme, 45 saat harcar ve sürüm en fazla 11 ay eskir. Bu iki satır arasında yanlış cevap yoktur; ikisi de bir tercihtir ve tercihi yapan taraf sensin.
Alt sınır beşinci ve altıncı satırlarda görünür. On sekiz ayda bir yükseltebilen bir ekip otuz altı ayın on ikisini desteksiz geçirir ve sürümü on dokuz aya kadar eskir. Kendi işletim takvimi sana verir, ama takvimi tutmak da senin işindir; tutulmayan takvim desteksiz aya dönüşür ve bunun kimseye bildirilen bir alarmı yoktur.
Devredilmiş satır ilginç bir yerde durur: 3 yükseltme, 0 desteksiz ay, en yaşlı sürüm 11 ay — yani on iki ayda bir yükselten ekiple aynı tazelik, ama 45 saat yerine 21 saat. Fark saatte değil son sütundadır. Yükseltmenin ne zaman olacağına karar veren taraf değişir. Ölçüm ağının faturalama dönemi ayın ilk haftasındadır ve gecelik toplu iş her gece 02:30’da başlar; zorunlu bir yükseltme penceresi bu iki takvimden birine denk gelirse, denk gelmemesi için yapılabilecek şey devralanla konuşmaktan ibarettir. Kendi işletimde aynı çakışma bir çizelgeleme sorunudur; devredilmiş işletimde bir görüşme konusudur ve iki farklı süreyle çözülür.
Denetim Düzlemine Erişimin Kaybı
// erisim.mjs — ayar ve gozlem kalemlerine erisim, ve bunun onceki derslerin bagintisina etkisi. const AYAR = [ // [kalem, kendi islettiginde, isletimi devredildiginde] ["bildirim periyodu (G'yi belirler)", "tam", "yok"], ["canlilik esigi", "tam", "yok"], ["dongu periyodu (U)", "tam", "yok"], ["vekil okuma periyodu", "tam", "kismen"], ["zamanlayici oncelikleri", "tam", "kismen"], ["arayuz denetim kaydi", "tam", "kismen"], ["durum deposunu dogrudan okuma", "tam", "yok"], ["denetim duzlemi kutugu", "tam", "kismen"], ["denetleyici yoneticisi olcutleri", "tam", "yok"], ["baslama suresi (B)", "tam", "tam"], ["istenen kopya sayisi", "tam", "tam"], ["dugum turu ve sayisi", "tam", "tam"], ]; const say = (i, d) => AYAR.filter((a) => a[i] === d).length; console.log("erisim tam kismen yok kalem"); for (const [i, ad] of [[1, "kendi islettigin"], [2, "isletimi devredilmis"]]) console.log(`${ad.padEnd(21)}${String(say(i, "tam")).padStart(3)}${String(say(i, "kismen")).padStart(8)}` + `${String(say(i, "yok")).padStart(5)}${String(AYAR.length).padStart(8)}`); // Onceki derste sinanan baginti: asim = istenen x (ceil((G+B)/U) - 1) const ISTENEN = 6, B = 5; const asim = (G, U) => ISTENEN * (Math.ceil((G + B) / U) - 1); console.log("\nolculen rapor gecikmesiyle asim (istenen 6 kopya, B=5 sn)"); console.log("G(sn) U secilebilir (35) U sabit (15) asimi sifirlayan B uygulanabilir mi"); for (const G of [13.53, 26.36]) { const gerekenB = 15 - G; console.log(`${G.toFixed(2).padStart(5)}${String(asim(G, 35)).padStart(20)}` + `${String(asim(G, 15)).padStart(15)}${gerekenB.toFixed(2).padStart(21)} sn` + `${(gerekenB > 0 ? "cok zor" : "olanaksiz").padStart(17)}`); }
erisim tam kismen yok kalem kendi islettigin 12 0 0 12 isletimi devredilmis 3 4 5 12 olculen rapor gecikmesiyle asim (istenen 6 kopya, B=5 sn) G(sn) U secilebilir (35) U sabit (15) asimi sifirlayan B uygulanabilir mi 13.53 0 6 1.47 sn cok zor 26.36 0 12 -11.36 sn olanaksiz
Üst tablo kaybın büyüklüğünü veriyor: on iki ayar ve gözlem kaleminin kendi işlettiğin kümede hepsi tam erişilebilirken, işletimi devredilmiş kümede yalnız üçü tam erişilebilir; dördü kısmen, beşi hiç. Erişilemeyen beş kalem tesadüfen seçilmiş değildir — bu konunun üç dersinde ölçtüğümüz kalemlerdir: bildirim periyodu, canlılık eşiği, döngü periyodu, durum deposunun doğrudan okunması ve denetleyici yöneticisinin ölçütleri.
Alt tablo bunun sonucunu sayıya çeviriyor. Bir önceki ders aşımın istenen × (⌈(G+B)/U⌉ − 1)
olduğunu elli altı hücrede sınamıştı. Ölçülen rapor gecikmesiyle — ortalama 13,53, en kötü 26,36
saniye — döngü periyodu seçilebilir olduğunda 35 saniyeye çekilir ve aşım her iki durumda da
sıfırdır. Döngü periyodu devralanın varsayılanında sabitlendiğinde aşım ortalama gecikmede 6,
en kötü gecikmede 12 olur.
Elde kalan tek kaldıraç başlama süresidir ve son iki sütun onun da yetmediğini gösteriyor: aşımı sıfırlamak için başlama süresinin 1,47 saniyeye inmesi gerekir, en kötü gecikmede ise gereken değer eksi 11,36 saniyedir — olanaksız. Devir burada bir saat kalemi devretmedi; bir önceki dersin bulduğu ayarı elden aldı.
Kaybın gözlem tarafı ayarlardan daha sessizdir. Bu konunun ikinci dersi tek bir isteğin izini çıkarmış, dört bileşenden geçtiğini ve 50 kalem okuma ile 7 yazma ürettiğini saymıştı. O ölçüm durum deposunun doğrudan okunmasını gerektirir. Erişim kalkınca ölçüm de kalkar: bir isteğin niye uygulanmadığı sorusu artık düzlemin içinden değil, dışarıdan — sonuçlara bakarak — yanıtlanır. Sonuçlara bakmak yanlış cevap vermez, geç cevap verir; bir önceki dersin salınımı da tam olarak böyle bir şeydir, yani sonuçta doğru sayıya yakınsayan ve yolda görünmeyen bir hata.
Ayrım şudur: devredilen kalemlerin çoğu iştir ve devredilince yük azalır. Ama bazıları bilgi ve denetimdir; devredilince yük azalmaz, yalnız kimin elinde olduğu değişir. İkinci sınıfın maliyeti aylık saatte değil, bir sorun çıktığında elinde kalan seçenek sayısında görünür.
Karar bu yüzden tek yönlü değildir. Kazanılan 50 saat, sekiz kişilik bir ekipte ayda kişi başına altı saatten azdır ve kaybedilen beş ayar kaleminin hiçbirine ihtiyaç duyulmayan bir kurulumda bu takas açık ara kazançlıdır. Aynı takas, gecikmeye duyarlı bir iş yükünde — döngü periyodunu ayarlaması gereken bir kümede — 50 saat karşılığında kapatılamayan bir salınım satın alır. Ölçülmesi gereken şey saat değil, hangi kalemlerin sende kalması gerektiğidir; bu liste kurulumdan kuruluma değişir ve devir sözleşmesi imzalanmadan önce yazılmadıysa sonradan yazılamaz.
Özet
- Yirmi bir işletim kaleminin 7’si devredilir, 7’si paylaşılır, 7’si her durumda sende kalır; aylık 106 saatin 50’si (yüzde 47,2) devredilir ve kalem sayısı 21’den 14’e iner.
- Elde kalan kalemler kümenin değil uygulamanın kalemleridir — bildirimler, kaynak istekleri, yetki, ağ politikası, gözlem, sürüm yayma — ve hiçbir devirle azalmaz.
- Çıkış maliyeti 7 kalemdir: aylık 33 saatlik bakım yükü, 132 saatlik yeniden kurulum; devir sürdükçe bu kalemler kimsenin bakmadığı kalemlerdir.
- Otuz altı ayda devredilmiş işletim 3 yükseltme, 0 desteksiz ay ve 11 aylık en yaşlı sürüm verdi; aynı tazeliği kendi işletimle tutmak 45 saat sürerken devredilmişte 21 saat sürdü, fakat takvim devralana geçti.
- Kendi işletimde takvim sende kalır ama tutulmayan takvim bedel yazar: 18 aylık kapasiteyle otuz altı ayın 12’si desteksiz geçti ve sürüm 19 aya kadar eskidi.
- On iki ayar ve gözlem kaleminin devredilmiş kümede yalnız 3’ü tam erişilebilir; erişilemeyen 5 kalem bu konunun ölçtüğü kalemlerdir ve döngü periyodu sabitlenince aşım 0 yerine 6 (en kötü gecikmede 12) olur, elde kalan tek kaldıraç ise olanaksız bir başlama süresi ister.
Sonraki Adım
Bu konu boyunca kümenin ne olduğu, hangi parçalardan kurulduğu, o parçaların ne bildirdiği, döngünün nasıl uzlaştığı ve kimin işlettiği ölçüldü. Bir şey hiç tanımlanmadı: uzlaştırılan şeyin kendisi. Dört derste “istenen kopya sayısı”, “yerleştirme kısıtı”, “servis” gibi kalemler geçti ve hepsi modelin kendi küçük şemasında birer alan olarak durdu. Kümeye gerçekte ne bildirildiği — bir iş yükünün en küçük dağıtım biriminin ne olduğu, kopyaların hangi nesneyle sayıldığı, bir adın hangi kopyalara çözüldüğü, yapılandırmanın ve sırların nereye yazıldığı — hiç tanımlanmadı. Bir sonraki konu bu nesneleri kurar ve her birini aynı ölçüyle sınar: bu nesne hangi kararı taşıyor, taşıması için hangi bilgiyi istiyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.