Ders 14 / 15
İçerik Dağıtım Ağı
Kenarın hizmet olarak kiralanmasının ölçülmesi: kenar çıkışı ile kaynak çıkışı ayrı fiyatlandığında faturanın yüzde altmış yedi isabette dönmesi ve yüzde altmışta kaynak yükü düşmüşken faturanın hâlâ yüksek kalması, önek geçersizleştirmesinin ücretsiz görünüp yüz seksen bin ısınma isteği üretmesi, geçersizleştirmenin doksan saniyelik kenar penceresini kapatıp üç bin altı yüz saniyelik istemci penceresine hiç dokunmaması, ve on beş karar kaleminden dokuzunun elde kalması.
İçindekiler
Son iki ders isteğin bulduğu ucu kurdu ve o ucu kararlı hâle getirdi. Ölçüm ağının panosuna gelen her istek artık doğru makineye varıyor — ve her istek o makineye varıyor.
Bölge haritası, sayaç listesi ve varlık dosyaları uzaktaki bir istemci için de aynı yolu kat ediyor. Kaynak sunucudan çıkan her bayt için çıkış ücreti yazılıyor ve aynı harita günde binlerce kez aynı bölgeden dışarı çıkıyor.
Kenar önbelleğinin nasıl çalıştığı, isabet oranının nasıl oluştuğu ve tazeliğin pencereyi nasıl belirlediği daha önce ölçüldü; bu ders o mekaniği tekrarlamaz. Burada kenar kiralanan bir hizmettir ve ölçülen üç şey vardır: iki ayrı çıkış fiyatı altında faturanın hangi isabet oranında döndüğü, geçersizleştirmenin kaç istek ve kaç saniyeye mal olduğu, ve kenara verilen kararlardan kaçının elde kaldığı. İsabet oranı burada bir sonuç değil, taranan bir eksendir.
- BA43. Kurgu bölgesel ölçüm ağının aylık trafiği dört milyon istek ve ortalama kırk KB yanıttır; toplam yüz altmış GB. Kenar açıldığında istemciye giden bütün baytlar kenardan çıkar.
- BA44. Fiyatlandırma kurgudur, para biriminin adı birimdir: kaynak çıkışı GB başına dokuz birim, kenar çıkışı GB başına beş birim, istek ücreti on bin istek başına 0,4 birim. Modelin gerçeğe dayandığı tek nokta kenar çıkışının kaynak çıkışından ucuz, ama sıfır olmamasıdır.
- BA45. Kırk kenar düğümü vardır ve bir nesne ortalama on düğümde durur; kapsama kurgudur.
- BA46. Geçersizleştirmenin en yavaş düğüme ulaşma süresi kurgudur: tek tek yol için doksan, önek için yüz elli saniye. Ayda bin yol ücretsizdir, üstü yol başına 0,005 birimdir.
- BA47. Bir sürümde iki bin dört yüz varlık dosyası değişir; önek altında toplam on sekiz bin nesne vardır.
- BA48. Yanıt istemcinin kendi önbelleğinde tazelik süresi kadar durur — kurgu olarak üç bin altı yüz saniye — ve geçersizleştirme istemciye ulaşmaz.
// kenar/dagitim.mjs — model: kenar bir hizmet olarak kiralandiginda ne degisiyor. Onbellek // mekanigi ve isabet oraninin nasil olustugu daha once olculdu; burada isabet bir eksendir, // taranir. Fiyatlar kurgudur, para biriminin adi "birim"dir. const ISTEK_AY = 4e6, ORT_KB = 40; const VERI = (ISTEK_AY * ORT_KB) / 1e6; // GB const KAYNAK_CIKIS = 9, KENAR_CIKIS = 5, ISTEK_UCRET = 0.4; // birim/GB, birim/GB, birim/10bin const istekUcreti = (n) => (n / 1e4) * ISTEK_UCRET; const fatura = (isabet, kenarVar) => { const inen = Math.round(ISTEK_AY * (1 - isabet)); const kaynakGB = VERI * (kenarVar ? 1 - isabet : 1); return { inen, kaynakGB, kaynak: kaynakGB * KAYNAK_CIKIS, kenar: kenarVar ? VERI * KENAR_CIKIS : 0, istek: kenarVar ? istekUcreti(ISTEK_AY) : 0 }; }; const topla = (f) => f.kaynak + f.kenar + f.istek; const TABAN = topla(fatura(0, false)); const E = [12, 20, 18, 15, 13, 13, 15]; const yaz = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](E[i])).join(""); console.log(yaz(["isabet(%)", "kaynaga inen istek", "kaynak cikisi(GB)", "kaynak ucreti", "kenar ucreti", "istek ucreti", "toplam(birim)"])); const sat = (ad, f) => console.log(yaz([ad, f.inen, f.kaynakGB.toFixed(1), f.kaynak.toFixed(1), f.kenar.toFixed(1), f.istek.toFixed(1), topla(f).toFixed(1)])); sat("kenar yok", fatura(0, false)); for (const p of [0, 40, 60, 67, 80, 90, 95]) sat(String(p), fatura(p / 100, true)); let donus = 100; for (let p = 0; p <= 100; p += 1) if (topla(fatura(p / 100, true)) <= TABAN) { donus = p; break; } console.log(`\nkenar yok fatura ${TABAN.toFixed(1)} birim; kenarin bunu gectigi isabet: %${donus}`); // --- Gecersizlestirmenin maliyeti ----------------------------------------------- // Bir surumde 2400 varlik dosyasi degisti. Onek altinda toplam 18000 nesne var. // Yayilma sureleri, kapsama ve ucretler kurgudur. const DUGUM = 40, KAPSAMA = Math.round(DUGUM / 4), KOTA = 1000, YOL_UCRET = 0.005; const DEGISEN = 2400, ONEK_NESNE = 18000, TAZELIK = 3600; // [yontem, gecersizlestirme istegi, dusen nesne, kenar penceresi, istemci penceresi] const YONTEM = [ ["tek tek yol", DEGISEN, DEGISEN, 90, TAZELIK], ["onek", 1, ONEK_NESNE, 150, TAZELIK], ["surumlu yol", 0, 0, 0, 0], ]; const Y = [14, 16, 14, 18, 20, 14, 16]; const yaz2 = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](Y[i])).join(""); console.log("\n" + yaz2(["yontem", "istek", "ucret(birim)", "kenar penceresi", "istemci penceresi", "dusen nesne", "isinma istegi"])); for (const [ad, istek, dusen, kp, ip] of YONTEM) { const ucret = Math.max(0, istek - KOTA) * YOL_UCRET; const isinma = (ad === "surumlu yol" ? DEGISEN : dusen) * KAPSAMA; console.log(yaz2([ad, istek, ucret.toFixed(2), kp, ip, dusen, isinma])); } // --- Devredilen karar: kalem sayimi --------------------------------------------- // [grup, kalem, kimde, yaratilista sabit mi] const KARAR = [ ["anahtar", "yol", "sen", false], ["anahtar", "sorgu parametreleri", "sen", false], ["anahtar", "secilen basliklar", "sen", false], ["anahtar", "cerez", "sen", false], ["tazelik", "tazelik suresi", "sen", false], ["tazelik", "hata aninda eski nesne", "sen", false], ["tazelik", "kenarin tazelik ust siniri", "saglayici", false], ["sikistirma", "acik mi", "sen", false], ["sikistirma", "algoritma ve duzey", "saglayici", false], ["dagitim", "kaynak tanimi", "sen", false], ["dagitim", "dagitim adi", "sen", true], ["dagitim", "dugum sayisi ve yeri", "saglayici", false], ["dagitim", "istemcinin dustugu dugum", "saglayici", false], ["dagitim", "bellek dolunca atilan nesne", "saglayici", false], ["dagitim", "yayilma suresi", "saglayici", false], ]; const G = [14, 10, 9, 15, 20]; const yaz3 = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](G[i])).join(""); console.log("\n" + yaz3(["grup", "kalem", "sende", "saglayicida", "yaratilista sabit"])); const gruplar = [...new Set(KARAR.map((k) => k[0]))]; const say = (l) => [l.length, l.filter((k) => k[2] === "sen").length, l.filter((k) => k[2] === "saglayici").length, l.filter((k) => k[3]).length]; for (const g of gruplar) console.log(yaz3([g, ...say(KARAR.filter((k) => k[0] === g))])); console.log(yaz3(["toplam", ...say(KARAR)]));
isabet(%) kaynaga inen istek kaynak cikisi(GB) kaynak ucreti kenar ucreti istek ucreti toplam(birim) kenar yok 4000000 160.0 1440.0 0.0 0.0 1440.0 0 4000000 160.0 1440.0 800.0 160.0 2400.0 40 2400000 96.0 864.0 800.0 160.0 1824.0 60 1600000 64.0 576.0 800.0 160.0 1536.0 67 1320000 52.8 475.2 800.0 160.0 1435.2 80 800000 32.0 288.0 800.0 160.0 1248.0 90 400000 16.0 144.0 800.0 160.0 1104.0 95 200000 8.0 72.0 800.0 160.0 1032.0 kenar yok fatura 1440.0 birim; kenarin bunu gectigi isabet: %67 yontem istek ucret(birim) kenar penceresi istemci penceresi dusen nesne isinma istegi tek tek yol 2400 7.00 90 3600 2400 24000 onek 1 0.00 150 3600 18000 180000 surumlu yol 0 0.00 0 0 0 24000 grup kalem sende saglayicida yaratilista sabit anahtar 4 4 0 0 tazelik 3 2 1 0 sikistirma 2 1 1 0 dagitim 6 2 4 1 toplam 15 9 6 1
İki Ayrı Eşik
Birinci tablonun ilk satırı taban durumdur: kenar yok, dört milyon isteğin dördü de kaynağa iniyor, yüz altmış GB kaynaktan çıkıyor, fatura bin dört yüz kırk birim.
İkinci satır kenarı açıyor ve isabeti sıfır tutuyor. Fatura iki bin dört yüze çıkıyor — yüzde altmış yedi artış. Nedeni ortadadır: istemciye giden bütün baytlar artık kenardan çıkıyor ve kenar çıkışı bedavaya gelmiyor (sekiz yüz birim), üstüne bir de istek ücreti yazılıyor (yüz altmış birim). Kaynak çıkışı ise hiç azalmadı, çünkü isabet sıfır. Kenarı açmak tek başına bir tasarruf değildir; iki fatura kalemi eklemektir.
Aşağı inen satırlarda değişen tek kalem kaynak çıkışıdır. Kenar ücreti sekiz yüz birimde, istek ücreti yüz altmış birimde sabit duruyor — bu iki kalem isabetten hiç etkilenmiyor. Toplam faturanın eğrisi bu yüzden kaynak eğrisinden farklı: dokuz yüz altmış birimlik bir taban var ve kaynak tasarrufu bu tabanın üstüne biniyor.
Dönüş noktası koşumun sonunda hesaplandı: yüzde altmış yedi. Bu isabette toplam bin dört yüz otuz beş birim, kenarsız düzenin bin dört yüz kırk biriminin hemen altında.
Asıl okuma altmışlık satırdadır. Yüzde altmış isabette kaynağa inen istek dört milyondan bir milyon altı yüz bine inmiş; kaynak sunucunun yükü yüzde altmış azalmış, ölçeklemesi rahatlamış, örnek sayısı düşürülebilir durumda. Fatura ise bin beş yüz otuz altı birim — kenarsız düzenden hâlâ yüksek. Kaynak yükünü düşürmek ile parayı düşürmek iki ayrı eşiktir ve bu modelde ikincisi daha geç geliyor.
Dönüş noktasını belirleyen şey iki fiyatın oranıdır. Kenar çıkışı kaynak çıkışının beş bölü dokuzu olduğu için tasarruf edilecek pay kaynak kaleminin yalnız bir bölümüdür. İki fiyat eşit olsaydı dönüş noktası hiç gelmezdi: sabit sekiz yüz artı yüz altmış birim, kaynak tarafında kazanılabilecek en fazla bin dört yüz kırk birimin altında kalmaz. Kararın dayandığı sayı “kenar ucuzdur” değil, kaç kat ucuz olduğudur.
Yüzde doksanda fatura bin yüz dört birime, yüzde doksan beşte bin otuz iki birime iniyor. Taban düzene göre en iyi tasarruf yaklaşık yüzde yirmi sekizdir ve bunun karşılığında kaynağa inen istek yirmi kat azalmıştır. Kenarın verdiği asıl şey paradan çok kaynak yüküdür; para ikincil ve daha geç gelen bir kazançtır.
Geçersizleştirmenin Görünmeyen Faturası
İkinci tablo bir sürüm yayınını ölçüyor: iki bin dört yüz varlık dosyası değişti ve kenardaki eski kopyaların düşmesi gerekiyor.
Tek tek yol yöntemi iki bin dört yüz geçersizleştirme isteği gönderiyor. Bin tanesi ücretsiz kota içinde, kalan bin dört yüzü yol başına 0,005 birim: toplam yedi birim. Bu, aylık bin dört yüz kırk birimlik faturanın yanında görünmez bir sayıdır. Pencere doksan saniye, düşen nesne iki bin dört yüz.
Önek yöntemi tek bir istek gönderiyor ve ücreti sıfır. İki sütun yan yana okunduğunda önek her bakımdan üstün görünüyor: iki bin dört yüz istek yerine bir istek, yedi birim yerine sıfır.
Son sütun bu görüntüyü bozuyor. Önek altındaki on sekiz bin nesnenin tamamı düşüyor, yalnız değişen iki bin dört yüzü değil. Her düşen nesne ortalama on düğümde durduğuna göre ısınma sırasında kaynağa yüz seksen bin istek iniyor. Tek tek yol yönteminde bu sayı yirmi dört bindir: yedi buçuk katı fark.
Bu sayının büyüklüğü birinci tabloyla karşılaştırınca görünür. Yüzde doksan isabetli bir ayda kaynağa inen toplam istek dört yüz bindi. Tek bir önek geçersizleştirmesi, o ayın kaynak yükünün yüzde kırk beşini birkaç dakikaya sıkıştırarak üretiyor. Ücret sıfır, fatura yedi birim değil; fatura kaynak tarafında, ölçekleme grubunun açtığı örneklerde yazılıyor.
Önek ayrıca daha yavaş yayılıyor: yüz elli saniyeye karşı doksan saniye. Ucuz görünen yöntem hem daha geniş hem daha yavaş.
Üçüncü satır geçersizleştirmeyi tümüyle ortadan kaldırıyor. Sürümlü yolda değişen dosya yeni bir adla yayımlanır; eski ad hiç geçersizleştirilmez, yeni ad zaten kenarda yoktur. Geçersizleştirme isteği sıfır, ücret sıfır, pencere sıfır, düşen nesne sıfır. Isınma isteği yirmi dört bin — yalnız gerçekten değişen iki bin dört yüz dosya için. Bedeli tabloda görünmüyor: eski adlar kenarda ve depoda durmaya devam eder ve bir yerde temizlenmeleri gerekir.
Geçersizleştirmenin Ulaşamadığı Yer
Dördüncü ve beşinci sütun bu dersin en sessiz sayısıdır.
Kenar penceresi ilk yöntemde doksan saniyedir: doksan saniye sonra kırk düğümün kırkında da eski kopya gitmiştir. İstemci penceresi ise aynı satırda üç bin altı yüz saniye. Kırk kat fark.
Sebebi tek cümledir: geçersizleştirme kenara gönderilen bir mesajdır ve istemciye giden bir mesaj yoktur. Bir saatlik tazelikle yayımlanmış bir yanıt istemcinin kendi önbelleğinde bir saat durur ve o süre boyunca istemci hiçbir isteğe çıkmaz. Geçersizleştirmenin kapattığı doksan saniye, gerçek pencerenin kırkta biridir.
Bu, kursun geri alınamayan kalemidir: yayımlanmış yanıt. Kenardaki kopya bir çağrıyla silinir, istemcideki kopya silinemez. Yanlış bir fiyat, yanlış bir bölge haritası ya da kişiye özel bir yanıt bir saatlik tazelikle çıktıysa, o yanıt bir saat boyunca dolaşımdadır ve bunu durduran bir düğme yoktur.
Üçüncü satır tek çözümü gösteriyor: istemci penceresi sıfır, çünkü sürümlü yolda yanıtın adı değişir ve istemci elindeki eski adı hiç sormaz. Ama bu da geçmişe dönük değildir — dünkü adla dağıtılmış yanıt bugün de istemcide durmaktadır. Sürümlü yol bundan sonrasını çözer, öncesini çözmez.
Kısa tazelik akla gelen ikinci çözümdür ve birinci tabloya bağlanır: tazeliği kısaltmak istemci penceresini daraltır, kenar isabetini düşürür ve isabet yüzde altmış yedinin altına inerse fatura kenarsız düzenin üstüne çıkar. Üç sayı tek düğümde bağlıdır: tazelik, isabet, fatura.
Kenara Ne Devredildi
Üçüncü tablo bu kursun sorusunu bu derse uyguluyor. On beş karar kalemi sayıldı: dokuzu sende, altısı sağlayıcıda, biri yaratılışta sabit.
Anahtar grubunun dördü de sende. Yola, sorgu parametrelerine, seçilen başlıklara ve çereze neyin gireceği kiralanan hizmette bile senin yapılandırma satırındır. Paylaşılan bir önbellekte kişiye özel yanıtın başkasına gitmesi daha önce ölçülmüştü; kenarı hizmet olarak kiralamak o kararı devretmiyor, yalnız yanlışın yayılacağı düğüm sayısını kırka çıkarıyor.
Tazelikte üç kalemin ikisi sende. Üçüncüsü — kenarın kendi tazelik üst sınırı — değildir: yazdığın süre bir tavana takılabilir ve o tavan senin kararın değildir.
Sıkıştırmada iki kalemin biri sende. Sıkıştırmanın açık olup olmayacağına sen karar veriyorsun, hangi algoritmanın hangi düzeyde uygulanacağına sağlayıcı. Bu ikinci kalem doğrudan birinci tabloya bağlanır: sıkıştırma düzeyi yanıtın bayt boyutunu, bayt boyutu da yüz altmış GB’lik toplamı ve dolayısıyla hem kenar hem kaynak çıkış ücretini belirler. Faturanın çarpanı sağlayıcının seçimindedir.
Dağıtım grubunun altı kaleminden yalnız ikisi sende. Düğüm sayısı ve yerleşimi, istemcinin hangi düğüme düştüğü, bellek dolunca hangi nesnenin atıldığı ve yayılmanın ne kadar sürdüğü — dördü de bu dersin ölçtüğü sayıları doğrudan etkiliyor ve dördü de karar dışı. Özellikle atma politikası önemlidir: yüzde altmış yedilik dönüş noktası senin hesabındır, ama o noktaya ulaşıp ulaşmadığını kısmen sağlayıcının bellek yönetimi belirler.
Yaratılışta sabitlenen tek kalem dağıtım adıdır. Bir dağıtımın adı sonradan değişmez; değiştirmek yeni bir dağıtım yaratmak ve bir önceki dersin ölçtüğü ad tümleştirmesini yeniden kurmaktır.
Özet
- Kenarı açmak tek başına faturayı bin dört yüz kırk birimden iki bin dört yüze çıkardı: kenar çıkışı ve istek ücreti isabetten bağımsız, dokuz yüz altmış birimlik sabit bir taban ekliyor.
- Fatura yüzde altmış yedi isabette dönüyor. Yüzde altmışta kaynağa inen istek dört milyondan bir milyon altı yüz bine düşmüşken fatura hâlâ kenarsız düzenin üstünde: kaynak yükünü düşürmek ile parayı düşürmek iki ayrı eşiktir ve ikincisi daha geç gelir.
- Önek geçersizleştirmesi sıfır ücretle bir istek gönderiyor ama on sekiz bin nesne düşürüp kaynağa yüz seksen bin ısınma isteği indiriyor — yüzde doksan isabetli bir ayın kaynak yükünün yüzde kırk beşi. Tek tek yol yedi birim tutuyor ve yirmi dört bin istek üretiyor.
- Geçersizleştirme doksan saniyelik kenar penceresini kapatıyor, üç bin altı yüz saniyelik istemci penceresine hiç dokunmuyor. Yayımlanmış yanıt geri çağrılamaz: kursun geri alınamayan kalemi budur ve sürümlü yol yalnız bundan sonrasını çözer.
- On beş karar kaleminin dokuzu sende kaldı: anahtarın dördü de, tazeliğin ikisi, sıkıştırmanın biri, dağıtımın ikisi. Sıkıştırma düzeyi sağlayıcıdadır ve faturanın çarpanını o belirler.
Sonraki Adım
Bu dersle birlikte dışarıdan gelen isteğin yolu tamamlandı: adres alanı bölündü, trafik yönlendirildi, filtrelendi, dengelendi, adresi kararlı hâle getirildi ve kenara taşındı. Yolun her adımı genel ağdan gelen istemciyi karşılıyor.
Ölçüm ağının kendi bileşenleri de birbirine istek gönderiyor. Toplayıcı veri ambarına yazıyor, pano faturalama servisini çağırıyor ve bir de başka bir hesapta duran ortak bir doğrulama servisi var. Bu trafiğin hiçbiri istemci trafiği değil, ama bugün aynı yoldan akıyor: genel adreslerle, genel ağ üzerinden, kenarın ve dengeleyicinin bütün yüzeyini kullanarak. Çıkış ücreti de aynı sütuna yazılıyor.
İki ağ birbirine genel ağa hiç çıkmadan bağlanabilir. Sonraki ders bunu ölçer: iki ağı doğrudan eşlemek ile tek bir servisi özel bağlantıyla açmak arasında açılan yüzey kaç kalem farkeder, adres alanları çakıştığında ne olur ve bu kararın hangi bölümü kurulduktan sonra sabit kalır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.