İçeriğe geç
academia.sh

Ders 10 / 16

Ağ Otomasyonunun Gerekçesi

Elle yapılandırmada hata dokunuş sayısıyla büyür: kırk aygıtta 122 alan dokunuşu 12 hata ve 10 hatalı aygıt üretir. Şablon dokunuşu 1'e indirir ama beklenen hatalı aygıt 9,76'dan 11,34'e çıkar ve şablonun dışında kalan altı aygıtlık kuyruk yerinde durur.

İçindekiler

Önceki ders uçtan uca sağlık göstergelerini ölçtü ve buraya kadar dokunulan her kaldıraç aynı türdendi: gözlemin kaldıracı. Örnekleme oranı, yakalama filtresi, sorgu aralığı — üçü de ağın ne yaptığını değil, ağın ne kadarını gördüğümüzü belirliyordu. Yanlış ayarlanmış bir örnekleme oranı bir aygıtı bozmaz, yalnızca gizler; kaldıracı geri çevirdiğinizde aygıt oradadır.

Bu konu kaldıracı değiştiriyor. Kaldıraç artık yapılandırmanın kendisi. Yanlış yazılmış bir şablon bir aygıtı gizlemez, onu değiştirir; ve değişiklik uygulandıktan sonra kaldıracı geri çevirmek eski durumu geri getirmez, çünkü eski durum artık hiçbir yerde durmuyordur. Bu dersin sorusu otomasyonun iyi bir fikir olup olmadığı değil — elle yapılandırmanın hatasının neyle büyüdüğü, otomasyonun bu büyümeyi nasıl kestiği, ve kestikten sonra geriye hangi kuyruğun kaldığıdır.

Dokunuş: Elle Yapılandırmanın Birimi

Elle yapılandırmanın birimi aygıt değildir, alandır. Bir operatör kırk aygıtı yapılandırırken kırk kez değil, her aygıtta o aygıtın gerektirdiği alan sayısı kadar karar verir ve o kadar kez yazar. Aygıtlar birbirinin aynı olmadığı için bu sayı da aynı değildir.

# ogretilen yapilandirma dokumu , calistirilmamistir

aygıt 14                          aygıt 33
  arayuz    : ana                   arayuz      : ana
  adres     : /24                   adres       : /24
  zamanlayici: 400 ms               oncelik     : etkilesim
                                    yerel_kural : var

İki aygıt, dört ve dört değil, üç ve dört alan. Kapasitesi yüksek olan aygıt bir bağlantı toplama alanı ister, gecikmesi yüksek olan bir zamanlayıcı ister, etkileşim sınıfındaki bir öncelik alanı ister, ve şablonun dışında kalması gereken özel aygıt hiçbir şablonun taşımadığı bir yerel kural ister. Yapılandırmanın toplam yüzeyi aygıt sayısı değil, bu alanların toplamıdır.

Bunun doğrudan sonucu şudur: elle yapılandırmada hata, aygıt sayısıyla değil, dokunuş sayısıyla büyür — ve dokunuş sayısı aygıt sayısıyla birlikte büyüdüğü için sonuç aynı kapıya çıkar. Kırk aygıtlık bir değişiklik on aygıtlık bir değişikliğin dört katı hata üretmez; dokunuş sayısı kaç katına çıktıysa o kadar katına çıkarır.

Elle Yapılandırmanın Hata Modları

Dört mod ayrılır ve dördü ayrı ayrı sayılabilir.

Yanlış yazılan alan. Değer yazılır, sözdizimi doğrudur, aygıt kabul eder ve yanlıştır. Aygıt bir kusur bildirmez çünkü kusur yoktur; niyet ile yazılan arasındaki fark aygıtın göremeyeceği bir farktır.

Atlanan aygıt. Kırk aygıtın otuz dokuzu değişir, biri değişmez. Bu aygıt uzun süre çalışmaya devam eder ve fark ancak onu ötekilerden ayıran bir olay olduğunda görülür.

Sıraya bağlı kısmi uygulama. Değişiklik yarıda kesilirse aygıtların bir kısmı yeni, bir kısmı eski yapılandırmayla kalır. Ağ bu iki kümenin arasında tutarsız davranır.

Belge ile aygıtın ayrışması. Yazılı yapılandırma bir yerde durur, aygıttaki gerçek yapılandırma başka bir şeydir. Bu farka yapılandırma sapması (configuration drift) denir ve Kablosuz Ağlar ve Ağ Güvenliği kursunda sınırın niyet edilen hâli ile gerçekten geçen arasındaki fark olarak kuruldu. Burada aynı fark yapılandırmanın kendisinde ölçülür.

Dördünün ortak yanı, hiçbirinin aygıt tarafından bildirilmemesidir. Aygıt kendisine yazılanı uygular; yazılanın doğru olup olmadığı aygıtın bilgisi dışındadır.

Şablon Tek Dokunuştur

Otomasyonun tek bir yapısal iddiası vardır: dokunuş sayısını aygıt sayısından bağımsız kılmak. Yapılandırma bir kez yazılır, bir kez gözden geçirilir, ve kırk aygıta bir işlemle uygulanır. Yazılan şey komut dizisi değil, istenen son durumdur — bu yaklaşıma bildirimsel (declarative) denir; aracın ne yapacağını değil, sonucun ne olacağını tanımlar.

Kod olarak altyapı yordamının kendisi ve araç seçimi Kod Olarak Altyapı kursunun konusudur ve burada tekrarlanmaz. Bu kursta nesne bir sunucu ya da bir bulut kaynağı değil, ağ aygıtıdır; ve ölçülen şey yordamın verimi değil, şablonun dışında kalan azınlıktır.

Dokunuşu bire indirmenin bir bedeli var ve bedel hatanın yayılımıdır. Elle yapılandırmada yanlış yazılan bir alan bir aygıtı bozar. Şablonda yanlış yazılan bir alan kırk aygıtı birden bozar. Hata olasılığı düşmez, hatanın büyüklüğü değişir: elle yapılandırma çok sayıda küçük hata üretir, şablon az sayıda çok büyük hata üretir.

Ölçümün varsayımları:

  • OT1 — Kırk aygıtlık özne kümesi kursun sabitidir ve bu derste değiştirilmez. Kâhin kurgunun kendisidir: hangi aygıtın özel olduğunu biz yazdığımız için biliriz.
  • OT2 — Bir aygıtın elle yazılması gereken alanları niteliklerinden türetilir: her aygıtta arayüz ve adres, etkileşim sınıfında öncelik, gecikmesi 30 birimin üstündeyse zamanlayıcı, kapasitesi 80 birimin üstündeyse toplama, özel aygıtta yerel kural.
  • OT3 — Elle yazılan her alanda hata olasılığı binde 80’dir ve alanlar bağımsızdır. Bu oran bir ölçüm değil, kurgunun varsayımıdır; değiştirilirse bütün satırlar aynı yönde ölçeklenir.
  • OT4 — Şablon dört alan taşır ve bir kez yazılır. Aynı alan başına oranla şablonun hatalı çıkma olasılığı hesaplanır; şablon hatalıysa kırk aygıtın kırkı birden hatalıdır.
  • OT5 — Şablon aygıtın sınıfına göre yazılır. Sınıfı şablonunkiyle uyuşmayan özel aygıt sapar; sapma aygıtın kusuru değil, şablonun kapsam kararıdır.
  • OT6 — Rapor etkileşim sınıfının göstergeleri üzerine kuruludur; başka sınıftaki bir sapma rapora hiç düşmez. Bu bir varsayımdır, bir ölçüm değil.

Ölçüm

"""Elle yapilandirma ile sablonun hata modeli.

Bolum 1 - elle kampanya: dokunus sayisi ozne sayisiyla buyur, hata onunla.
Bolum 2 - sablon tek dokunustur; hata yayilir, beklenen sayi dusmez.
Bolum 3 - sablonun kendi kuyrugu: disinda kalan ve raporda gorunmeyen.
"""
TOHUM = 20260812
HATA_BINDE = 80


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def ozneler(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kapasite": 20 + r(81),
                      "gecikme": 5 + r(45),
                      "sinif": ("etkilesim", "toplu", "yedek")[r(3)],
                      "ozel": r(9) == 0})
    return liste


def alanlar(o):
    """Aygitin elle yazilmasi gereken yapilandirma alanlari."""
    a = ["arayuz", "adres"]
    if o["sinif"] == "etkilesim":
        a.append("oncelik")
    if o["gecikme"] > 30:
        a.append("zamanlayici")
    if o["kapasite"] >= 80:
        a.append("toplama")
    if o["ozel"]:
        a.append("yerel_kural")
    return a


def elle(oz, kac, tohum):
    """Kac aygita tek tek dokunulur; her alanda binde HATA_BINDE hata."""
    r, hatali = uretec(tohum), set()
    dokunus = hata = 0
    for o in oz[:kac]:
        for _ in alanlar(o):
            dokunus += 1
            if r(1000) < HATA_BINDE:
                hata += 1
                hatali.add(o["no"])
    return dokunus, hata, len(hatali)


def uygula(oz, sablon_sinifi):
    """Tek sablon kirk aygita uygulanir; ozel aygitlar sapar."""
    uyan = sapan = gizli = 0
    for o in oz:
        if o["sinif"] == sablon_sinifi or not o["ozel"]:
            uyan += 1
        else:
            sapan += 1
            if o["sinif"] != "etkilesim":
                gizli += 1
    return uyan, sapan, gizli


oz = ozneler()
oran = HATA_BINDE / 1000
print(f"özne {len(oz)} | elle yazılacak toplam alan "
      f"{sum(len(alanlar(o)) for o in oz)} | alan başına hata {oran:.3f}")
print()
print(f"{'kampanya':>9s} {'dokunuş':>8s} {'hata':>5s} {'hatalı aygıt':>13s} "
      f"{'dokunuş başına hata':>20s}")
for kac in (10, 20, 40):
    d, h, a = elle(oz, kac, TOHUM + 7)
    print(f"{kac:9d} {d:8d} {h:5d} {a:13d} {h / d:20.3f}")

print()
p = 1 - (1 - oran) ** 4
print(f"{'yordam':<12s} {'dokunuş':>8s} {'hatalı çıkma':>13s} "
      f"{'etkilenen aygıt':>16s} {'beklenen hatalı aygıt':>22s}")
d, h, a = elle(oz, 40, TOHUM + 7)
print(f"{'elle':<12s} {d:8d} {'-':>13s} {a:16d} {d * oran:22.2f}")
print(f"{'şablon':<12s} {1:8d} {p:13.3f} {len(oz):16d} {p * len(oz):22.2f}")

print()
print(f"{'şablon sınıfı':<14s} {'uyan':>6s} {'sapan':>6s} "
      f"{'raporda görünmeyen':>19s}")
for s in ("etkilesim", "toplu", "yedek"):
    u, sp, g = uygula(oz, s)
    print(f"{s:<14s} {u:6d} {sp:6d} {g:19d}")
özne 40 | elle yazılacak toplam alan 122 | alan başına hata 0.080

 kampanya  dokunuş  hata  hatalı aygıt  dokunuş başına hata
       10       30     3             3                0.100
       20       60     5             5                0.083
       40      122    12            10                0.098

yordam        dokunuş  hatalı çıkma  etkilenen aygıt  beklenen hatalı aygıt
elle              122             -               10                   9.76
şablon              1         0.284               40                  11.34

şablon sınıfı    uyan  sapan  raporda görünmeyen
etkilesim          34      6                   6
toplu              34      6                   3
yedek              34      6                   3

Elle Yapılandırmanın Ödettiği

Üst tablo iddiayı doğrudan veriyor. Kampanya on aygıttan kırk aygıta çıktığında dokunuş 30’dan 122’ye, hata 3’ten 12’ye çıkıyor. Sağdaki sütun ise neredeyse sabit kalıyor: dokunuş başına hata 0,100, 0,083 ve 0,098. Bu sabitlik ölçümün asıl sonucudur — hata bir yetenek sorunu değil, bir çarpma işlemidir. Operatör daha dikkatli olduğunda oran düşer; aygıt sayısı arttığında çarpan büyür ve dikkatin ne kadar düştüğünü hiçbir gösterge söylemez.

Hatalı aygıt sayısı hata sayısından küçüktür: 12 hata 10 aygıta dağılıyor, yani iki aygıt birden fazla yanlış alan taşıyor. Bu ayrım işletmede önemlidir çünkü onarımın birimi aygıttır, alan değil; on aygıta dönmek gerekir, on ikisine değil.

Üç satırın hiçbirinde sıfır yok. Kampanya küçültülerek hata sıfırlanmıyor, yalnızca küçültülüyor — ve küçültmenin bedeli aynı değişikliğin daha çok parçaya bölünmesidir.

Otomasyonun Ödettiği

Orta tablo iki yordamı yan yana koyuyor ve beklenmedik bir yerde buluşuyorlar. Elle yapılandırma 122 dokunuşta 10 hatalı aygıt bırakıyor; beklenen değer 9,76. Şablon dokunuşu 1’e indiriyor ama şablonun hatalı çıkma olasılığı 0,284’tür ve şablon hatalıysa etkilenen aygıt 40’tır. Beklenen hatalı aygıt 11,34.

Yani otomasyon beklenen hata sayısını düşürmedi — bu kurguda hafifçe yükseltti. Değişen şey dağılımdır. Elle yapılandırma her seferinde on civarında hatalı aygıt üretir. Şablon ise seferlerin çoğunda sıfır, kalanında kırk üretir. Aynı ortalama, bambaşka bir işletme: birincisi sürekli ve dayanılabilir bir onarım yükü, ikincisi seyrek ama ağın tamamını kapsayan bir olay.

Bu yüzden otomasyonun gerekçesi “daha az hata” değildir. Gerekçe üç yerdedir: hata tek bir yerde durur ve orada gözden geçirilebilir; değişiklik uygulanmadan önce sınanabilir; ve uygulandıktan sonra aynı biçimde geri alınabilir. Elle yapılandırmada bunların üçü de yoktur, çünkü niyetin yazılı bir hâli yoktur.

Otomasyonun Kaldırmadığı Kuyruk

Alt tablo bu dersin asıl sonucunu taşıyor ve konu boyunca değişmeden kalacak. Şablon hangi sınıfa göre yazılırsa yazılsın uyan aygıt 34, sapan aygıt 6’dır. Kırk aygıtın dokuzu özeldir ve şablonun sınıfıyla uyuşan üçü dışında kalan altısı her seferinde kaldıracın dışında kalır. Sapan sayısı kaldıracın niteliğine göre değişmiyor — çünkü sapma şablonun yanlış yazılmasından değil, tek bir şablonun kırk farklı aygıtı temsil etme iddiasından doğuyor.

Sağdaki sütun ise değişiyor: raporda görünmeyen sapan 6, 3 ve 3. Etkileşim sınıfına göre yazılan şablonda sapanların hepsi başka sınıflardadır ve raporda hiçbiri görünmez; öteki iki şablonda altının yarısı görünür. Kuyruğun büyüklüğü sabittir, görünen kısmı değildir. Bu ayrım konunun eksenidir ve dördüncü derste tam olarak ödenecektir.

Kırk öznelik bir kümede ölçülebilen en küçük fark 1/40 = 0,025’tir. Altı ile üç arasındaki fark bunun yüz yirmi katıdır ve ölçüm bandının rahatça içindedir.

Envanterin Sınırı

Yukarıdaki üç tablo aynı sessiz kabulü paylaşıyor: kırk aygıtın kırkı da biliniyor. Ölçüm kırk özne üzerinde koşuyor çünkü özne kümesi kurgunun kendisi; işletmede bu küme bir envanterden gelir ve envanter de elle ya da bir keşif yordamıyla yazılmıştır.

Bunun sonucu hem elle yordamı hem otomasyonu ilgilendirir. Envanterde olmayan bir aygıta operatör dokunmaz, şablon da dokunmaz. Elle yapılandırmada bu aygıt en azından bir gün birine görünme şansı taşır — biri onu yanlışlıkla bulur. Şablonla yönetilen bir ağda ise aygıt hiçbir raporda, hiçbir uygulama özetinde ve hiçbir sapma listesinde geçmez; çünkü bütün bu belgeler envanteri gezerek üretilir. Kaldıraç envanterin dışına uzanmaz ve envanterin dışında kaldığı için de kimseye bunu bildirmez.

Bu, kaldıracın kuyruğunun ikinci biçimidir. Birincisi ölçtüğümüz altı sapan aygıttı: bilinen ama şablona sığmayan azınlık. İkincisi hiç bilinmeyen azınlıktır ve bu dersin kurgusunda sayısı sıfırdır, çünkü envanteri biz yazdık. Gerçek bir ağda o sayı sıfır değildir ve ölçüsü, envanterin bağımsız bir keşifle karşılaştırılmasıdır — bir kaldıracın ne yaptığını yine başka bir kaldıraçla sorarız.

Geri Alınamazlık ve Üç Koruma

Bu konudaki her toplu değişiklik geri alınamaz bir işlemdir: kırk aygıta uygulanan bir şablon, uygulandığı anda kırk aygıttaki önceki durumu siler. Bir aygıtın yapılandırmasını boşaltan, arayüzünü kapatan ya da yönetim erişimini kesen bir değişiklik ağı ikiye bölebilir ve bölünmüş ağın öteki yarısına ulaşıp düzeltme yapmak mümkün olmayabilir. Böyle bir değişikliğin komutu bu kursta çalıştırılabilir biçimde yazılmaz; yazılan şey ne yaptığı ve geri alınamaz olduğudur.

Buna karşı üç koruma vardır ve üçü birlikte kullanılır.

Kuru çalışma (dry run) değişikliği uygulamadan sonucunu hesaplar: hangi aygıtta hangi alanın değişeceğini önceden listeler. Yukarıdaki altı sapan aygıtı raporun göremediği yerde bile gösterebilen tek yordam budur, çünkü kuru çalışma raporu değil niyeti aygıtın gerçek durumuyla karşılaştırır.

Kademeli yayma (staged rollout) değişikliği kırk aygıta birden değil, dilimler hâlinde uygular. Amaç hatayı önlemek değil, hatanın etkilediği aygıt sayısını sınırlamaktır.

Geri alma (rollback) önceki durumun uygulanabilir bir kopyasını saklar. Kopya yoksa geri alma yoktur; bu yüzden geri alma bir işlem değil, değişiklikten önce verilmiş bir karardır.

Kimlik bilgisi, anahtar ve erişim belirteci bu konudaki hiçbir örnekte yazılmaz; aygıta erişimin nereden geldiği işletmenin ayrı bir kararıdır ve yapılandırma metninin içinde durmaz.

Özet

  • Elle yapılandırmanın birimi aygıt değil alandır; kırk aygıt 122 alan dokunuşu ister ve hata dokunuş sayısıyla büyür — 30/60/122 dokunuşta 3/5/12 hata.
  • Dokunuş başına hata oranı 0,100 / 0,083 / 0,098 ile neredeyse sabit kalır; hata bir yetenek sorunu değil, dokunuş sayısıyla yapılan bir çarpmadır.
  • Şablon dokunuşu 1’e indirir ama hatayı yayar: beklenen hatalı aygıt 9,76’dan 11,34’e çıkar. Değişen şey ortalama değil, dağılımdır — çoğu seferde 0, kalanında 40.
  • Otomasyonun gerekçesi az hata değil; niyetin tek bir yerde durması, uygulanmadan sınanabilmesi ve aynı biçimde geri alınabilmesidir.
  • Şablon hangi sınıfa göre yazılırsa yazılsın uyan 34, sapan 6’dır; değişen tek şey raporda görünmeyen sapanın 6, 3 ve 3 olmasıdır.

Sonraki Adım

Bu dersin şablonu bir kabul üzerine kuruluydu: kırk aygıtın yapılandırması aynı alanlarla tarif edilebilir. Ölçüm bu kabulün altısında tutmadığını gösterdi ve nedeni alan listesindeki son satırdı — özel aygıtın istediği yerel kural, hiçbir şablonun taşımadığı bir alandı. Sonraki ders bu alanın peşine düşer: aygıt yapılandırması bir veri modeliyle tanımlandığında model neyi temsil edebilir, hangi aygıt modele sığmaz, ve modelin dışında kalan alan nereye gider.

İ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