İçeriğe geç
academia.sh

Ders 11 / 21

Denetim Günlükleri

Bir olay kümesi denetim kaydına düşürülür ve kaç sorunun yanıtlandığı sayılır: 480 olayın 273'ü dört soruyu birden yanıtlıyor, varsayılan yapılandırmada 88'i. Sekiz soruşturmanın 3'ü yanıtlanıyor. Kaydı 11 özne silebiliyor; ayrı hesaba taşımak 6 meşru işi durduruyor ve veri düzlemi kaydı yönetim düzleminin 772 katına mal oluyor.

İçindekiler

Önceki üç derste aynı cümle defalarca geçti: “hepsi denetim kaydında”. Anahtar kullanımı kayda düşüyordu, sır okumaları kayda düşüyordu, politika değişiklikleri kayda düşüyordu. O cümle şimdiye kadar hiç sınanmadı. Bu ders onu sınar ve ölçüyü tek bir biçime indirir: bir olay kümesi denetim kaydına düşürülür ve kaç soru yanıtlanabiliyor sayılır. Sorular dörttür — kim, ne zaman, hangi kaynak, hangi kimlikten.

Kaydın kapsamadığı bir işlem türü var ve adı yazılmalıdır: veri düzlemi okumaları ve yazmaları. Yönetim düzlemi çağrıları (politika değişikliği, anahtar kullanımı, kaynak oluşturma) varsayılan olarak kaydedilir; nesne okuma, nesne yazma ve kuyruk tüketimi kaydedilmez. Bu kayıt ayrı açılır ve ayrıca ücretlendirilir. İkinci konu kaydın kendisidir: bir denetim günlüğü de bir yüzeydir — kim silebiliyor, nereye yazılıyor, değiştirilemezliği nasıl sağlanıyor.

Ölçüm bölgesel ölçüm ağı üzerindedir, kurgudur ve node ile yazılmış bir modeldir. Para birimi de kurgudur: “b” birimi uydurmadır, gerçek bir fiyat değildir.

BG19. Olay örneklemi 480 işlemdir; günlük hacim yönetim düzleminde 2.400, veri düzleminde 1.860.000 olaydır (kurgu). BG20. Yönetim düzlemi kaydı varsayılan olarak açıktır; veri düzlemi kaydı ayrı açılır ve ayrıca ücretlendirilir. BG21. Olayın kimliği dört türdendir: kullanıcı, rol üstlenmiş kullanıcı, iş yükü kimliği, otomatik servis. Rol üstlenmede tekil özne ancak oturum etiketi varsa okunur. BG22. Toplu işlemler kaynağı tek tek adlandırmaz; kaynak alanı kapsayıcı adıyla dolar ve “hangi kaynak” sorusu yanıtsız kalır. BG23. Kaydın yazıldığı hedef için silebilen, değiştirebilen ve okuyan özne sayıları ile değiştirilemezlik kilidi modelde yazılıdır. BG24. Maliyet kurgu birimle hesaplanır: bin olay alımı 0,4 b, GB-ay saklama 12 b, olay boyutu 1,4 KB. Örneklemli kayıt tekil kaynak sorularını yanıtlamaz. Üreteç kendi yazılmıştır; tohum 20260722’dir.

Kaç Soru Yanıtlanabiliyor

// olay.mjs — denetim kaydina dusen olaylar ve yanitlanabilen sorular. MODELDIR.
// Bolgesel olcum agi KURGUDUR. Uretec kendi yazilmistir; tohum asagida gorunur.
export const TOHUM = 20260722;
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };

export const YONETIM = ["politika-degisikligi", "anahtar-kullanma", "rol-ustlenme",
  "ag-kurali-degisikligi", "sir-okuma", "kaynak-olusturma"];
export const VERI = ["nesne-okuma", "nesne-yazma", "nesne-silme", "kuyruk-tuketimi"];
export const GUNLUK = { yonetim: 2400, veri: 1860000 };    // gunluk olay hacmi (kurgu)

const r = uretec(TOHUM);
export const OLAY = Array.from({ length: 480 }, () => {
  const veriMi = r() < 0.72;
  const islem = veriMi ? VERI[Math.floor(r() * VERI.length)]
    : YONETIM[Math.floor(r() * YONETIM.length)];
  const u = r();
  const kimlik = u < 0.18 ? "kullanici" : u < 0.52 ? "rol-ustlenme"
    : u < 0.86 ? "is-yuku" : "otomatik-servis";
  return { duzlem: veriMi ? "veri" : "yonetim", islem, kimlik,
    etiket: kimlik === "rol-ustlenme" ? r() < 0.38 : true,   // oturum etiketi tekil ozneyi verir
    ayrinti: r() > (veriMi ? 0.34 : 0.12) };                 // toplu islem kaynagi adlandirmaz
});

// Dort soru: kayitta duran bir olay hangilerini yanitliyor.
export const SORU = {
  "ne zaman": () => true,
  "hangi kimlikten": () => true,
  "hangi kaynak": (o) => o.ayrinti,
  "kim (tekil ozne)": (o) => o.kimlik !== "rol-ustlenme" || o.etiket,
};
export const kayitta = (o, veriAcik) => o.duzlem === "yonetim" || veriAcik;

// Sorusturma: bir soru bir isleme, bir alana ve geriye bakis suresine baglidir.
export const SORUSTURMA = [
  ["uretim politika belgesini kim degistirdi", "politika-degisikligi", "kim (tekil ozne)", 12],
  ["arsivden hangi nesneler okundu", "nesne-okuma", "hangi kaynak", 5],
  ["musteri anahtarini hangi kimlik kullandi", "anahtar-kullanma", "hangi kimlikten", 40],
  ["olcum kaydini kim sildi", "nesne-silme", "kim (tekil ozne)", 3],
  ["ag kurali ne zaman gevsetildi", "ag-kurali-degisikligi", "ne zaman", 210],
  ["bakim kimligi hangi sirri okudu", "sir-okuma", "hangi kaynak", 60],
  ["is ortagi jetonunu kim okudu", "sir-okuma", "kim (tekil ozne)", 150],
  ["yedek hangi kaynaga yazildi", "nesne-yazma", "hangi kaynak", 400],
];
export const yanit = (s, veriAcik, saklama) => {
  const [, islem, alan, gun] = s;
  const l = OLAY.filter((o) => o.islem === islem && kayitta(o, veriAcik) && SORU[alan](o));
  if (gun > saklama) return ["hayir", `saklama ${saklama} gun < ${gun}`];
  if (l.length === 0) {
    const kapali = OLAY.some((o) => o.islem === islem) && VERI.includes(islem) && !veriAcik;
    return ["hayir", kapali ? "veri duzlemi kaydi kapali" : `${alan} alani bos`];
  }
  return ["evet", `${l.length} olay`];
};

const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))
  .join("");
const yz = gen([20, 12, 14, 18, 12]);

if (import.meta.url === `file://${process.argv[1]}`) {
  const y = OLAY.filter((o) => o.duzlem === "yonetim").length;
  console.log(`model (tohum ${TOHUM}): ${OLAY.length} olay orneklemi — ${y} yonetim duzlemi, ` +
    `${OLAY.length - y} veri duzlemi; gunluk hacim ${GUNLUK.yonetim} / ${GUNLUK.veri} (kurgu)`);
  console.log("\n" + yz(["soru", "varsayilan", "veri de acik", "kayit disi kalan", "oran"]));
  for (const [ad, f] of Object.entries(SORU)) {
    const v = OLAY.filter((o) => kayitta(o, false) && f(o)).length;
    const t = OLAY.filter((o) => kayitta(o, true) && f(o)).length;
    console.log(yz([ad, v, t, OLAY.length - t, `${Math.round(100 * t / OLAY.length)}%`]));
  }
  const dort = (va) => OLAY.filter((o) => kayitta(o, va) &&
    Object.values(SORU).every((f) => f(o))).length;
  console.log(yz(["dordu birden", dort(false), dort(true), OLAY.length - dort(true),
    `${Math.round(100 * dort(true) / OLAY.length)}%`]));

  for (const [va, sk, ad] of [[false, 90, "varsayilan (yonetim, 90 gun)"],
    [true, 90, "veri duzlemi acik (90 gun)"], [true, 365, "veri duzlemi acik (365 gun)"]]) {
    const s = SORUSTURMA.map((x) => yanit(x, va, sk));
    console.log(`\n${ad}: ${s.filter((x) => x[0] === "evet").length}/${SORUSTURMA.length} soru ` +
      `yanitlaniyor`);
    if (ad.startsWith("varsayilan")) for (const [i, x] of SORUSTURMA.entries())
      console.log(`  ${x[0].padEnd(42)} ${s[i][0].padEnd(6)} ${s[i][1]}`);
  }
}
model (tohum 20260722): 480 olay orneklemi — 132 yonetim duzlemi, 348 veri duzlemi; gunluk hacim 2400 / 1860000 (kurgu)

soru                  varsayilan  veri de acik  kayit disi kalan        oran
ne zaman                     132           480                 0        100%
hangi kimlikten              132           480                 0        100%
hangi kaynak                 119           352               128         73%
kim (tekil ozne)              99           374               106         78%
dordu birden                  88           273               207         57%

varsayilan (yonetim, 90 gun): 3/8 soru yanitlaniyor
  uretim politika belgesini kim degistirdi   evet   16 olay
  arsivden hangi nesneler okundu             hayir  veri duzlemi kaydi kapali
  musteri anahtarini hangi kimlik kullandi   evet   17 olay
  olcum kaydini kim sildi                    hayir  veri duzlemi kaydi kapali
  ag kurali ne zaman gevsetildi              hayir  saklama 90 gun < 210
  bakim kimligi hangi sirri okudu            evet   15 olay
  is ortagi jetonunu kim okudu               hayir  saklama 90 gun < 150
  yedek hangi kaynaga yazildi                hayir  saklama 90 gun < 400

veri duzlemi acik (90 gun): 5/8 soru yanitlaniyor

veri duzlemi acik (365 gun): 7/8 soru yanitlaniyor

İlk sütun varsayılan yapılandırmanın kapsamıdır ve 480 olayın 348’i o sütunda hiç yoktur — veri düzlemi kaydı kapalıdır. “Ne zaman” ve “hangi kimlikten” soruları kalan 132 olayın hepsinde yanıtlanıyor; kayıt bu iki alanı her zaman taşır.

Diğer iki soru taşımıyor. Veri düzlemi de açıldığında “hangi kaynak” 480 olayın 352’sinde yanıtlanıyor: kalan 128 olay toplu işlemdir ve kaynak alanı tek tek nesneleri değil kapsayıcıyı adlandırır. “Kim” sorusu 374’te yanıtlanıyor; eksik 106 olay rol üstlenmiş çağrılardır ve oturum etiketi taşımıyorlar. Kayıtta rolün adı var, o rolü üstlenen insanın adı yok — rol paylaşımlıysa soru orada biter.

Dört soruyu birden yanıtlayan olay sayısı 273’tür, yani %57. Varsayılan yapılandırmada aynı sayı 88’dir: 480 olayın %18’i. Bu, “hepsi denetim kaydında” cümlesinin ölçülmüş karşılığıdır.

Soruşturma listesi aynı sonucu somut sorularla veriyor: sekiz sorunun üçü yanıtlanıyor. Başarısızlıklar iki sınıfta toplanıyor ve ikisi ayrı kararlara bakıyor. İki soru veri düzlemi kaydı kapalı olduğu için, üç soru saklama süresi yetmediği için yanıtsız. Veri düzlemi açılınca 5/8, üstüne saklama 365 güne çıkınca 7/8 olur. Hangisinin önce yapılacağı bir maliyet sorusudur ve sonraki bölümde sayılıdır.

Kaydın Kendi Yüzeyi ve Saklamanın Faturası

// kayit.mjs — kaydin kendi yuzeyi (silme, degistirilemezlik) ve saklama-maliyet taramasi.
// Para birimi KURGUDUR: "b" birimi uydurmadir, gercek fiyat degildir.
import { GUNLUK, SORUSTURMA, yanit } from "./olay.mjs";

const HEDEF = [                                           // kayit nereye yaziliyor. MODEL.
  ["ayni hesap, ayni kova", 11, 11, 14, "yok", 0, 0],
  ["ayni hesap, kilitli kova", 3, 0, 14, "saklama kilidi", 4, 2],
  ["ayri hesap, kilitli kova", 1, 0, 5, "saklama kilidi", 9, 6],
  ["ayri hesap + ikinci kopya", 0, 0, 5, "kilit + kopya", 14, 6],
].map(([ad, sil, degis, oku, kilit, ek, duran]) => ({ ad, sil, degis, oku, kilit, ek, duran }));

const OLAY_KB = 1.4, ALIM_BIN = 0.4, SAKLAMA_GB = 12;     // kurgu birim (b)
const gb = (n, gun) => (n * gun * OLAY_KB) / (1024 * 1024);
const aylik = (n, gun) => Math.round((n * 30 / 1000) * ALIM_BIN + gb(n, gun) * SAKLAMA_GB);

const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))
  .join("");
const yh = gen([27, 11, 16, 9, 19, 10, 12]);
const ym = gen([14, 12, 14, 14, 14, 13, 13]);

console.log(yh(["kayit hedefi", "silebilen", "degistirebilen", "okuyan", "degistirilemezlik",
  "ek kalem", "duran is"]));
for (const h of HEDEF)
  console.log(yh([h.ad, h.sil, h.degis, h.oku, h.kilit, h.ek, h.duran]));

console.log("\n" + ym(["saklama(gun)", "yonetim GB", "yonetim(b/ay)", "veri GB", "veri(b/ay)",
  "%5 orneklem", "kapsanan"]));
for (const gun of [30, 90, 180, 365, 730]) {
  const t = SORUSTURMA.map((x) => yanit(x, true, gun)).filter((x) => x[0] === "evet").length;
  console.log(ym([gun, gb(GUNLUK.yonetim, gun).toFixed(2), aylik(GUNLUK.yonetim, gun),
    Math.round(gb(GUNLUK.veri, gun)), aylik(GUNLUK.veri, gun),
    aylik(GUNLUK.veri * 0.05, gun), `${t}/${SORUSTURMA.length}`]));
}

const kapsam = (va, gun) => SORUSTURMA.map((x) => yanit(x, va, gun))
  .filter((x) => x[0] === "evet").length;
const tut = (va, gun) => aylik(GUNLUK.yonetim, gun) + (va ? aylik(GUNLUK.veri, gun) : 0);
console.log(`\nkapsam ve maliyet (kurgu birim b): varsayilan ${kapsam(false, 90)}/8 -> ` +
  `${tut(false, 90)} b/ay; veri duzlemi acik 90 gun ${kapsam(true, 90)}/8 -> ${tut(true, 90)} b/ay; ` +
  `365 gun ${kapsam(true, 365)}/8 -> ${tut(true, 365)} b/ay`);
console.log(`veri duzlemi kaydini acmak: +${tut(true, 90) - tut(false, 90)} b/ay ve ` +
  `+${kapsam(true, 90) - kapsam(false, 90)} soru. Saklamayi 90 -> 365 gun: ` +
  `+${tut(true, 365) - tut(true, 90)} b/ay ve +${kapsam(true, 365) - kapsam(true, 90)} soru`);
console.log(`ayni kapsamin iki yolu: yalniz yonetim duzlemi 365 gun ${kapsam(false, 365)}/8 -> ` +
  `${tut(false, 365)} b/ay; veri duzlemi acik 90 gun ${kapsam(true, 90)}/8 -> ${tut(true, 90)} b/ay`);
console.log(`veri duzlemi kaydi yonetim duzlemi kaydinin ` +
  `${(aylik(GUNLUK.veri, 365) / aylik(GUNLUK.yonetim, 365)).toFixed(0)} katidir; %5 orneklem bu ` +
  `farki 20'ye boler ama tekil kaynak sorularini yanitlamaz`);
kayit hedefi                 silebilen  degistirebilen   okuyan  degistirilemezlik  ek kalem    duran is
ayni hesap, ayni kova               11              11       14                yok         0           0
ayni hesap, kilitli kova             3               0       14     saklama kilidi         4           2
ayri hesap, kilitli kova             1               0        5     saklama kilidi         9           6
ayri hesap + ikinci kopya            0               0        5      kilit + kopya        14           6

saklama(gun)    yonetim GB yonetim(b/ay)       veri GB    veri(b/ay)  %5 orneklem     kapsanan
30                    0.10            30            75         23214         1161          3/8
90                    0.29            32           224         25002         1250          5/8
180                   0.58            36           447         27684         1384          6/8
365                   1.17            43           906         33197         1660          7/8
730                   2.34            57          1813         44074         2204          8/8

kapsam ve maliyet (kurgu birim b): varsayilan 3/8 -> 32 b/ay; veri duzlemi acik 90 gun 5/8 -> 25034 b/ay; 365 gun 7/8 -> 33240 b/ay
veri duzlemi kaydini acmak: +25002 b/ay ve +2 soru. Saklamayi 90 -> 365 gun: +8206 b/ay ve +2 soru
ayni kapsamin iki yolu: yalniz yonetim duzlemi 365 gun 5/8 -> 43 b/ay; veri duzlemi acik 90 gun 5/8 -> 25034 b/ay
veri duzlemi kaydi yonetim duzlemi kaydinin 772 katidir; %5 orneklem bu farki 20'ye boler ama tekil kaynak sorularini yanitlamaz

Üstteki tablo dersin en rahatsız edici satırıyla başlıyor. Varsayılan yerleşimde denetim kaydı, kaydettiği olayların gerçekleştiği hesabın içinde duruyor ve 11 özne onu silebiliyor, 11’i değiştirebiliyor. Kaydın anlamı buradan gelir: bir olayı yapabilen özne, o olayın kaydını da kaldırabiliyorsa kayıt bir kanıt değil, bir kolaylıktır. Saklama kilidi değiştirebileni sıfıra, silebileni 3’e indiriyor; bedeli 4 kalem yapılandırma ve 2 meşru işin durmasıdır — kova üzerinde doğrudan çalışan iki iş kilitle uyuşmuyor.

Ayrı hesaba taşımak silebileni 1’e indirir, ama okuyan özne sayısını 14’ten 5’e düşürür ve 6 meşru iş durur: kaydı doğrudan sorgulayan ekipler erişimlerini kaybeder ve hesaplar arası okuma ayrıca kurulmadan geri gelmez. Daraltmanın bedeli budur ve 9 yapılandırma kalemiyle birlikte gelir. Son satır silebileni sıfırlar: kilit ve ikinci kopya, 14 kalem. Değiştirilemezlik ücretsiz bir özellik değil, 14 kalemlik bir yapılandırma ve 6 durmuş iştir.

Alt tablo saklama ile maliyeti aynı satırda tutuyor. Yönetim düzlemi kaydı ucuzdur: 365 günde ayda 43 b, 1,17 GB. Veri düzlemi kaydı aynı sürede 33.197 b ve 906 GB — 772 kat. “Kaydın kapsamadığı işlem türü” ücretsiz olduğu için kapsam dışında değildir; kapsam dışıdır çünkü açıldığında fatura üç basamak büyür. Yüzde beşlik örneklem bu farkı yirmiye böler, ama tekil kaynak sorularını yanıtlamaz: “arşivden hangi nesneler okundu” sorusu örneklemli bir kayıtta yanıtsızdır.

Marjinal hesap sıralamayı belirliyor. Veri düzlemini açmak ayda 25.002 b ekliyor ve 2 soru kazandırıyor: soru başına 12.501 b. Saklamayı 90 günden 365 güne çıkarmak 8.206 b ekliyor ve yine 2 soru kazandırıyor: soru başına 4.103 b. Son satır kararı kesinleştiriyor — yalnız yönetim düzlemi kaydını 365 gün saklamak 5/8 soruyu ayda 43 b’ye yanıtlıyor, veri düzlemini açıp 90 gün saklamak aynı 5/8 için 25.034 b istiyor. Beş yüz seksen kat fark, tek bir yapılandırma sırasından doğuyor.

Özet

  • 480 olayın 273’ü dört soruyu birden yanıtlıyor (%57); varsayılan yapılandırmada bu sayı 88’dir (%18), çünkü 348 olay veri düzlemindedir ve hiç kaydedilmez.
  • “Ne zaman” ve “hangi kimlikten” kayıtlı her olayda yanıtlanıyor; “hangi kaynak” 128 toplu işlemde, “kim” ise oturum etiketi taşımayan 106 rol üstlenme çağrısında yanıtsız kalıyor.
  • Sekiz soruşturmanın 3’ü varsayılan yapılandırmada yanıtlanıyor; iki soru veri düzlemi kapalı olduğu, üç soru saklama süresi yetmediği için düşüyor.
  • Kaydı varsayılan yerleşimde 11 özne silebiliyor ve 11’i değiştirebiliyor; kilit ve ayrı hesap bunu 0’a indiriyor, karşılığında 14 yapılandırma kalemi ve 6 meşru işin durması geliyor.
  • Veri düzlemi kaydı yönetim düzlemi kaydının 772 katına mal oluyor (365 gün, kurgu birim); yüzde beşlik örneklem farkı yirmiye böler ama tekil kaynak sorularını yanıtlamaz.
  • Marjinal bedel sırayı veriyor: soru başına saklama uzatması 4.103 b, veri düzlemi açması 12.501 b; yalnız yönetim düzlemini 365 gün saklamak 5/8 soruyu ayda 43 b’ye yanıtlıyor.

Sonraki Adım

Şifreleme, döndürme ve kayıt kurulduğunda ortaya bir sorun çıkıyor: bunların hepsi yapılandırma olarak duruyor ve yapılandırma zamanla kayıyor. Bir kova kilidi kaldırılıyor, bir kayıt hedefi değiştiriliyor, bir bacak muafiyeti kalıcı hale geliyor. Bir sonraki ders bu kaymayı kural kümesiyle ölçer: kaç kaynak uyum kurallarından geçiyor, kaç tanesi geçmiyor ve otomatik düzeltme devreye girdiğinde kaç meşru yapılandırma bozuluyor.

İ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