Chaos Engineering
1) Bazaviy prinsiplar
Dastlabki faraz sifatida Steady State. Normani aniq aniqlang (masalan: p95 <200 ms, error rate <0. 3%, tanqidiy flou muvaffaqiyati> 99. 5%).
Izolyatsiya qilingan oʻzgaruvchilar. Samarani va yaxshilanishni sababiy bog’lash uchun imkon qadar bir vaqtda bitta omilni o’zgartiring.
Graduslik. Xavfsiz muhitda kichik amplitudalardan boshlaymiz → qamrov va intensivlikni kengaytiramiz.
Guardrails. SLO/alerta/xato byudjeti boʻyicha aniq toʻxtash shartlari.
Takrorlanuvchanlik. Tajriba determinik tarzda takrorlanishi kerak (skriptlar/manifestlar/IaC).
Axloq va xavfsizlik. Xavfli tajribalarda hech qanday haqiqiy shaxsiy ma’lumotlar va moliyaviy tranzaksiyalar yo’q.
2) «Barqaror holat» nima
Steady State - bu foydalanuvchi va biznes invariantlari uchun qiymatni tavsiflovchi kuzatiladigan metriklar to’plami:- Asosiy endpointlarning latentligi p50/p95/p99.
- Muvaffaqiyatli tranzaksiyalar ulushi va tanqidiy yo’llarni konvertatsiya qilish.
- Error rate, taymautlar, «shed» soʻrovlar ulushi (toʻldirilganda kesilgan).
- O’z-o’zini tiklash tezligi (MTTR), retrajlarga chidamlilik (bo’ronlarsiz).
- Domen invariantlari: «balansda kamchiliklar» yo’qligi, bir marta bajarilgan to’lovlar, hisobot sutkalarining konsistentligi va h.k.
3) Inyeksiya katalogi («sindirayapmiz»)
Tarmoq: kechikish, jitter, yo’qotish/dublikatlar, o’tkazish qobiliyatini cheklash, TLS-uzilishlar, DNS-flapping.
Hisoblash: CPUni ortiqcha yuklash, xotiraga bosim/GC, deskriptorlarning tugashi, clock skew.
Ombor: yuqori p95 I/O, ENOSPC, yetakchi/replika muvaffaqiyatsizligi, split-brain, fsync.
5xx/429, «sekin muvaffaqiyat», tashqi APIlarning degradatsiyasi, rate-limit.
Maʼlumotlar: dubli/xabarlarni oʻtkazib yuborish, out-of-order, «iflos» yozuvlar, versiyalar toʻqnashuvi.
Operatsiyalar: muvaffaqiyatsiz reliz/ , bagli ficha-bayroq, tugagan sertifikat, kalitning rotatsiyasi.
Odamlar va jarayonlar: javobgar shaxslarning yetarli emasligi, qo’lda qo’lda ko’tarilishning kechikishi, noto’g’ri runbook.
4) Eksperiment dizayni (shablon)
1. Gipoteza: «Asosiy API p99 valyuta xizmatiga + 300 ms bo’lganda <450 ms, breyker ochiladi, 15 daqiqa oldin stale-javob ≤».
2. Inyeksiya: nosozlik profili (turi/amplitudasi/davomiyligi) va maqsadli konturi.
3. Metrika/log-teglar: markirovka’chaos. experiment_id`, `phase=inject|recover`.
4. Guardrails: abort’error _ rate> 2%’yoki p99> SLA × 2 daqiqadan ortiq 1.
5. Natijalar/xulosa: kuzatishlar, nuqsonlar, yaxshilanishlar ro’yxati, ishlar rejasi va takroran haydash.
5) Kuzatish darajasi: nima majburiy
Treysing: qaramlik orqali so’rash yo’li; tanazzulga uchragan segmentlar belgilangan.
Resurslar metrikasi: CPU, heap/GC, FD, diskli IOPS/lat, tarmoq bandwidth, navbatlar chuqurligi.
Biznes-metrika: konversiya/muvaffaqiyatli operatsiyalar, kompensatsiya qilingan tranzaksiyalar ulushi.
Voqealar loglari: breykerlar, retrajlar va ularning byudjetini ochish/yopish, DB rahbarini almashtirish.
Tajriba paneli: guardrails ostonalari va abortning «qizil tugmasi» bilan live-dashboard.
6) Guardrails va xavfsizlik
Texnik: yuqori chegaralar error rate/latency, muvaffaqiyatli operatsiyalar ulushining pasayishi, DLQ o’sishi.
Tashkiliy: on-call ishtirokidagi vaqt oynasi, «bitta zona - bitta tajriba» tamoyili.
Ma’lumotlar/komplayens: faqat sintetika yoki shaxssiz to’plamlar; tartibga solish qoidalari buzilishiga olib keladigan testlarni taqiqlash.
Orqaga qaytish: tayyor protsedura rollback/disable bayrogʻi/yumshoq drain trafigi.
7) O’zbekiston Respublikasi
Taymaut-budjetlar va jitter retralari (bo’ronlarsiz).
Yarim ochiq va eksponensial qayta tiklangan Circuit Breaker.
Bulkheads: tanqidiylik bo’yicha pullarni izolyatsiya qilish (to’lovlar va tahlillar).
Backpressure va rate-limit: past ustuvorlikni oldindan aytib boʻladigan kesish.
Coalescing bilan kesh, «isitish bo’ronlari» dan himoya qilish.
Yon ta’sirlar va kompensatsion ta’sirga ega bo’lgan sagʻanalarning idempotentligi.
Ma’lumotlarni tiklash uchun kvorumlar, feylover va anti-entropiya.
8) Ssenariy namunalari (eskizlar)
8. 1 Sekin qaramlik (YAML)
yaml experiment: slow-downstream target: svc:api inject:
dependency:
name: currency mode: add_latency p95_ms: 300 duration: 10m guardrails:
error_rate: "< 1. 5%"
p99_latency: "< 450ms"
expectations:
breaker_open: true stale_data_served: "<= 15m"
8. 2 DB yetakchisini yo’qotish
Inyeksiya: yetakchini/majburiy qayta saylovni to’xtatish.
Kutish: yozuvlarni vaqtincha taqiqlash, kvorumdan o’qish, WAL/Outbox saqlanishi, replikatsiyani avtomatik tiklash, ikki tomonlama yozuvning yo’qligi.
8. 3 ENOSPC log-diskda
Inyeksiya: 95-100% gacha diskni to’ldirish.
Kutish: loglarni avariya holatida almashtirish, tanqidiy jurnallarni saqlash, tanqidiy bo’lmagan fichlarni o’chirish, alertlar va avto-remediatsiya.
8. 4 Burst-trafik + sheyding
Inyeksiya: issiq endpint bo’yicha 5 daqiqaga 3 RPS ×.
Kutish: past ustuvorlikni tashlash, barqaror p95 «yadro», retraj kaskadining yo’qligi.
9) CI/CDda avtomatlashtirish
Har bir reliz uchun steyjda Chaos-smoke (xavfsiz amplitudalarda qisqa inyeksiya).
Eksperimentlar katalogi bo’yicha tungi progonlar (servislar matritsasi × nosozlik turlari).
Geytlar: agar «barqarorlik chegaradan past bo’lsa» (masalan, muvaffaqiyatli fallback ulushi <95%).
Artefaktlar: hisobot, treyslar, CPU/heap fleymgraflari, metrik va konfiguratsion snapshotlar.
10) Oʻyin kunlari (Game Days)
«Jonli» stsenariyli muntazam jamoaviy mashqlar:- Rollar: eksperiment boshlovchisi, metrik kuzatuvchi, orqaga qaytish operatori, biznes vakili.
- Stsenariylar: keshning tanazzulga uchrashi, AZ/feylover mintaqaning qisman ishdan chiqishi, «yomon reliz», tashqi provayderning mavjud emasligi.
- Natijalar: runbook’da topilgan bo’shliqlar, alertlarni yaxshilash, SLO va retraj byudjetlarini tuzatish.
11) Ma’lumotlar, voqealar va ML uchun xaos
Ma’lumotlar oqimi: dublikatlar uchun testlar, o’tkazib yuborishlar, out-of-order, kechikishlar; idempotent konsumerlar va DLQ-strategiyalarni tekshirish.
Omborxonalar: indekslarning degradatsiyasi, hot-partition, qulflash mojarosi, lag ostida replikatsiya.
ML: fich-storning kechikishi, baseline-modelga qaytish, kirish ma’lumotlari sifatining yomonlashishi (drift) - tizim yiqilishdan ko’ra «yumshoq» bo’lishi kerak.
12) Anti-patternlar
Kuzatilmaydigan tartibsizlik: siz ko’r, xulosalar spekulyativ.
Inyeksiya darhol steyj va gvard-raylsiz prodda.
«Bitta katta tajriba» bir vaqtning o’zida amalga oshishi aniq emas.
Gipotezasiz va fikslardan keyin retestsiz tizimli tartibsizlik harakatlari.
Faqat infratuzilmaga e’tibor qaratish - biznes invariantlar unutiladi.
Odamlar/jarayonlarni e’tiborsiz qoldirish: alertlar, on-call, runbook - tizimning bir qismi.
13) Amaliyotning yetukligi (modeli)
1. Ad-hoc: mahalliy bir martalik in’ektsiya.
2. Steyj-xaos: ssenariylar katalogi, takrorlanadigan progonlar, dashbordlar.
3. Reliz-xaos: har bir relizdagi smoke-xaos, geytlar, hisobotlar.
4. Cheklangan prod-xaos: kichik trafik, qattiq gardrails, tayyor qaytarish.
5. Uzluksiz barqarorlik: avto-eksperimentlar, SLO-boshqaruv, ish oqimi sifatida yaxshilash.
14) Arxitektura amaliyotlari bilan integratsiya qilish
Barqarorlikni test qilish: xaos-eksperimentlar fault-in’ektsiya va degradatsiya stsenariylarini to’ldiradi.
Yuk sinovi: «yuk + nosozlik» kombinatsiyalangan eksperimentlari kaskadlar va retray bo’ronlarini aniqlaydi.
Policy as Code/RBAC/ABAC: guardrails, qaytarish qadamlari va limitlarni siyosat sifatida rasmiylashtiring.
Rozilik/maxfiylikni boshqarish: maʼlumotlarni qayta ishlash tartibini buzadigan tajribalarga yoʻl qoʻymang.
Geo-arxitektura: hududlar feyloverini xaos-tekshirish va ma’lumotlarni yurisdiktsiyalarga bog’lash.
15) Mini-retseptlar (psevdokod)
Breyker + degradatsiya
if breaker. open():
return serve_stale(cache. max_age=15m)
try:
res = call(dep, timeout=250ms)
return res except Timeout:
breaker. trip()
return serve_stale()
Limiter + shading
if cpu. load() > 0. 85 or queue. depth() > HIGH:
if req. priority < HIGH: return 503_SHED limiter. acquire()
Idempotent nojo’ya ta’siri
key = "payout:"+external_id if kv. exists(key): return kv. get(key)
res = side_effect()
kv. put(key, res, ttl=30d)
return res
16) Arxitektorning chek-varaqasi
1. Steady State va guardrails aniqlanganmi?
2. Skriptlar katalogi (tarmoq/CPU/saqlash/bogʻliqlik/maʼlumotlar/operatsiyalar) bormi?
3. Kuzatish resurslar, latentlik dumlari, biznes invariantlarini qamrab oladimi?
4. Taymautlar/retrajlar/breykerlar/limiterlar/bulkheads yoqilgan va parametrlanadimi?
5. Runbook va «qizil tugma» tayyorlanganmi?
6. Steyjda xaos-smoke va nightly-eksperimentlar bormi?
7. Oʻyin kunlari uchun «xavfsiz» oynalar va rollar yozilganmi?
8. Tajribalar takrorlanadimi (IaC/skriptlar), natijalar versiyalanadimi?
9. Yaxshilanishlar vazifalar bilan belgilanadi, retest qilinadimi?
10. Maʼlumotlar va ML-konveyerlar qamrab olinganmi, nafaqat HTTP?
Xulosa
Chaos Engineering «kutilmagan hodisalarni» oldindan aytib bo’lmaydigan stsenariylarga aylantiradi. Barqarorlik gipotezasi, nazorat qilinadigan in’ektsiya, qattiq qo’riqlash, boy kuzatish va retest intizomi - bu relizlar xavfini kamaytiradigan va platformaga ishonchni oshiradigan vositalardir. Natijada, jamoa tizimning chegaralarini tushunadi, zerikarli tarzda degradatsiya qila oladi va hatto nosozliklar sharoitida ham xizmatni tezda foydalanuvchiga qaytaradi.