Ders 01 / 30
Orkestrasyon İhtiyacı
Elle yönetim makine ve servis sayısıyla taranır: karar sayısı doğrusal büyürken karar başına bakılan bilgi çarpım olarak büyüyor, arıza fark etme gecikmesi tur süresine bağlanıyor. Devretmenin eşiği gün cinsinden hesaplanır ve kararın dayandığı altı bilgi kaleminden biri yazılmadığında sistemin kaç kopyayı yanlış yerleştirdiği sayılır.
İçindekiler
Bir önceki kursun bütün ölçümleri tek makinede yapıldı: çıktı taşınabilir oldu, kimliği içeriğinden türedi, yalıtımı ve yetkisi kalem kalem sayıldı. Geriye tek bir soru kaldı — o çıktının kaç kopya, hangi makinede ve ne zaman çalışacağına karar veren hâlâ bir insandı. Bu ders o kararın kendisini ölçer: elle verildiğinde ölçekle nasıl büyüyor, bir sisteme devredildiğinde o sistemin neyi bilmesi gerekiyor, ve devretmenin kazandırmadığı durum nerede duruyor.
Orkestrasyon, birden çok makine üzerinde çalışan iş yüklerinin yerleştirme, kopya sayısı ve arıza sonrası yeniden başlatma kararlarını bir sisteme devretme işidir. Bu kursun ölçü birimi devrin bedelidir: her devredilen karar, o kararın dayandığı bilgiyi sürekli ve zamanında üretmeyi gerektirir.
Ölçüm yine bölgesel ölçüm ağı üzerindedir: su sayacı okumalarını toplayan, doğrulayan,
faturalayan ve saha iş emri açan kurgu yazılım; gecelik toplu iş de aynı ağın parçasıdır.
Burada koşan şey gerçek bir küme değil, node ile kurulmuş bir modeldir; sayılar modelin
sayılarıdır ve modelin varsayımları aşağıda yazılıdır.
KM1. Ağ dört servisten oluşur ve her servisin üç kopyası vardır; makine sayısı ve servis
sayısı ayrı ayrı taranır.
KM2. Elle adım maliyeti sabittir: bir kopyayı yerleştirmek 4 adım, bir makineyi hazırlamak 6
adım, bir kopyayı gözle denetlemek 20 saniye.
KM3. Arızalar kendi yazdığımız 32 bitlik üreteçten gelir; tohum 20260401 çıktıda görünür,
kopya başına günlük arıza olasılığı 0,15’tir.
KM4. İnsan kopyaları sırayla denetleyerek tur atar; iki senaryo koşulur — kesintisiz nöbet ve
sekiz saatlik tek vardiya.
KM5. Devredilmiş yönetimde makine başına hazırlık 6 yerine 9 adımdır (aracı süreç de kurulur),
bildirim periyodu 10 saniye, uzlaşma periyodu 15 saniyedir.
KM6. Yerleştirme kısıtı gerçektir: toplayıcı kopyaları yalnız sayaç ağına fiziksel bağlantısı
olan makinelerde koşabilir; on altı makinenin dördü böyledir.
Elle Yönetim İki Ayrı Hızda Büyür
// olcek.mjs — elle yonetimin makine ve servis sayisiyla taranmasi. Bu bir modeldir; gercek // kume kosturulmaz. Zaman saniye, "adim" bir insan islemidir. export const uretec = (tohum) => { let s = tohum >>> 0; // kendi uretecimiz: 32 bit, tohum gorunur return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; }; const A_KOPYA = 4, A_MAKINE = 6, D_SURE = 20, GUN = 86400, VARDIYA = 8 * 3600; export function elle({ M, S, r, arizaOrani, tohum, kesintisiz }) { const N = S * r, rnd = uretec(tohum), T = N * D_SURE; // T: bir denetim turunun suresi const arizalar = []; for (let i = 0; i < N; i++) if (rnd() < arizaOrani) arizalar.push({ i, t: rnd() * GUN }); let gecikme = 0; for (const a of arizalar) { let t = a.t; if (!kesintisiz && t % GUN >= VARDIYA) t = Math.floor(t / GUN) * GUN + GUN; // vardiya disi const yer = a.i * D_SURE; // kopyanin tur icindeki sirasi let d = Math.ceil((t - yer) / T) * T + yer; if (d < t) d += T; if (!kesintisiz && d % GUN >= VARDIYA) d = Math.floor(d / GUN) * GUN + GUN + yer; gecikme += d - a.t; } const karar = N + S + arizalar.length; // yerlestirme + kac kopya + yeniden yer return { N, karar, bakis: (N + arizalar.length) * M, turSuresi: T, adim: A_MAKINE * M + A_KOPYA * N + A_KOPYA * arizalar.length, ariza: arizalar.length, ortGecikme: arizalar.length ? gecikme / arizalar.length : 0 }; } if (import.meta.url === `file://${process.argv[1]}`) { // ikinci blok bu dosyayi ice aktarir console.log("M S kopya karar bakis adim tur(dk) ariza gecikme(dk) gecikme-tek-vardiya"); for (const [M, S] of [[1,4],[2,4],[4,6],[8,8],[16,12],[32,16]]) { const g = { M, S, r: 3, arizaOrani: 0.15, tohum: 20260401 }; const k = elle({ ...g, kesintisiz: true }), v = elle({ ...g, kesintisiz: false }); console.log(`${String(M).padStart(2)} ${String(S).padStart(2)} ${String(k.N).padStart(6)}` + `${String(k.karar).padStart(7)}${String(k.bakis).padStart(7)}${String(k.adim).padStart(6)}` + `${(k.turSuresi/60).toFixed(1).padStart(9)}${String(k.ariza).padStart(7)}` + `${(k.ortGecikme/60).toFixed(1).padStart(13)}${(v.ortGecikme/60).toFixed(1).padStart(21)}`); } }
M S kopya karar bakis adim tur(dk) ariza gecikme(dk) gecikme-tek-vardiya 1 4 12 21 17 74 4.0 5 1.2 394.8 2 4 12 21 34 80 4.0 5 1.2 394.8 4 6 18 29 92 116 6.0 5 2.4 394.8 8 8 24 38 240 168 8.0 6 3.6 330.2 16 12 36 56 704 272 12.0 8 6.5 363.5 32 16 48 74 1856 424 16.0 10 7.7 324.5
İki sütun iki ayrı hızda büyüyor. Karar sayısı doğrusaldır: 21’den 74’e, üç buçuk kat. Elle adım da doğrusaldır: 74’ten 424’e. Bu iki sayıya bakan biri elle yönetimin ölçekle sorunsuz büyüdüğü sonucuna varabilir, çünkü kopya sayısı da tam olarak dört kat arttı.
Bakış sütunu aynı ölçekte 17’den 1856’ya çıkıyor — yüz dokuz kat. Bakış, bir yerleştirme kararını verirken kaç makinenin durumuna bakıldığıdır. Karar sayısı kopya sayısıyla, karar başına bakılan bilgi makine sayısıyla büyür; ikisinin çarpımı karar sayısının kendisiyle aynı hızda büyümez. Elle yönetimin pahalıya çıktığı yer karar sayısı değil, her kararın altındaki bilgi toplama işidir.
Üçüncü ölçü fark etme gecikmesidir. Kesintisiz nöbette gecikme 1,2 dakikadan 7,7 dakikaya çıkıyor ve doğrusal görünüyor: bir denetim turu kopya sayısıyla uzuyor, ortalama bekleme turun yarısı kadar oluyor. Tek vardiya sütunu ise bambaşka bir şey söylüyor — 394,8’den 324,5 dakikaya, yani ölçekle büyümüyor, hatta düşüyor. Bu bir hesap hatası değil, baskın terimin değişmesidir: tek vardiyada gecikmenin kaynağı tur süresi değil, gecenin kendisidir. Ölçüm ağının gecelik toplu işi 02:30’da başlar; o sırada düşen bir toplayıcı kopyası vardiya açılana kadar düşük kalır ve kopya sayısını artırmak bu bekleyişi uzatmaz.
Devretmenin Eşiği
// esik.mjs — elle yonetim ile devredilmis yonetimin ayni kalemlerde karsilastirilmasi. import { elle, uretec } from "./olcek.mjs"; const KURULUM = 120, BILDIRIM = 9, A_DUGUM = 9, A_KOPYA = 4, GUN = 86400; const P = 10, U = 15; // bildirim ve uzlasma periyodu (saniye) function devredilmis({ M, S, r, arizaOrani, tohum }) { const N = S * r, rnd = uretec(tohum), arizalar = []; for (let i = 0; i < N; i++) if (rnd() < arizaOrani) arizalar.push({ i, t: rnd() * GUN }); let g = 0; for (const a of arizalar) g += Math.ceil(Math.ceil(a.t / P) * P / U) * U - a.t; return { kurulum: KURULUM + BILDIRIM * S + A_DUGUM * M, ariza: arizalar.length, ortGecikme: arizalar.length ? g / arizalar.length : 0 }; } console.log("kopya elle-kur elle/gun devir-kur esik(gun) elle-gecikme(dk) devir-gec(sn)"); for (const [M, S] of [[1,2],[2,4],[4,6],[8,8],[16,12],[32,16]]) { const g = { M, S, r: 3, arizaOrani: 0.15, tohum: 20260401 }; const e = elle({ ...g, kesintisiz: true }), d = devredilmis(g); const eKur = e.adim - A_KOPYA * e.ariza, eGun = A_KOPYA * e.ariza; console.log(`${String(e.N).padStart(5)}${String(eKur).padStart(10)}${String(eGun).padStart(10)}` + `${String(d.kurulum).padStart(11)}${Math.ceil((d.kurulum - eKur) / eGun).toString().padStart(11)}` + `${(e.ortGecikme/60).toFixed(1).padStart(18)}${d.ortGecikme.toFixed(1).padStart(15)}`); } console.log("\nariza orani ariza/gun elle/gun devir-kur esik(gun) [M=8, S=8, 24 kopya]"); for (const o of [0, 0.02, 0.05, 0.10, 0.15, 0.30]) { const g = { M: 8, S: 8, r: 3, arizaOrani: o, tohum: 20260401 }; const e = elle({ ...g, kesintisiz: true }), d = devredilmis(g); const eKur = e.adim - A_KOPYA * e.ariza, eGun = A_KOPYA * e.ariza; console.log(`${o.toFixed(2).padStart(11)}${String(e.ariza).padStart(11)}` + `${String(eGun).padStart(10)}${String(d.kurulum).padStart(11)}` + `${(eGun ? String(Math.ceil((d.kurulum - eKur) / eGun)) : "sonsuz").padStart(11)}`); } // Bilinmeyen kisit: toplayici kopyalari yalniz sayac agina bagli makinelerde kosabilir. const makine = Array.from({ length: 16 }, (_, i) => ({ ad: i, sayacAgi: i % 5 === 0 })); const kopyalar = [...Array(6).fill("toplayici"), ...Array(4).fill("dogrulayici"), ...Array(3).fill("faturalama"), ...Array(3).fill("is-emri")]; for (const yazili of [false, true]) { const yuk = makine.map(() => 0), yer = []; for (const k of kopyalar) { const uygun = makine.filter((m) => !(yazili && k === "toplayici") || m.sayacAgi); const s = uygun.reduce((a, b) => (yuk[a.ad] <= yuk[b.ad] ? a : b)); yuk[s.ad]++; yer.push({ k, m: s }); } const yanlis = yer.filter((y) => y.k === "toplayici" && !y.m.sayacAgi).length; console.log(`kisit bildirimde ${yazili ? "yazili " : "yazisiz"}: kopya ${yer.length}` + ` yanlis yerlestirme ${yanlis} duzeltme adimi ${yanlis * A_KOPYA}` + ` bildirim kalemi ${yazili ? 5 : 4}`); }
kopya elle-kur elle/gun devir-kur esik(gun) elle-gecikme(dk) devir-gec(sn)
6 30 4 147 30 1.0 2.0
12 60 20 174 6 1.2 8.1
18 96 20 210 6 2.4 8.1
24 144 24 264 5 3.6 8.7
36 240 32 372 5 6.5 9.1
48 384 40 552 5 7.7 8.0
ariza orani ariza/gun elle/gun devir-kur esik(gun) [M=8, S=8, 24 kopya]
0.00 0 0 264 sonsuz
0.02 2 8 264 15
0.05 3 12 264 10
0.10 6 24 264 5
0.15 6 24 264 5
0.30 10 40 264 3
kisit bildirimde yazisiz: kopya 16 yanlis yerlestirme 4 duzeltme adimi 16 bildirim kalemi 4
kisit bildirimde yazili : kopya 16 yanlis yerlestirme 0 duzeltme adimi 0 bildirim kalemi 5
Devretmenin kurulum maliyeti her ölçekte elle kurulumdan yüksektir: 6 kopyada 147’ye karşı 30 adım, 48 kopyada 552’ye karşı 384. Devretme ilk gün her zaman zarardır. Fark günlük kalemde ortaya çıkar: elle yönetimde arızalar her gün elle karşılanır, devredilmiş yönetimde günlük elle adım sıfırdır. Eşik sütunu iki maliyetin kesiştiği günü verir.
Bu eşik ölçekle hızla düşüyor. Altı kopyalı bir kurulumda elle yönetim otuz gün boyunca daha ucuzdur; on iki kopyada altı güne, yirmi dördün üstünde beş güne iner. Otuz gün, tek servisli bir deneme ortamı ya da bir aylık bir pilot için gerçek bir cevaptır — o ölçekte devretmek gereksiz iştir. Beş gün ise cevap değildir; ölçüm ağının dört servisi ve on iki kopyası, kararı devretmenin bir hafta içinde kendini ödediği bölgededir.
Gecikme sütunları eşikten daha keskin bir ayrım gösteriyor: elle yönetimde 1,2–7,7 dakika, devredilmiş yönetimde 2,0–9,1 saniye. Devredilmiş yönetimde bu sayı ölçekle büyümüyor, çünkü gecikmenin kaynağı tarama değil, iki sabit periyottur — bildirim periyodu ve uzlaşma periyodu. Ölçek büyüdükçe elle yönetimin kaybı adım sayısında değil, burada birikiyor.
Sistemin Bilmesi Gereken Altı Kalem
Devredilen karar tek cümleyle yazılabilir: hangi kopya hangi makinede çalışacak, ve düştüğünde ne olacak. Sistemin bu kararı verebilmesi için sürekli bilmesi gereken kalemler şunlardır.
| Bilgi kalemi | Kaynağı | Eskirse |
|---|---|---|
| makine listesi | düğüm kaydı | olmayan makineye yerleştirme |
| makine kapasitesi | düğüm bildirimi | kapasitesi dolu makineye yerleştirme |
| makine sağlığı | düzenli bildirim | ölü makinede kopya sanma |
| istenen kopya sayısı | insanın yazdığı bildirim | eksik ya da fazla kopya |
| kopyaların gerçek durumu | düğümden bildirim | düşen kopyayı geç fark etme |
| yerleştirme kısıtları | insanın yazdığı bildirim | çalışamayacak makineye yerleştirme |
Altı kalemin dördü sistemin kendi topladığı ölçümdür; ikisi insanın yazması gerekendir. Bu ayrım maliyetin de ayrımıdır. Toplanan dört kalem sürekli bir bildirim yükü doğurur: her makine her periyotta kapasitesini, sağlığını ve üzerindeki kopyaların durumunu bildirmek zorundadır, ve devredilmiş yönetimin dokuz saniyelik fark etme gecikmesi tam olarak bu periyodun bedelidir. Periyodu büyütmek yükü azaltır, gecikmeyi büyütür. Yazılan iki kalem ise tek seferliktir ama bakımsız kalırsa sessizce yanlışlanır — istenen kopya sayısı bir kez yazılıp unutulduğunda sistem hâlâ o sayıya doğru çalışır ve kimse ondan şüphelenmez.
Son satırın bedeli çıktının son iki satırında duruyor. Kısıt bildirimde yazılı değilken yerleştirici altı toplayıcı kopyasının dördünü sayaç ağı olmayan makinelere koydu; o dört kopya başlar ama okuma çekemez. Kısıt bildirime eklendiğinde yanlış yerleştirme sıfıra indi ve bildirimin kalem sayısı dörtten beşe çıktı. Bir kalemlik yazı, dört yanlış yerleştirmeyi önledi — devrin bedeli tam olarak budur ve peşin ödenir.
Devretmenin Kazandırmadığı Üç Durum
Birincisi eşiğin altıdır: altı kopyalı bir kurulumda devretme otuz gün boyunca zarardır ve o kurulum otuz gün yaşamayacaksa hiç kazanmaz.
İkincisi arıza oranının düşüklüğüdür ve ikinci tarama bunu sayıyla veriyor. Yirmi dört kopyalı aynı kurulumda arıza oranı 0,30 iken eşik üç gündür; 0,05’te on güne, 0,02’de on beş güne çıkar ve oran sıfırlandığında sonsuz olur — hiç arıza olmayan bir kurulumda devretmenin geri ödemesi yoktur. Kararı devretmek arızayı ucuzlatır, arızasızlığı değil; kazancın tamamı arıza kaleminden gelir ve o kalem küçüldükçe kazanç da küçülür.
Üçüncüsü ve en pahalısı, kararın dayandığı bilginin yazılabilir olmamasıdır. Kısıt deneyi bunun kolay hâliydi: kısıt bir satırda yazılabiliyordu. Yazılamayan kısıtlar da vardır — bir makinenin saha ekibince fiziksel olarak erişilebilir olması, bir servisin belirli bir müşteriyle yapılmış sözleşme gereği belirli bir binada durması. Bu kalemler bildirime girmediği sürece sistem onlardan habersizdir ve habersiz olduğu her kalem bir yanlış karar sınıfı üretir. Elle yönetimde bu bilgi insanın kafasında durur ve hiçbir maliyeti yokmuş gibi görünür; devredildiğinde ilk kez bir bedel olarak ortaya çıkar. Devretme kararı bu yüzden bir ölçek kararı olduğu kadar bir yazılabilirlik kararıdır: kararı besleyen bilginin ne kadarı bir dosyaya girebiliyor.
Özet
- Elle yönetimde karar sayısı doğrusal büyüdü (21 → 74), karar başına bakılan bilgi çarpım olarak büyüdü (17 → 1856); pahalı olan karar değil, kararın altındaki bilgi toplama işiydi.
- Arıza fark etme gecikmesi kesintisiz nöbette tur süresiyle doğrusal büyüdü (1,2 → 7,7 dakika); tek vardiyada 325–395 dakikada kaldı ve ölçekten bağımsızdı, çünkü baskın terim gecenin kendisiydi.
- Devretme ilk gün her ölçekte zarardır; eşik 6 kopyada 30 gün, 12 kopyada 6 gün, 24 kopyanın üstünde 5 gündür.
- Devredilmiş yönetimde fark etme gecikmesi 2–9 saniyede kaldı ve ölçekle büyümedi; kaynağı tarama değil, iki sabit periyottu.
- Yerleştirme kararı altı bilgi kalemine dayanır; kısıt kalemi yazılmadığında altı toplayıcı kopyasının dördü çalışamayacağı makineye yerleştirildi, bir kalemlik yazı bunu sıfıra indirdi.
Sonraki Adım
Kararı devretmek için karşılığında bir sistem gerekiyor ve o sistemin altı bilgi kalemini toplayıp saklaması, kararı üretmesi ve sonucu uygulaması lazım. Bu işlerin hepsi tek bir parçada durmaz. Bir sonraki ders kararı üstlenen tarafı — denetim düzlemini — parçalarına ayırır: küme arayüzü, zamanlayıcı, denetleyici yöneticisi ve durum deposu. Ölçülecek şey bir isteğin uçtan uca kaç bileşenden geçtiği, her bileşenin hangi bilgiyi okuyup yazdığı, ve bir bileşen düştüğünde hangi kararların durup hangilerinin sürdüğüdür.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.