İçeriğe geç
academia.sh

Ders 12 / 15

Yük Dengeleyiciler

Yük dengeleyicide katman seçiminin ne belirlediği: aktarım katmanının iki alan görüp beş kuraldan birini uygulayabilmesi ve bin iki yüz isteğin bin yirmi dördünü yanlış havuza göndermesi, kapı ayrımının bunu altı yüz elli üçe indirirken istemciye iki kalem yazması, uygulama katmanının beş kuralı da uygulayıp anahtar kopyasını altıdan bire indirmesi ve sonlandırma noktasını altıdan yediye çıkarması, sağlık denetimi eşiğinin fark etme süresi ile yanlış çıkarma arasında kurduğu takas.

İçindekiler

Bir önceki ders trafiği filtreledi: hangi kaynaktan hangi kapıya gelen isteğin geçeceği kural kural yazıldı ve geçmeyenler sayıldı. Filtreden geçen istek artık ağın içindedir.

Geçen isteğin hangi örneğe gideceği hâlâ belirsiz. Ölçüm ağının panosunu altı örnek sunuyor; bunlardan biri şu anda yeniden başlıyor, biri yüksek yükte, biri de yeni açılmış ve henüz hazır değil. İsteği bir örneğe bağlayan şey yük dengeleyicidir.

Dengeleme algoritmaları — sırayla dağıtım, en az bağlantı, oturum yapışkanlığı — ve sağlık denetiminin ne olduğu daha önce ölçüldü; bu ders o mekaniği tekrarlamaz. Kiralanan katmanda elde kalan karar başkadır: dengeleyicinin hangi katmanda çalışacağı. Katman, dengeleyicinin isteğin neresini görebileceğini belirler ve gördüğü bilgi kadar yönlendirme yapabilir. Burada ölçülen üç şeydir: her katmanın gördüğü alan ve uygulayabildiği kural, uygulama katmanının eklediği tur ile açtığı sonlandırma noktası, ve sağlık denetimi eşiğinin taranması.

  • BA31. Kurgu bölgesel ölçüm ağı: iki ana ad (pano, varlik), beş içerik yolu, altı arka uç örneği. İstek akışı kendi üretecimizle üretilir; tohum 30631 görünürdür ve koşumdan koşuma aynı diziyi verir. Bin iki yüz istek.
  • BA32. Operatörün niyeti beş kuralda yazılıdır: iki yol öneki, bir ana ad, bir yönetim yolu ve bir varsayılan. Kurallar sırayla denenir, eşleşen ilki kazanır.
  • BA33. Aktarım katmanı dengeleyicisi yalnız adres ve kapıyı görür; uygulama katmanı adres, kapı, yol, ana ad ve oturum alanını görür. Kapı ayrımı düzeninde istemci varlık ve yönetim trafiğini ayrı kapılara gönderir — bu, istemci tarafında değişen kalemdir.
  • BA34. El sıkışma turu, sonlandırma noktası ve anahtar kopyası sayıları model sabitidir: aktarım katmanı bağlantıyı geçirir (bir tur, anahtar altı arka uçta), uygulama katmanı bağlantıyı sonlandırıp arkaya yenisini açar (iki tur, anahtar dengeleyicide).
  • BA35. Sağlık denetimi modeli altı örnek ve üç yüz denetim turudur; üçüncü örnek yüz yirminci turda kalıcı olarak bozulur. Sağlıklı örnekte geçici sapma olasılığı her denetimde bağımsızdır ve aralıktan etkilenmez; tohum 41129.
  • BA36. Örnek eşik kadar ardışık başarısız denetimden sonra trafikten çıkarılır, iki ardışık başarılı denetimden sonra geri alınır. Model süre ölçmez; saniye değerleri tur sayısı ile denetim aralığının çarpımıdır.
// dengeleyici/katman.mjs — model: yuk dengeleyici katman secimi ve saglik denetimi esigi.
// Kurgu bolgesel olcum aginin istek akisi kendi uretecimizle uretilir; tohum gorunur.
// Dengeleme algoritmasi yeniden tanimlanmaz; olculen sey katmanin gordugu bilgi, o bilgiyle
// yapabildigi yonlendirme ve actigi yuzeydir.
const TOHUM = 30631, ISTEK = 1200, ARKA_UC = 6;
// [yol, ana ad, agirlik, operatorun istedigi havuz]
const AKIS = [
  ["/harita/bolge", "pano", 30, "harita"], ["/sayac/liste", "pano", 25, "sayac"],
  ["/gecelik/ozet", "pano", 15, "genel"], ["/varlik/logo.png", "varlik", 20, "varlik"],
  ["/yonetim/dugum", "pano", 10, "yonetim"],
];
const TOPLAM = AKIS.reduce((a, x) => a + x[2], 0);
// [bakilan alan, deger, havuz] — kurallar sirayla denenir, sonuncusu varsayilandir
const KURAL = [["yol", "/harita", "harita"], ["yol", "/sayac", "sayac"],
  ["ad", "varlik", "varlik"], ["yol", "/yonetim", "yonetim"], ["kapi", "*", "genel"]];
const KAPILI = ["varlik", "yonetim"];         // kapi ayriminda ayri kapiya alinan havuzlar
const uretec = (t) => { let s = t >>> 0; return () => (s = (Math.imul(s, 1664525) + 1013904223) >>> 0) / 4294967296; };
const sec = (u) => { let e = u * TOPLAM; return AKIS.find((x) => (e -= x[2]) < 0) ?? AKIS[0]; };

function kosu({ alanlar, ayrim }) {
  const r = uretec(TOHUM);
  let dogru = 0, yanlis = 0, bakilan = 0;
  for (let i = 0; i < ISTEK; i += 1) {
    const [yol, ad, , hedef] = sec(r());
    let giden = "genel";
    if (alanlar.includes("yol")) {              // uygulama katmani: kural zinciri yurutulur
      for (const [alan, deger, havuz] of KURAL) {
        bakilan += 1;
        if (alan === "kapi" || (alan === "yol" ? yol.startsWith(deger) : ad === deger)) { giden = havuz; break; }
      }
    } else {                                    // aktarim katmani: yalniz kapiya bakilir
      bakilan += 1;
      giden = ayrim && KAPILI.includes(hedef) ? hedef : "genel";
    }
    if (giden === hedef) dogru += 1; else yanlis += 1;
  }
  const kural = KURAL.filter(([alan, , havuz]) =>
    alanlar.includes(alan) || (ayrim && KAPILI.includes(havuz))).length;
  return { dogru, yanlis, bakilan, kural };
}

// [ad, gorulen alanlar, kapi ayrimi, el sikisma turu, sonlandirma noktasi, anahtar kopyasi]
const DUZEN = [
  ["aktarim/tek kapi", ["adres", "kapi"], false, 1, ARKA_UC, ARKA_UC],
  ["aktarim/kapi ayrimi", ["adres", "kapi"], true, 1, ARKA_UC, ARKA_UC],
  ["uygulama katmani", ["adres", "kapi", "yol", "ad", "oturum"], false, 2, ARKA_UC + 1, 1],
];
const E = [22, 13, 16, 13, 13, 15];
const yaz = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](E[i])).join("");
console.log(yaz(["duzen", "gorulen alan", "uygulanan kural", "dogru havuz", "yanlis havuz",
  "istemci kalemi"]));
const O = [];
for (const [ad, alanlar, ayrim] of DUZEN) {
  const o = kosu({ alanlar, ayrim });
  O.push(o);
  console.log(yaz([ad, alanlar.length, o.kural, o.dogru, o.yanlis, ayrim ? KAPILI.length : 0]));
}
const P = [22, 14, 16, 20, 16];
const yaz2 = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](P[i])).join("");
console.log("\n" + yaz2(["duzen", "el sikisma tur", "bakilan alan", "sonlandirma noktasi",
  "anahtar kopyasi"]));
DUZEN.forEach(([ad, , , tur, son, anahtar], i) =>
  console.log(yaz2([ad, tur, O[i].bakilan, son, anahtar])));

// --- Saglik denetimi esigi ------------------------------------------------------
// Model: alti ornek, uc yuz denetim turu. Ucuncu ornek 120. turda kalici olarak bozulur.
// Saglikli ornekte gecici sapma olasiligi her denetimde bagimsizdir ve araliktan etkilenmez.
const ORNEK = 6, DENETIM = 300, BOZULMA = 120, SAPMA = 0.06, TOHUM2 = 41129, BOZUK = 3;
function saglik(esik) {
  const r = uretec(TOHUM2);
  const ardisik = Array(ORNEK).fill(0), disarida = Array(ORNEK).fill(false);
  const basarili = Array(ORNEK).fill(0);
  let farkTur = 0, yanlisCikarma = 0, kayipTur = 0;
  for (let t = 1; t <= DENETIM; t += 1) {
    for (let o = 0; o < ORNEK; o += 1) {
      const kalici = o === BOZUK && t >= BOZULMA;
      const basarisiz = (r() < SAPMA) || kalici;
      if (basarisiz) { ardisik[o] += 1; basarili[o] = 0; } else { ardisik[o] = 0; basarili[o] += 1; }
      if (!disarida[o] && ardisik[o] >= esik) {
        disarida[o] = true;
        if (kalici) { if (farkTur === 0) farkTur = t; } else yanlisCikarma += 1;
      } else if (disarida[o] && basarili[o] >= 2) disarida[o] = false;
      if (disarida[o] && !kalici) kayipTur += 1;
    }
  }
  return { farkTur, yanlisCikarma, kayipTur };
}
const S = [12, 8, 17, 16, 17, 20, 13];
const yaz3 = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](S[i])).join("");
console.log("\n" + yaz3(["aralik(sn)", "esik", "fark etme turu", "fark etme(sn)", "yanlis cikarma",
  "kayip kapasite(sn)", "denetim/dk"]));
for (const aralik of [2, 5, 10]) {
  for (const esik of [1, 2, 3]) {
    const s = saglik(esik);
    console.log(yaz3([aralik, esik, s.farkTur, (s.farkTur - BOZULMA + 1) * aralik,
      s.yanlisCikarma, s.kayipTur * aralik, (60 / aralik) * ORNEK]));
  }
}
duzen                  gorulen alan uygulanan kural  dogru havuz yanlis havuz istemci kalemi
aktarim/tek kapi                  2               1          176         1024              0
aktarim/kapi ayrimi               2               3          547          653              2
uygulama katmani                  5               5         1200            0              0

duzen                 el sikisma tur    bakilan alan sonlandirma noktasi anahtar kopyasi
aktarim/tek kapi                   1            1200                   6               6
aktarim/kapi ayrimi                1            1200                   6               6
uygulama katmani                   2            3075                   7               1

aralik(sn)      esik   fark etme turu   fark etme(sn)   yanlis cikarma  kayip kapasite(sn)   denetim/dk
2                  1              120               2               78                 330          180
2                  2              121               4                2                   8          180
2                  3              122               6                0                   0          180
5                  1              120               5               78                 825           72
5                  2              121              10                2                  20           72
5                  3              122              15                0                   0           72
10                 1              120              10               78                1650           36
10                 2              121              20                2                  40           36
10                 3              122              30                0                   0           36

Görülen Alan, Uygulanabilen Kural

Birinci tablonun ilk sütunu katmanın gördüğü alan sayısıdır: aktarım katmanı iki, uygulama katmanı beş. İkinci sütun bu görüşle uygulanabilen kural sayısıdır.

Operatörün yazdığı beş kuraldan aktarım katmanı yalnız birini uygulayabiliyor: varsayılanı. Diğer dördü yola ya da ana ada bakıyor ve aktarım katmanı bu iki alanı hiç görmüyor. Sonuç üçüncü sütunda: bin iki yüz isteğin yalnız yüz yetmiş altısı operatörün istediği havuza gitti, bin yirmi dördü yanlış havuza düştü. Doğru gidenler yalnızca zaten varsayılana ait olan gecelik özet istekleridir.

Bu, yanlış yapılandırma değildir. Kural yazılmıştır ve doğrudur; dengeleyici kuralın baktığı alanı görmediği için uygulayamaz. Beş kurallık bir niyet, iki alanlık bir görüşe sığmıyor.

İkinci satır bu sıkışmanın bilinen çözümünü ölçüyor: kapı ayrımı. Varlık trafiği bir kapıya, yönetim trafiği başka bir kapıya alınıyor. Aktarım katmanı kapıyı gördüğü için bu iki kuralı artık uygulayabiliyor — uygulanan kural sayısı bire değil üçe çıkıyor, doğru havuza giden istek yüz yetmiş altıdan beş yüz kırk yediye yükseliyor.

Kazanç son sütunda ödeniyor. Kapı ayrımı dengeleyicide değil, istemcide bir değişikliktir: iki kalem istemci yapılandırması değişti. Harita ile sayaç istekleri ise hâlâ aynı ana ada, aynı kapıya geliyor — bunları kapıyla ayırmanın yolu yok, altı yüz elli üç istek yanlış havuzda kalıyor.

Üçüncü satırda uygulama katmanı beş alanı görüyor, beş kuralı da uyguluyor, yanlış havuza giden istek sıfır, istemcide değişen kalem sıfır.

Uygulama Katmanının Faturası

İkinci tablo aynı üç düzenin bedelini sayıyor.

Bakılan alan sütunu hesaplanmıştır: aktarım katmanı her istekte tek alana bakıyor (kapı), toplam bin iki yüz bakış. Uygulama katmanı kural zincirini eşleşene kadar yürütüyor — harita isteği birinci kuralda, sayaç ikincide, varlık üçüncüde, yönetim dördüncüde, gecelik özet ise beşinci kurala kadar iniyor. Ağırlıklı toplam üç bin yetmiş beş bakış, iki buçuk katı. Zincirin sırası ölçülebilir bir şeydir: ağır trafiği başa almak bu sayıyı düşürür.

El sıkışma turu sütunu daha keskin. Aktarım katmanı bağlantıyı geçirir: şifreli oturum istemci ile arka uç arasında kurulur, dengeleyici baytları taşır, tur sayısı bir. Uygulama katmanı isteğin yolunu okumak zorundadır ve okumak için şifreyi çözmek zorundadır: oturum dengeleyicide sonlanır, arkaya ikinci bir oturum açılır, tur sayısı iki.

Son iki sütun bu zorunluluğun iki yüzünü gösteriyor ve ikisi ters yöne bakıyor.

Anahtar kopyası aktarım katmanında altıdır: şifre arka uçta sonlandığı için özel anahtarın altı örneğin her birinde durması gerekir. Anahtarı değiştirmek altı makineye dokunmak demektir. Uygulama katmanında anahtar kopyası bire iner — anahtar yalnız dengeleyicidedir.

Sonlandırma noktası ters yöne gidiyor: altıdan yediye. İsteğin baş kısmı önce dengeleyicide düz metne dönüyor, sonra arka uçta bir daha. Eklenen nokta öbür altısına benzemez: kiralanan bileşendir. Yolu, ana adı, oturum çerezini ve isteği yapan adresi gören, işletilmeyen bir bileşen zincire girdi. O bileşen bu alanları kendi günlüğüne de yazar ve günlüğün nerede durduğu bu dersin kararları arasında değildir.

Takas tek cümlede sayılabilir: anahtar kopyası altıdan bire, sonlandırma noktası altıdan yediye, yanlış yönlendirme bin yirmi dörtten sıfıra.

Sağlık Denetiminin Üç Sayısı

Üçüncü tablo dengeleyicinin ikinci işini ölçüyor. Kiralanan dengeleyicide sağlık denetiminin nasıl çalıştığı sağlayıcının işidir; elde kalan üç sayıdır: aralık, eşik ve denetim yolu. Tarama bu üç sayıdan ikisini geziyor.

Fark etme turu eşiğe bağlı ve aralıktan bağımsızdır: eşik bir iken bozuk örnek yüz yirminci turda, eşik üç iken yüz yirmi ikinci turda çıkarılıyor. Aynı tur sayısı, aralık iki saniyeyken iki ila altı saniyeye, aralık on saniyeyken on ila otuz saniyeye karşılık geliyor. Bozuk örneğin trafik almaya devam ettiği süre budur.

Yanlış çıkarma sütunu ters yönde çalışıyor. Eşik bir iken yetmiş sekiz kez sağlıklı bir örnek trafikten çıkarıldı: tek bir başarısız denetim, geçici bir sapma, ve örnek dışarı alındı. Eşik ikiye çıktığında bu sayı ikiye, üçe çıktığında sıfıra iniyor.

Kayıp kapasite sütunu yanlış çıkarmanın faturasıdır. Eşik bir ve aralık on iken bin altı yüz elli saniye: altı örnekten biri sırayla dışarı alınıp geri kondu ve yaklaşık yirmi sekiz dakika boyunca kapasite eksik çalıştı. Aynı satırda bozuk örnek on saniyede fark edilmişti. On saniyelik kazanç için bin altı yüz elli saniyelik kapasite ödendi.

Son sütun üçüncü bedeli sayıyor: aralığı kısaltmak denetim isteğini çoğaltır. Aralık on iken dakikada otuz altı denetim isteği, aralık iki iken yüz seksen. Bu istekler arka uca iner ve denetim yolu ucuz değilse ölçülebilir yük oluşturur.

Üç sütun birlikte okunduğunda düzen ortaya çıkıyor: aralık hızı belirler ve yükü ödetir, eşik doğruluğu belirler ve gecikmeyi ödetir. Eşiği üçte tutup aralığı ikiye indirmek altı saniyede fark etme, sıfır yanlış çıkarma ve dakikada yüz seksen denetim isteği verir. Eşik bir ve aralık iki iki saniyede fark ediyor ama üç yüz otuz saniye kapasite kaybediyor: dört saniyelik fark, üç yüz otuz saniyeye mal oluyor.

Elde Kalan Karar

Kiralanan dengeleyicide sağlayıcının devraldığı kalemler bellidir: dağıtım algoritmasının uygulaması, dengeleyicinin kendi kapasitesi ve ölçeklenmesi, bağlantı kuyruğunun sınırları, düğümlerin nereye yerleştiği. Bunların hiçbiri bu derste ölçülmedi, çünkü üzerlerinde karar yok.

Elde kalan dokuz kalem sayılabilir: katman, kural zinciri ve sırası, arka uç havuzlarının tanımı, sağlık denetimi yolu, aralık, eşik, zaman aşımı, anahtarın nerede duracağı, oturum yapışkanlığı. Sekizi her an değişir.

Dokuzuncusu değişmez. Katman, dengeleyici yaratıldığında sabitlenir. Aktarım katmanı dengeleyicisi sonradan uygulama katmanına dönmez; dönüştürme diye bir işlem yoktur. Yapılan şey yeni bir dengeleyici yaratmak, ona yeni bir uç adı verilmesini beklemek ve bütün istemcileri o ada taşımaktır. Bu dersin geri alınamayan kalemi budur.

Bedeli tabloda duruyor. Aktarım katmanıyla başlayan bir kurulum bin yirmi dört yanlış yönlendirmeyi kapı ayrımıyla altı yüz elli üçe indirebilir ve bunun için istemcide iki kalem değiştirir. Kalan altı yüz elli üçü kapatmak katman değiştirmek, katman değiştirmek de istemcinin bağlandığı adı değiştirmektir: kapı ayrımı için dokunulan iki kalem yeniden dokunulacaktır.

Özet

  • Aktarım katmanı iki alan (adres, kapı) görüyor ve beş kuraldan yalnız varsayılanı uygulayabiliyor; bin iki yüz isteğin bin yirmi dördü yanlış havuza düştü. Uygulama katmanı beş alan görüyor, beş kuralı da uyguluyor, yanlış yönlendirme sıfır.
  • Kapı ayrımı aktarım katmanına iki kural kazandırdı ve doğru yönlendirmeyi yüz yetmiş altıdan beş yüz kırk yediye çıkardı; bedeli istemcide değişen iki kalem oldu ve aynı ada gelen harita ile sayaç trafiği ayrılamadı.
  • Uygulama katmanı bakılan alanı bin iki yüzden üç bin yetmiş beşe, el sıkışma turunu birden ikiye çıkardı; anahtar kopyasını altıdan bire indirirken sonlandırma noktasını altıdan yediye çıkardı ve eklenen nokta kiralanan bileşenin kendisidir.
  • Sağlık denetiminde eşiği birden üçe çıkarmak yanlış çıkarmayı yetmiş sekizden sıfıra indirdi ve fark etme süresini eşik sayısı kadar tur uzattı; aralık hızı belirleyip denetim yükünü ödetiyor, eşik doğruluğu belirleyip gecikmeyi ödetiyor.
  • Eşik bir ve aralık on düzeninde bozuk örnek on saniyede fark edildi ama bin altı yüz elli saniyelik sağlıklı kapasite boşuna dışarıda kaldı; on saniyelik kazancın bedeli budur.
  • Elde kalan dokuz kalemden sekizi her an değişir; katman değişmez. Katmanı değiştirmek yeni bir dengeleyici ve yeni bir uç adı demektir — bu dersin geri alınamayan kalemi.

Sonraki Adım

Bu ders dengeleyiciyi kurdu ve arkasındaki altı örneği trafiğe bağladı. Bütün ölçümler tek bir şeyi sabit varsaydı: istemcinin bağlandığı .

O uç sabit değildir. Örnek değiştiğinde adresi değişir, dengeleyici yeniden yaratıldığında adı değişir, ölçekleme grubunun eklediği her örnek yeni bir adresle gelir. İstemcinin elinde ise tek bir adres ya da tek bir ad vardır ve o değer yapılandırma dosyasında, izleme hedefinde, üçüncü tarafın izin listesinde ayrı ayrı yazılıdır.

Sonraki ders adres kararlılığını üç düzende karşılaştırır: adresin örnekle birlikte gitmesi, ayrı bir kaynak olarak taşınması ve ada bağlanması. Ölçülen şey istemcinin değişimi kaç saniyede fark ettiği, elle güncellenen kaç kalem olduğu ve bayat adrese kaç isteğin gittiğidir. Kalıcı adresin kendi bedeli de sayılır: sayısı sınırlıdır, taşınması bir işlemdir ve kullanılmayanı da ücret yazar.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat