Ders 02 / 10
Hizmet Modelleri
Altyapı, platform ve yazılım hizmetinin ölçüsü: 26 kararlık bir kümede devredilen kararın 5'ten 23'e ve 25'e çıkması, elde kalan yıllık karar dokunuşunun 91'den 82, 19 ve 4'e inmesi, devredilenlerin parametreyle geri alınabilen oranının %40'tan %39 ve %12'ye düşmesi, altı gereksinim isteğinin 6, 5, 4 ve 1'inin karşılanabilmesi, çıkışta taşınan karar oranının %100'den %92, %69 ve %35'e inmesi.
İçindekiler
Önceki ders tek bir şeyi kiraladı — kapasiteyi — ve üç karar devretti. Ama kiralamanın derinliği sabit değildir. Yalnız makineyi kiralamakla makineyi, üstündeki çalışma zamanını ve onun ölçekleme davranışını birlikte kiralamak aynı şey değildir; ikisi arasında kaç kararın elden çıktığı farkı vardır. Bu ders o farkı kalem kalem sayar.
Kiralamanın derinliği üç hizmet modeli olarak adlandırılır. Altyapı hizmeti makineyi, depoyu ve ağı kiralar; üstündeki her şey müşteride kalır. Platform hizmeti çalışma zamanını da kiralar; müşteri kodunu ve yapılandırmasını verir. Yazılım hizmeti işin kendisini kiralar; müşteri yalnız veri ve erişim kararlarını verir. Bu üç tanım karar taşımaz — taşıyan şey, aynı karar kümesinin üç modelde nasıl bölündüğüdür.
Karar Kümesi
Örnek, kursun kurgu bölgesel ölçüm ağıdır: su sayacı okuma toplayıcı, doğrulayıcı, faturalama ve iş emri servisleri, gecelik toplu iş ve beş ekip. Ağ da servisler de kurgudur; aşağıdaki karar kümesi ve hizmet modelleri bir modeldir, gerçek bir hizmet kataloğu ya da ayar listesi yoktur.
BK7: okuma toplayıcı servisini ayakta tutmak için verilmesi gereken kararlar on alanda 26
kaleme ayrılır. BK8: bir karar bir modelde ya elde kalır (E) ya devredilir; devredilen
kararın geri alınabilirliği üç sınıftır — parametreyle geri alınır (P), sözleşme penceresi
bekler (S), hizmete gömülüdür (G). BK9: her kararın yılda kaç kez dokunulduğu sabittir.
BK10: bir gereksinim isteği E ise aynı gün, P ise 1 günde, S ise 30 günde karşılanır;
G ise hiç karşılanamaz. Bu süreler kurgudur. BK11: elde kalan her karar dokunuşu bir işletim
kalemi üretir. BK12: çıkışta devredilmiş her karar yeniden verilir; G sınıfı olanlar ayrıca
yerine yeni bir çözüm ister.
// bulut/karar.mjs — kurgu olcum agi icin karar kumesi ve uc hizmet modeli (model): gercek bir // hizmet katalogu, gercek bir ayar listesi ya da gercek bir sozlesme yok. Rastgelelik yok. export const MODEL = ["kendi", "altyapi", "platform", "yazilim"]; // hucre: E elde kalir, P parametreyle geri alinir, S sozlesme penceresi bekler, G hizmete gomulu export const PENCERE = { E: 0, P: 1, S: 30 }; // istegin karsilanma suresi (kurgu gun) export const KARAR = ` donanim makine-modeli E P G G 2 donanim disk-turu E P G G 2 donanim ariza-degistirme E G G G 3 yerlesim fiziksel-yerlesim E S S G 1 yerlesim guc-ve-sogutma E G G G 1 isletim-sistemi dagitim-secimi E E G G 1 isletim-sistemi surum E E G G 2 yama guvenlik-yamasi E E G G 12 yama yeniden-baslatma E E S G 6 calisma-zamani dil-surumu E E P G 3 calisma-zamani kutuphane-surumu E E E G 9 calisma-zamani derleme-secenegi E E S G 2 olcekleme esik E E P G 4 olcekleme en-az-en-cok E E P S 4 olcekleme bicim E E G G 1 yedekleme siklik E E P S 2 yedekleme saklama-suresi E E P S 2 yedekleme geri-yukleme-provasi E E S G 2 izleme olcut-kumesi E E P S 6 izleme uyari-esigi E E E P 6 ag adres-plani E E S G 1 ag guvenlik-kurali E E P S 9 ag disari-cikis-yolu E E S G 2 kimlik kullanici-dizini E E P P 1 kimlik yetki-modeli E E E E 4 kimlik oturum-suresi E E P P 3` .trim().split("\n").map((r) => { const [alan, karar, ...k] = r.trim().split(/\s+/); return { alan, karar, dokunma: +k[4], d: Object.fromEntries(MODEL.map((m, i) => [m, k[i]])) }; }); export const ALAN = [...new Set(KARAR.map((k) => k.alan))]; export const say = (m, ...h) => KARAR.filter((k) => h.includes(k.d[m])).length; export const dokunus = (m) => KARAR.filter((k) => k.d[m] === "E") .reduce((a, k) => a + k.dokunma, 0); // Alti gereksinim istegi: her biri tek bir karara dokunur. export const ISTEK = [ ["calisma zamani surumu yukseltilsin", "dil-surumu"], ["olcekleme esigi dusurulsun", "esik"], ["yedek saklama suresi uzatilsin", "saklama-suresi"], ["disari cikis yolu degistirilsin", "disari-cikis-yolu"], ["isletim sistemi surumu sabitlensin", "surum"], ["ariza degistirme suresi kisaltilsin", "ariza-degistirme"], ].map(([ad, karar]) => ({ ad, karar, hucre: KARAR.find((k) => k.karar === karar).d }));
// bulut/olc.mjs — uc hizmet modelinde kac karar devrediliyor, kaci geri alinabiliyor. import { KARAR, MODEL, ALAN, ISTEK, PENCERE, say, dokunus } from "./karar.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 AD = { kendi: "kendi don.", altyapi: "altyapi", platform: "platform", yazilim: "yazilim" }; console.log(`karar kumesi: ${KARAR.length} karar, ${ALAN.length} alan; ` + `yilda toplam ${KARAR.reduce((a, k) => a + k.dokunma, 0)} karar dokunusu`); const A = [-18, 12, 10, 11, 10]; console.log("\n1. alan basina elde kalan karar (alandaki karar sayisi / elde kalan)"); yaz(A, "alan", ...MODEL.map((m) => AD[m])); for (const a of ALAN) { const g = KARAR.filter((k) => k.alan === a); yaz(A, a, ...MODEL.map((m) => `${g.length} / ${g.filter((k) => k.d[m] === "E").length}`)); } const B = [-30, 12, 10, 11, 10]; console.log("\n2. devredilen karar ve geri alinabilirligi"); yaz(B, "olcu", ...MODEL.map((m) => AD[m])); for (const [ad, f] of [ ["elde kalan karar", (m) => say(m, "E")], ["devredilen karar", (m) => say(m, "P", "S", "G")], [" parametreyle geri alinir", (m) => say(m, "P")], [" sozlesme penceresi bekler", (m) => say(m, "S")], [" hizmete gomulu", (m) => say(m, "G")], ["geri alinabilen / devredilen", (m) => `${say(m, "P")}/${say(m, "P", "S", "G")}`], ["elde kalan yillik dokunus", (m) => dokunus(m)], ["devir basina kalkan dokunus", (m) => (say(m, "P", "S", "G") ? (dokunus("kendi") - dokunus(m)) / say(m, "P", "S", "G") : 0) .toFixed(1)]]) yaz(B, ad, ...MODEL.map(f)); const C = [-36, 12, 10, 11, 10]; console.log("\n3. alti gereksinim istegi karsilanabiliyor mu (kurgu gun; - = karsilanamaz)"); yaz(C, "istek", ...MODEL.map((m) => AD[m])); const sure = (h) => (h === "G" ? "-" : PENCERE[h]); for (const i of ISTEK) yaz(C, i.ad, ...MODEL.map((m) => sure(i.hucre[m]))); yaz(C, "karsilanan istek (6 uzerinden)", ...MODEL.map((m) => ISTEK.filter((i) => i.hucre[m] !== "G").length)); yaz(C, "karsilananlarin toplam beklemesi", ...MODEL.map((m) => ISTEK.filter((i) => i.hucre[m] !== "G") .reduce((a, i) => a + PENCERE[i.hucre[m]], 0))); const D = [-34, 12, 10, 11, 10]; console.log("\n4. cikista ne yeniden verilir"); yaz(D, "olcu", ...MODEL.map((m) => AD[m])); for (const [ad, f] of [ ["yeniden verilecek karar", (m) => say(m, "P", "S", "G")], [" yerine yeni cozum ister (gomulu)", (m) => say(m, "G")], [" ayni ayarla tasinir", (m) => say(m, "P", "S")], ["tasinan karar orani (%)", (m) => Math.round((say(m, "E", "P", "S") / KARAR.length) * 100)]]) yaz(D, ad, ...MODEL.map(f));
karar kumesi: 26 karar, 10 alan; yilda toplam 91 karar dokunusu 1. alan basina elde kalan karar (alandaki karar sayisi / elde kalan) alan kendi don. altyapi platform yazilim donanim 3 / 3 3 / 0 3 / 0 3 / 0 yerlesim 2 / 2 2 / 0 2 / 0 2 / 0 isletim-sistemi 2 / 2 2 / 2 2 / 0 2 / 0 yama 2 / 2 2 / 2 2 / 0 2 / 0 calisma-zamani 3 / 3 3 / 3 3 / 1 3 / 0 olcekleme 3 / 3 3 / 3 3 / 0 3 / 0 yedekleme 3 / 3 3 / 3 3 / 0 3 / 0 izleme 2 / 2 2 / 2 2 / 1 2 / 0 ag 3 / 3 3 / 3 3 / 0 3 / 0 kimlik 3 / 3 3 / 3 3 / 1 3 / 1 2. devredilen karar ve geri alinabilirligi olcu kendi don. altyapi platform yazilim elde kalan karar 26 21 3 1 devredilen karar 0 5 23 25 parametreyle geri alinir 0 2 9 3 sozlesme penceresi bekler 0 1 6 5 hizmete gomulu 0 2 8 17 geri alinabilen / devredilen 0/0 2/5 9/23 3/25 elde kalan yillik dokunus 91 82 19 4 devir basina kalkan dokunus 0.0 1.8 3.1 3.5 3. alti gereksinim istegi karsilanabiliyor mu (kurgu gun; - = karsilanamaz) istek kendi don. altyapi platform yazilim calisma zamani surumu yukseltilsin 0 0 1 - olcekleme esigi dusurulsun 0 0 1 - yedek saklama suresi uzatilsin 0 0 1 30 disari cikis yolu degistirilsin 0 0 30 - isletim sistemi surumu sabitlensin 0 0 - - ariza degistirme suresi kisaltilsin 0 - - - karsilanan istek (6 uzerinden) 6 5 4 1 karsilananlarin toplam beklemesi 0 0 33 30 4. cikista ne yeniden verilir olcu kendi don. altyapi platform yazilim yeniden verilecek karar 0 5 23 25 yerine yeni cozum ister (gomulu) 0 2 8 17 ayni ayarla tasinir 0 3 15 8 tasinan karar orani (%) 100 92 69 35
Sayılar ölçüm sınıfındadır; girdileri BK7–BK12’dir.
Devir Doğrusal Değildir
Birinci tablo devri alan alan gösterir. Altyapı hizmeti yalnız iki alanı — donanım ve yerleşim — tümüyle alır; kalan sekiz alanın 21 kararı elde kalır. Platform hizmeti sekiz alanı daha alır ve geriye üç kalem bırakır: kütüphane sürümü, uyarı eşiği, yetki modeli. Yazılım hizmetinde tek bir karar kalır — yetki modeli.
İkinci tablonun ilk iki satırı bunu tek sayıya indirir: devredilen karar 0 → 5 → 23 → 25. Sıçrama altyapı ile platform arasındadır; oradaki tek adım on sekiz karar devreder. Buna karşılık platformdan yazılıma geçiş yalnız iki karar daha devreder. Hizmet modelleri eşit aralıklı bir merdiven değildir; en büyük devir ortadaki adımdadır ve o adım genellikle en kolay atılan adım gibi anlatılır.
Devredilen Karar Geri Alınabiliyor mu
Devredilen kararın sayısı tek başına bir şey söylemez; devredilenin geri alınabilirliği ayrı bir kalemdir. Altyapıda beş devirden ikisi parametreyle geri alınır, biri sözleşme penceresi bekler, ikisi gömülüdür. Platformda 23 devirden dokuzu parametre, altısı pencere, sekizi gömülü. Yazılımda 25 devirden yalnız üçü parametreyle geri alınır ve on yedisi gömülüdür.
Parametre oranı sırasıyla 2/5, 9/23 ve 3/25’tir — yaklaşık %40, %39 ve %12. İlk iki adımda oran neredeyse sabittir: platform çok karar devreder ama devrettiğinin benzer bir kesrini ayar olarak geri verir. Üçüncü adımda oran üçte bire düşer. Yazılım hizmetinde devredilen kararların çoğu geri alınmak üzere tasarlanmamıştır; hizmetin sunduğu şey zaten o kararın verilmiş olmasıdır.
Karşılığında alınan şey son iki satırdadır. Elde kalan yıllık karar dokunuşu 91’den 82, 19 ve 4’e iner. Altyapı hizmeti dokunuşun yalnız %10’unu kaldırır — beş karar devretmenin karşılığı bu kadardır. Platform %79’unu kaldırır. Devir başına kalkan dokunuş 1,8, 3,1 ve 3,5’tir; bu ölçüde en verimsiz adım altyapıdır.
Farkın nedeni karar kümesinin içinde görünür. Yılda 12 dokunuşla en ağır kalem güvenlik yamasıdır ve altyapı hizmetinde elde kalır; kütüphane sürümü 9, ağ güvenlik kuralı 9, uyarı eşiği 6 ve yeniden başlatma 6 dokunuş yazar. Altyapının devrettiği beş kararın yıllık dokunuşu ise toplam dokuzdur. Devredilen kararın ağırlığı sayısıyla değil, yılda kaç kez dokunulduğuyla ölçülür; beş karar devretmek dokuz dokunuş, on sekiz karar devretmek altmış üç dokunuş kaldırır.
Bir Gereksinim Geldiğinde
Üçüncü tablo aynı altı isteği dört düzende koşturur. Kendi donanımında altısı da aynı gün karşılanır. Altyapıda beşi karşılanır; arıza değiştirme süresi artık müşterinin kararı değildir. Platformda dördü karşılanır ve toplam bekleme 33 güne çıkar — üçü birer gün, biri otuz gün. Yazılım hizmetinde altı istekten yalnız biri karşılanır ve o da otuz gün bekler.
Bu tablo ikinci tablonun tersini söyler. Yazılım hizmeti devir başına en çok dokunuşu kaldıran modeldir (3,5), ama aynı model altı gereksinimin beşini karşılayamaz. İşletim yükünün kalkması, gereksinimi karşılayamamakla ödenir; iki sayı ayrı ayrı okunursa aynı model hem en iyi hem en kötü görünür.
Platform hizmetindeki 33 günlük bekleme de ayrı bir kalemdir. Karar teknik olarak geri alınabilir, ama geri alma süresi artık müşterinin değil sözleşmenin hızındadır. Kendi donanımında sıfır olan bir sayı, devirle birlikte otuz güne çıkmıştır.
Karar kümesinin en çok dokunulan kalemleri seçim yaparken ayrı bir ağırlık taşır. Bir ekip yılda
altı kez uyarı eşiğine dokunuyorsa, o kalemin E mi P mi G mi olduğu tablodaki diğer yirmi beş
karardan daha çok belirleyicidir. Hizmet modeli seçimi bütün karar kümesi üzerinden değil, o
kümenin en sık dokunulan onda biri üzerinden verilir; geri kalanı yılda bir kez fark edilir.
Çıkışta Ne Yeniden Verilir
Dördüncü tablo çıkışı sayar. Çıkışta yeniden verilecek karar sayısı devredilen karar sayısıdır: 0, 5, 23, 25. Bunların içinden aynı ayarla taşınabilenler 3, 15 ve 8’dir; yerine yeni bir çözüm isteyenler 2, 8 ve 17’dir. Taşınan karar oranı %100’den %92, %69 ve %35’e iner.
Platform ile yazılım arasındaki fark burada en açıktır. Devredilen karar sayısı 23’ten 25’e yalnız iki artar, ama gömülü karar 8’den 17’ye çıkar ve taşınan oran %69’dan %35’e iner. Çıkış maliyetini devredilen kararın sayısı değil, devredilenin geri alınabilirliği belirler.
Özet
- 26 kararlık kümede devredilen karar 0 → 5 → 23 → 25’tir; en büyük sıçrama altyapı ile platform arasındadır (on sekiz karar) ve hizmet modelleri eşit aralıklı bir merdiven değildir.
- Devredilenin parametreyle geri alınabilen oranı 2/5, 9/23 ve 3/25’tir; ilk iki adımda oran korunur, yazılım hizmetinde üçte bire iner ve 25 devrin 17’si gömülüdür.
- Karşılığında alınan işletim yükü düşüşüdür: yıllık karar dokunuşu 91 → 82 → 19 → 4; devir başına kalkan dokunuş 1,8, 3,1 ve 3,5’tir.
- Altı gereksinim isteğinin karşılanan sayısı 6, 5, 4 ve 1’dir; platformda toplam bekleme 33 gün, yazılımda 30 gündür. Devir başına en verimli görünen model isteklerin beşini karşılayamaz.
- Çıkışta taşınan karar oranı %100 → %92 → %69 → %35; platformdan yazılıma iki karar daha devredilirken gömülü karar 8’den 17’ye çıkar — çıkış maliyetini sayı değil geri alınabilirlik belirler.
Sonraki Adım
Bu ders ne kadarının kiralandığını saydı ve devredilen kararı geri alınabilirliğine göre üçe ayırdı. Ama bütün sayılar tek bir sessiz varsayım altında çıktı: kiralanan hizmet herkese açık bir havuzdan alınıyor. Oysa aynı hizmet türü yalnız tek bir kuruma ayrılmış bir düzende de kurulabilir, ya da iş yükünün bir kısmı biri diğeri ötekinde koşabilir. Sonraki ders aynı iş yükünü üç dağıtım düzeninde koşturur ve denetim altında kalan kalemi, sabit maliyeti, esneklik penceresini ve verinin nerede durabileceği kısıtını kalem kalem karşılaştırır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.