Ders 09 / 15
İş Yükü Kimliği
İş yükü kimliği tek bir sayıyla ölçülür: kaç statik sırrın yerini alıyor. Otuz bir kalemin yirmisi ortadan kalkıyor, on biri kalıyor ve kalanların tamamı altı sırda toplanıyor — imzayı doğrulayan tarafta duran anahtarlar ile federasyonu desteklemeyen dış sağlayıcılar. Dokuz uygulamanın yalnız ikisi hiçbir statik sır taşımaz hâle geliyor, yedisi en az bir tane taşımaya devam ediyor. Sırrın yerini alan güven ilişkisi kalem sayısını düşürmüyor; kalemin sızabilir olmasını düşürüyor — ve grup düzeyinde yazıldığında yirmi çift yerine otuz altı çift açıyor.
İçindekiler
İki ders boyunca ölçülen şey aynı nesnenin iki özelliğiydi: sırrın ömrü ve sırrın değişme maliyeti. İkisi de sırrın var olduğunu varsayıyordu. Bu ders o varsayımı kaldırır.
Bir uygulamanın veri tabanına bağlanmak için taşıdığı değer, aslında o uygulamanın kim olduğunu kanıtlamanın bir yoludur. Kanıt uygulamanın kendi taşıdığı bir değerden değil, uygulamayı çalıştıran platformdan gelirse, taşınacak bir değer kalmaz. İş yükü kimliğinin mekaniği — kimliğin nasıl verildiği, nasıl doğrulandığı, hangi bileşenlerin işe karıştığı — daha önceki bir kursta ölçüldü ve burada tekrarlanmıyor. Buranın ölçüsü tek bir sayıdır: kaç statik sırrın yerini alıyor, kaç tanesinin alamıyor.
- SR18. Önceki üç dersin modeli sürüyor: dokuz uygulama, otuz bir kalem, on yedi sır. Ortam
kurgudur, ölçülen şey
nodeile yazılmış bir modeldir ve gerçek sır değeri taşımaz. - SR19. Bir hedef sistemin iş yükü kimliğini doğrudan doğrulayıp doğrulayamadığı model tablosunda verilir ve gerekçesiyle yazılır. İki gerekçe var: kanıtın doğrulayan tarafta durması gerekmesi, ve sağlayıcının federasyonu desteklememesi.
- SR20. İmza anahtarları özel bir durumdur. Belge ve oturum imzasını doğrulayan taraf anahtarın kendisine ihtiyaç duyar; iş yükü kimliği bir çağrıyı yetkilendirir, bir imzayı doğrulatmaz. Buna karşılık servisler arası çağrı imzası yetkilendirmedir ve iş yükü kimliğiyle karşılanır.
- SR21. Jeton ömrü on beş dakika alınıyor; bu bir kurgu değerdir ve iş yükü kimliği jetonunun süresi dolmadan iptal edilemediği varsayılıyor.
- SR22. Rastgelelik yok; bütün sayılar model tablolarından türetiliyor ve çıktı koşumdan koşuma aynı.
Kaç Kalem Ortadan Kalkıyor
// kimlik.mjs — is yuku kimliginin ortadan kaldirdigi statik sir ve geriye kalan kalem. MODELDIR. // Ortam KURGUDUR; GERCEK SIR DEGERI YOKTUR, yalniz sir yollari ve kabul ozellikleri modellenir. export const OKUR = { "portal-onyuz": ["imza/oturum-imzalama"], "portal-api": ["veri/portal-birincil", "veri/portal-okuma", "imza/oturum-imzalama", "imza/ic-cagri-imzalama", "altyapi/onbellek", "altyapi/gunluk-yazma"], "abone-kayit": ["veri/portal-birincil", "dis/eposta-gecidi", "dis/kisa-mesaj-gecidi"], "fatura-servisi": ["veri/fatura-birincil", "veri/portal-okuma", "veri/arsiv", "dis/odeme-gecidi", "imza/belge-imzalama"], "odeme-koprusu": ["dis/odeme-gecidi"], "saha-api": ["veri/saha-birincil", "kuyruk/is-emri-kuyrugu", "dis/harita-servisi", "imza/ic-cagri-imzalama"], "is-emri": ["veri/saha-birincil", "kuyruk/is-emri-kuyrugu", "kuyruk/bildirim-kuyrugu", "dis/harita-servisi"], "bildirim": ["kuyruk/bildirim-kuyrugu", "dis/eposta-gecidi", "dis/kisa-mesaj-gecidi"], "rapor-uretici": ["veri/portal-okuma", "veri/arsiv", "altyapi/nesne-deposu", "dis/eposta-gecidi"], }; // kabul: hedef sistem is yuku kimligini dogrudan dogrulayabiliyor mu (evet/hayir + gerekce). // dondurme: kimlik alamayan sirrin bugunku dondurme periyodu (gun). const ALANVAR = { veri: [true, "-", 180], kuyruk: [true, "-", 180], altyapi: [true, "-", 180], imza: [false, "dogrulayan-tarafta", 90], dis: [false, "saglayici-desteklemiyor", 365] }; const ISTISNA = { "altyapi/onbellek": [false, "saglayici-desteklemiyor", 180], "imza/ic-cagri-imzalama": [true, "-", 90], "dis/harita-servisi": [true, "-", 365], "dis/odeme-gecidi": [false, "saglayici-desteklemiyor", 90] }; export const SIR = Object.fromEntries([...new Set(Object.values(OKUR).flat())].map((s) => { const [kabul, gerekce, dondurme] = ISTISNA[s] || ALANVAR[s.split("/")[0]]; return [s, { kabul, gerekce, dondurme }]; })); export const AD = Object.keys(OKUR); export const KALEM = AD.flatMap((a) => OKUR[a].map((s) => [a, s])); export const kalan = (a) => OKUR[a].filter((s) => !SIR[s].kabul); export const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0])).join(""); if (import.meta.url === `file://${process.argv[1]}`) { const yz = gen([10, 8, 10, 8, 12, 26]); console.log(`model: ${KALEM.length} (uygulama, sir) kalemi, ${Object.keys(SIR).length} sir, ` + `${AD.length} uygulama (kurgu uretim ortami)\n`); console.log(yz(["alan", "sir", "kalkan", "kalan", "kalan sir", "kalma gerekcesi"])); for (const al of ["veri", "kuyruk", "altyapi", "imza", "dis"]) { const k = KALEM.filter(([, s]) => s.startsWith(al + "/")); const kl = k.filter(([, s]) => !SIR[s].kabul); const g = [...new Set(kl.map(([, s]) => SIR[s].gerekce))]; console.log(yz([al, [...new Set(k.map(([, s]) => s))].length, k.length - kl.length, kl.length, [...new Set(kl.map(([, s]) => s))].length, g.length ? g.join(",") : "-"])); } const K = KALEM.filter(([, s]) => !SIR[s].kabul); console.log(yz(["toplam", Object.keys(SIR).length, KALEM.length - K.length, K.length, [...new Set(K.map(([, s]) => s))].length, ""])); const yz2 = gen([16, 10, 10, 34]); console.log(`\n${yz2(["uygulama", "kalem", "kalan", "kalan sirlar"])}`); for (const a of AD) console.log(yz2([a, OKUR[a].length, kalan(a).length, kalan(a).map((s) => s.split("/")[1]).join(",") || "yok"])); const temiz = AD.filter((a) => kalan(a).length === 0); console.log(`\nhic statik sir tasimayan uygulama: ${temiz.length} / ${AD.length} ` + `(${temiz.join(", ")})`); console.log(`en az bir statik sir tasiyan uygulama: ${AD.length - temiz.length} / ${AD.length}`); const G = K.reduce((t, [, s]) => t + SIR[s].dondurme, 0); const T = KALEM.reduce((t, [, s]) => t + SIR[s].dondurme, 0); console.log(`toplam acik pencere: ${Math.round(T / 2)} -> ${Math.round(G / 2)} kalem-gun ` + `(%${(100 - 100 * G / T).toFixed(0)} dusus); kalem basina ortalama ` + `${(T / KALEM.length / 2).toFixed(0)} -> ${(G / K.length / 2).toFixed(0)} gun`); }
model: 31 (uygulama, sir) kalemi, 17 sir, 9 uygulama (kurgu uretim ortami) alan sir kalkan kalan kalan sir kalma gerekcesi veri 5 10 0 0 - kuyruk 2 4 0 0 - altyapi 3 2 1 1 saglayici-desteklemiyor imza 3 2 3 2 dogrulayan-tarafta dis 4 2 7 3 saglayici-desteklemiyor toplam 17 20 11 6 uygulama kalem kalan kalan sirlar portal-onyuz 1 1 oturum-imzalama portal-api 6 2 oturum-imzalama,onbellek abone-kayit 3 2 eposta-gecidi,kisa-mesaj-gecidi fatura-servisi 5 2 odeme-gecidi,belge-imzalama odeme-koprusu 1 1 odeme-gecidi saha-api 4 0 yok is-emri 4 0 yok bildirim 3 2 eposta-gecidi,kisa-mesaj-gecidi rapor-uretici 4 1 eposta-gecidi hic statik sir tasimayan uygulama: 2 / 9 (saha-api, is-emri) en az bir statik sir tasiyan uygulama: 7 / 9 toplam acik pencere: 3123 -> 1228 kalem-gun (%61 dusus); kalem basina ortalama 101 -> 112 gun
Üst tablonun ilk iki satırı beklenen sonucu veriyor: veri tabanı ve kuyruk kalemlerinin tamamı, on dört kalem, ortadan kalkıyor. Bunlar iç sistemlerdir ve iş yükünün kim olduğunu platformdan öğrenip doğrudan yetkilendirebilirler. Sır yönetimi açısından bu kalemler artık yoktur — ne saklanır, ne döndürülür, ne sızar.
İmza satırı ayrımı kuruyor. Üç imza sırrından biri, servisler arası çağrı imzası, kalkıyor; çünkü o imza bir yetkilendirme kanıtıdır ve iş yükü kimliği aynı işi yapar. Diğer ikisi kalıyor: oturum imzasını doğrulayan taraf ile belge imzasını doğrulayan taraf anahtarın kendisine ihtiyaç duyar. Bu ayrım sık atlanır ve “iş yükü kimliği bütün anahtarları kaldırır” iddiasının kırıldığı yerdir. İş yükü kimliği bir çağrıyı yetkilendirir; bir imzayı doğrulatmaz.
Dış satırı ise kalanın en büyük payıdır: dört dış geçitten yalnız harita servisi federasyonu destekliyor, üçü sabit anahtar veriyor ve bu üç sır yedi kaleme yayılmış durumda. Önceki dersin “kısaltılamayan sekiz sır” listesiyle kıyaslandığında tablo tutarlıdır — aynı sağlayıcı kısıtları, aynı kalemlerde.
Alt tablo kararın kendisidir. Yirmi kalemin kalkması, dokuz uygulamanın yalnız ikisini hiçbir statik sır taşımaz hâle getiriyor: saha uygulama arayüzü ve iş emri servisi. Diğer yedi uygulama en az bir statik sır taşımaya devam ediyor ve çoğu yalnız bir ya da iki tane taşıyor. Bu, ölçünün en önemli bulgusudur. Kalem sayısı yüzde altmış beş azalırken, sır taşıyan uygulama sayısı dokuzdan yediye iniyor. Sır yönetimi işi, kalem sayısıyla değil, sır taşıyan uygulama sayısıyla orantılıdır: her uygulamanın hâlâ bir sır dağıtım yolu, bir sahibi, bir döndürme takvimi ve bir sızıntı yordamı olmak zorundadır. İki uygulamayı kurtarmak, o yedi yordamdan hiçbirini ortadan kaldırmıyor.
Son satır aynı şeyi açık pencere cinsinden söylüyor. Toplam maruziyet üç bin yüz yirmi üç kalem-günden bin iki yüz yirmi sekize, yüzde altmış bir aşağı iniyor. Ama kalem başına ortalama pencere yüz bir günden yüz on iki güne çıkıyor: kalkan kalemler kısa döndürme periyoduna sahip olan iç kalemlerdi, kalanlar ise üç yüz altmış beş günlük dış anahtarlardır. Kalanın niteliği kötüleşiyor.
Sırrın Yerine Ne Geçiyor
Kalkan yirmi kalem hiçliğe gitmiyor; her birinin yerine bir güven ilişkisi yazılıyor: hedef sistemin hangi iş yükü kimliğini kabul edeceğini söyleyen bir bağlama kuralı.
// baglama.mjs — sirrin yerini alan guven iliskisi: kac kural, kac cift, kac tek nokta import { AD, OKUR, SIR, KALEM, kalan, gen } from "./kimlik.mjs"; const JETON = 15; // is yuku kimligi jetonunun omru (dk, kurgu) export const GRUP = { portal: ["portal-onyuz", "portal-api", "abone-kayit"], fatura: ["fatura-servisi", "odeme-koprusu"], saha: ["saha-api", "is-emri"], arka: ["bildirim", "rapor-uretici"] }; const kimlikli = (a) => OKUR[a].filter((s) => SIR[s].kabul); const yz = gen([10, 9, 8, 13, 12, 16]); console.log(yz(["grup", "is yuku", "hedef", "grup kural", "grup cift", "is yuku kural"])); let GK = 0, GC = 0, IK = 0; for (const [g, uyeler] of Object.entries(GRUP)) { const hedef = [...new Set(uyeler.flatMap(kimlikli))]; const iy = uyeler.reduce((t, a) => t + kimlikli(a).length, 0); GK += hedef.length; GC += uyeler.length * hedef.length; IK += iy; console.log(yz([g, uyeler.length, hedef.length, hedef.length, uyeler.length * hedef.length, iy])); } console.log(yz(["toplam", AD.length, "", GK, GC, IK])); console.log(`\ngrup duzeyinde baglama: ${GK} kural, ${GC} (is yuku, hedef) cifti acik`); console.log(`is yuku duzeyinde baglama: ${IK} kural, ${IK} cift acik; ` + `karsiliksiz cift ${GC - IK}`); console.log(`her iki durumda da sizabilir deger tasiyan kural sayisi: 0 ` + `(kural bir yetki kaydidir, bir sir degil)`); const yz2 = gen([16, 10, 13, 25]); console.log(`\n${yz2(["uygulama", "kimlikli", "statik sir", "bagli oldugu tek nokta"])}`); for (const a of AD) { const k = kimlikli(a).length, st = kalan(a).length; console.log(yz2([a, k, st, k && st ? "depo+kimlik" : k ? "kimlik" : "depo"])); } const D = AD.filter((a) => kalan(a).length > 0), K = AD.filter((a) => kimlikli(a).length > 0); console.log(`\nsir deposuna bagli ${D.length}, kimlik saglayiciya bagli ${K.length}, ` + `ikisine birden ${AD.filter((a) => kalan(a).length && kimlikli(a).length).length}, ` + `hicbirine bagli olmayan ${AD.filter((a) => !kalan(a).length && !kimlikli(a).length).length}`); const kalkan = KALEM.filter(([, s]) => SIR[s].kabul); console.log(`kalkan ${kalkan.length} kalemin bugunku maruziyeti ` + `${kalkan.reduce((t, [, s]) => t + SIR[s].dondurme / 2, 0)} kalem-gun; yerine gecen jetonun ` + `omru ${JETON} dk, yani ${(kalkan.length * JETON / 2 / 1440).toFixed(2)} kalem-gun`); console.log(`kimlik saglayici kesintisinde ${JETON} dk sonra duran uygulama: ${K.length} / ` + `${AD.length}; kesintiden hic etkilenmeyen uygulama: 0 / ${AD.length}`);
grup is yuku hedef grup kural grup cift is yuku kural portal 3 4 4 12 5 fatura 2 3 3 6 3 saha 2 5 5 10 8 arka 2 4 4 8 4 toplam 9 16 36 20 grup duzeyinde baglama: 16 kural, 36 (is yuku, hedef) cifti acik is yuku duzeyinde baglama: 20 kural, 20 cift acik; karsiliksiz cift 16 her iki durumda da sizabilir deger tasiyan kural sayisi: 0 (kural bir yetki kaydidir, bir sir degil) uygulama kimlikli statik sir bagli oldugu tek nokta portal-onyuz 0 1 depo portal-api 4 2 depo+kimlik abone-kayit 1 2 depo+kimlik fatura-servisi 3 2 depo+kimlik odeme-koprusu 0 1 depo saha-api 4 0 kimlik is-emri 4 0 kimlik bildirim 1 2 depo+kimlik rapor-uretici 3 1 depo+kimlik sir deposuna bagli 7, kimlik saglayiciya bagli 7, ikisine birden 5, hicbirine bagli olmayan 0 kalkan 20 kalemin bugunku maruziyeti 1895 kalem-gun; yerine gecen jetonun omru 15 dk, yani 0.10 kalem-gun kimlik saglayici kesintisinde 15 dk sonra duran uygulama: 7 / 9; kesintiden hic etkilenmeyen uygulama: 0 / 9
Üst tablo bu konunun ilk dersindeki bulguyu aynen tekrar ediyor, yalnız nesne değişmiş. Bağlama
kuralı iş yükü grubuna yazıldığında on altı kural yetiyor ama otuz altı (iş yükü, hedef) çifti
açılıyor; iş yükü başına yazıldığında yirmi kural gerekiyor ve tam yirmi çift açılıyor.
Karşılıksız on altı çift, ilk dersteki kırk sekiz karşılıksız kalemin aynı biçimidir: geniş
yazılan kural az satır, çok erişim demektir. İş yükü kimliğine geçmek bu sorunu çözmüyor;
sorunu sır yolu önekinden iş yükü grubuna taşıyor.
Üçüncü satır ise farkın nerede olduğunu söylüyor. Bağlama kuralının sayısı yirmide kalsa bile kural sızabilir bir değer taşımıyor. Kalkan yirmi kalemin bugünkü maruziyeti bin sekiz yüz doksan beş kalem-gündü; yerine geçen jetonun ömrü on beş dakika, yani sıfır virgül bir kalem-gün. Kazanç kalem sayısında değil, kalemin niteliğindedir: bir yetki kaydı çalınabilir bir şey değildir, çünkü kopyalandığında hiçbir işe yaramaz — kimliği taşıyan iş yükünün kendisi gerekir.
Alt tablo bedeli veriyor ve bedel tanıdıktır. İlk ders merkezî sır deposunun dokuz uygulamaya ortak bir başlatma bağımlılığı yazdığını ölçmüştü. İş yükü kimliği bu bağımlılığı kaldırmıyor, ikinciye çıkarıyor: yedi uygulama hâlâ sır deposuna, yedi uygulama kimlik sağlayıcıya, beşi ikisine birden bağlı. Hiçbirine bağlı olmayan uygulama sayısı sıfır. Saha uygulama arayüzü ve iş emri servisi sır deposundan tamamen kurtuldular, ama kimlik sağlayıcı on beş dakika erişilemez olduğunda ikisi de duruyor. Bağımlılığın adı değişti, sayısı değişmedi.
Bu Karar Nereye Ait
Yirmi kalemin ortadan kalkması çalışma zamanında olan bir şey değildir. Hiçbir çalışma zamanı savunması bir sırrı yakalamadı, durdurmadı ya da işaretlemedi; kalemler yok oldular çünkü dağıtım artık onları üretmiyor. Bu, bu kursta ölçülen en ucuz kalem sınıfıdır: bir kalemi yakalamak yerine hiç doğurmamak.
Bunun karşılığında yapılan iş de dağıtım aşamasındadır. Yirmi bağlama kuralı, hedef sistemlerin yapılandırmasına yazılır ve iş yükü tanımına bağlanır; yazıldıktan sonra çalışma zamanında izlenecek bir şey kalmaz. Çalışma zamanına düşen tek ölçüm, ilk derste yazılanın aynısıdır: bağlama kurallarının açtığı çift kümesiyle gerçekten yapılan çağrıların karşılaştırılması. Otuz altı çift açılıp yirmisi kullanılıyorsa, on altı çift karşılıksızdır ve bu ancak çağrı kaydından görülür.
Kalan on bir kalem ise hiçbir aşamada kapatılamıyor. Üç dış sağlayıcı federasyonu desteklemiyor, iki imza anahtarı doğrulayan tarafta duruyor, önbellek sunucusu kimlik kabul etmiyor. Bu kalemlerin tamamı önceki iki dersin yordamlarına — döndürme takvimine, örtüşme penceresine — geri düşüyor ve sonraki dersin konusu olan sızıntı akışına.
Özet
- İş yükü kimliği 31 kalemin 20’sini ortadan kaldırıyor, 11’i kalıyor. Kalanlar altı sırda toplanıyor: iki imza anahtarı, üç dış geçit anahtarı ve önbellek sunucusu.
- Ayrım gerekçelidir. Servisler arası çağrı imzası bir yetkilendirmedir ve kalkar; oturum ve belge imzası doğrulayan tarafta anahtarın kendisini gerektirir ve kalır. Dört dış geçitten yalnız biri federasyonu destekliyor.
- Kalem sayısı %65 azalırken sır taşıyan uygulama sayısı 9’dan 7’ye iniyor. Sır yönetimi işi kalem sayısıyla değil, sır taşıyan uygulama sayısıyla orantılıdır; yedi uygulamanın yordamı yerinde duruyor.
- Toplam açık pencere maruziyeti 3.123 kalem-günden 1.228’e (%61) iniyor, ama kalem başına ortalama pencere 101 günden 112 güne çıkıyor: kalkanlar iç kalemlerdi, kalanlar dış anahtarlardır.
- Sırrın yerine geçen bağlama kuralı sayıyı düşürmüyor, niteliği değiştiriyor: 1.895 kalem-günlük maruziyet 0,1 kalem-güne iniyor. Ama kural grup düzeyinde yazıldığında 16 satırla 36 çift açılıyor; iş yükü düzeyinde 20 satırla 20 çift. Karşılıksız 16 çift, ilk dersteki 48 karşılıksız kalemin aynı biçimidir.
- Bağımlılık kalkmıyor, ikiye çıkıyor: 7 uygulama sır deposuna, 7 uygulama kimlik sağlayıcıya, 5’i ikisine birden bağlı; hiçbirine bağlı olmayan uygulama sıfır.
Sonraki Adım
Bu ders sırların çoğunu ortadan kaldırdı, önceki iki ders kalanların ömrünü kısalttı ve döndürme yordamını yazdı. Üçü de aynı soruyu yanıtsız bıraktı: bir sır sızdığında ne oluyor. Açık pencere sırrın kendiliğinden geçersizleşme süresiydi; sızıntı fark edilip iptal edildiğinde pencere daha erken kapanır. Ama fark etmek zaman alır, sahibini bulmak zaman alır, yenisini üretmek zaman alır ve yeni değerin yayılması bir önceki dersin ölçtüğü örtüşme kadar sürer. Sonraki ders bu akışı kalan altı sır üzerinde koşturur: sızıntı anından iptale kaç dakika geçiyor, o dakikalarda sırdan kaç çağrı geçiyor, hangi aşamayı kısaltmak ne kazandırıyor ve yayılmayı beklemeden iptal etmek kaç meşru isteği kesiyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.