🖥️ IT operatsiyalari — saytning ishonchliligi Jonli model
Siz veb-xizmat uchun navbatchisiz (on-call): nusxalar parki oldida yuk balanslagich, ma’lumotlar bazasi oldida kesh va 99,9 % mavjudlik maqsadi. Har daqiqa model navbat kechikishi, timeoutlar, kesh urishlari va ma’lumotlar bazasi yuklamasini darslik formulalaridan hisoblaydi — va qarorlaringiz qancha turishini.
Nimani o‘rganasiz
Kechikish to‘liq bandlik yaqinida nega portlaydi (Erlang C) va yuklanish kechikishi bilan avtomatik masshtablash nega doim kech qoladi.
SLO, xato byudjeti va yonish tezligi ogohlantirishlari qachon qaytarishni qanday hal qiladi.
Sovuq kesh ma’lumotlar bazasi uzilishiga qanday aylanadi va qaysi vositalar vaqt sotib oladi: to‘xtatish, pasaytirish, isitish.
Simulyator
Vaqt 0 daq
▶Xizmat ko‘rsatayotgan nusxa
⚙Yuklanayotgan nusxa
!Yomon builddagi nusxa
·Bo‘sh joy
•Kiruvchi so‘rovlar
Boshqaruvlar
Park uchun quyi chegara. Uni oshirish nusxalarni darhol ishga tushiradi — ular xizmat ko‘rsatishdan oldin baribir yuklanish kechikishini talab qiladi.
Bandlik bo‘yicha maqsadni kuzatish; nusxalar hali yuklanayotganda yangi kengaytirish yo‘q. O‘chiq = aynan minimum.
Pastroq = ko‘proq zaxira va ko‘proq xarajat. O‘lchangan bandlik 100 % dan oshmaydi, shuning uchun to‘yingan park faqat bosqichma-bosqich o‘sadi.
Uzunroq TTL = ko‘proq urishlar, lekin javoblar eskiroq bo‘lishi mumkin (o‘rtacha yosh ≈ TTL/2).
6 daqiqa davomida issiq kalitlarni yuklaydi (daqiqada keshning +12 %) qo‘shimcha 600 ma’lumotlar bazasi so‘rovi/s evaziga.
Past ustuvorlikdagi 30 % (oldindan yuklash, paketli, kraulerlar) ning yuk balanslagichda "keyinroq urinib ko‘ring" bilan rad etiladigan ulushi.
Og‘ir funksiya har bir so‘rovga 20 ms CPU va bitta ma’lumotlar bazasi so‘rovini qo‘shadi. O‘chiq = silliq pasayish.
Oxirgi yaxshi buildni yangi flotda qayta joylashtiradi (5 daqiqa, ikki marta hisoblanadi), so‘ng trafikni almashtiradi. Qayta bosish tayyorgarlikni qaytadan boshlaydi; yomon build ishlamayotgan bo‘lsa, faqat pul sarflanadi.
Ko‘rsatkichlar
Xato ulushi
0,00%
normal
p99 kechikish
342ms
normal
Qolgan xato byudjeti (30 kun)
50,0%
normal
Park bandligi
52%
normal
Yonish tezligi (1 h)
0,0 ×
So‘rovlar
1125 req/s
Xizmat ko‘rsatayotgan nusxalar
10
Yuklanayotgan nusxalar
0
Kesh urish ulushi
77 %
Ma’lumotlar bazasi bandligi
19 %
To‘xtatilgan trafik
0 %
Park xarajati
4,00 $/h
Hozirgacha xarajat
0,00 $
Keshdagi javoblarning o‘rtacha yoshi
30 s
Yomon builddagi trafik
0 %
Tavsiyalar mavjud
100 %
Tendensiya
Inqiroz ssenariylari
1-daraja · Yomon reliz
09:10 da yangi build chiqariladi. Oy allaqachon og‘ir o‘tgan: xato byudjetining faqat 20 % i qolgan. Deploydan bir necha daqiqa keyin yonish tezligi signali chaladi. Byudjetni asrang.
Oxirida qolgan xato byudjeti ≥ 18,5 %
Deploydan keyin o‘rtacha xato ulushi ≤ 0,65 %
Park xarajati ≤ $9,50
2-daraja · To‘satdan olomon
Xizmatga havola tez tarqalmoqda va bugun ertalab biror vaqtda trafik oshishi kutilmoqda — qachon va qanchalik kattaligini hech kim bilmaydi. Yangi instance larning ishga tushishi hozir 8 daqiqa oladi. U kelganda, ishlamay turgan quvvatga pul sarflamasdan, xatolar va kechikishni past ushlang.
O‘rtacha xato ulushi ≤ 0,2 %
O‘rtacha p99 kechikish ≤ 400 ms
O‘rtacha to‘xtatilgan trafik ≤ 5 %
Umumiy xarajat ≤ $21
Tavsiyalar vaqtning ≥ 85 % ida mavjud
3-daraja · Sovuq kesh
Tush cho‘qqisida ta’mirlash skripti butun keshni tozalaydi. Endi har bir so‘rov odatdagi 85 % urish ulushiga mo‘ljallangan ma’lumotlar bazasiga boradi. Ma’lumotlar bazasini ortiqcha yuklamasdan xizmatni tiklang.
O‘rtacha xato ulushi ≤ 1,5 %
Birinchi daqiqadan keyin ma’lumotlar bazasi bandligi hech qachon 90 % dan yuqori emas
Keshdagi javoblarning o‘rtacha yoshi o‘rtacha ≤ 90 s
Umumiy xarajat ≤ $9
Tavsiyalar vaqtning ≥ 80 % ida mavjud
O‘rtacha to‘xtatilgan trafik ≤ 5 %
Asos — raqamlar ortidagi model
Simulyator ishlatadigan har bir bog‘lanish, manbasi bilan. Taxmin deb belgilangan doimiylar misol kalibrlashlardir.
So‘rovlar kunlik egri chiziq va buzilishlarga amal qiladi; daqiqadagi soni tasodifiy (Puasson, normal yaqinlashuv) ozgina portlovchanlik bilan.
λ(t) = base × (1 + 0.25·sin(2π(t + clock − 6 h)/24 h)) × surge(t), clock = time of day at the start (peak at 12:00); count/min ≈ N(60λ, √(60λ)) × (1 + N(0, 0.02))[6]Taxmin: ishchilar soni, xizmat vaqtlari, ma’lumotlar bazasi sig‘imi, kesh o‘lchami, to‘ldirish tezligi, narxlar va yomon buildning xato ulushi o‘rta veb-xizmat uchun ko‘rgazmali qiymatlar.
Erlang C: M/M/N tizimida so‘rov bo‘sh ishchini kutishi ehtimoli.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Kutish vaqti dumi: t dan uzoqroq kutish ehtimoli eksponensial kamayadi; 2 s timeoutda hali kutayotgan so‘rovlar muvaffaqiyatsiz bo‘ladi. Sig‘imdan oshganda ortig‘i muvaffaqiyatsiz bo‘ladi.
Xizmat vaqti va kutish vaqti kvantillaridan p99 kechikish.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Yaqinlashtirish: xizmat va kutish kvantillarini qo‘shish ularning yig‘indisining aniq p99 i emas (u biroz yuqori yoki past bo‘lishi mumkin); so‘rovlar millisekundlarda bajarilgani uchun navbat har daqiqa ichida barqaror deb olinadi.
Little qonuni: band ishchilar = kelish tezligi × xizmat vaqti.
TTL kesh: tasodifiy so‘rovlar bilan har bir o‘tkazib yuborish TTL davrini boshlaydi, bu davrda so‘rovlar uradi.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Kesh o‘tkazib yuborishlari ma’lumotlar bazasini yuklaydi; uning navbat kechikishi unga tegadigan har bir so‘rovni sekinlashtiradi, bu esa ilova ishchilarini ham to‘ldiradi.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Taxmin: ishchilar soni, xizmat vaqtlari, ma’lumotlar bazasi sig‘imi, kesh o‘lchami, to‘ldirish tezligi, narxlar va yomon buildning xato ulushi o‘rta veb-xizmat uchun ko‘rgazmali qiymatlar.
SLO va xato byudjeti: yonish tezligi byudjet ruxsat etilganidan necha marta tezroq sarflanayotganini ko‘rsatadi.
budget = 1 − SLO = 0.1 %; burn = error rate / 0.1 %; Δbudget per min = burn / 43,200; burn (1 h) = mean error rate over the last 60 min / 0.1 % (window pre-filled with the opening minute)[1][2]
Yuklanish kechikishi va sovish davri bilan maqsadni kuzatuvchi avtomatik masshtablagich.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Taxmin: ishchilar soni, xizmat vaqtlari, ma’lumotlar bazasi sig‘imi, kesh o‘lchami, to‘ldirish tezligi, narxlar va yomon buildning xato ulushi o‘rta veb-xizmat uchun ko‘rgazmali qiymatlar.
Model ishlatadigan boshqa ish doimiylari.
16 workers/instance · app time 50 ms (+20 ms and +1 query with the feature on) · 2 queries/request · DB 4,000 queries/s · 20,000 hot objects · cache refill τ = 30 min (slower while the DB is saturated) · warm-up job +12 %/min for 6 min, +600 queries/s · timeout 2 s · 30 % low-priority traffic · bad build +5 % errors, ×1.25 CPU · rollback 5 min · $0.40 per instance-hour · scale-in by ≤ 20 % of the fleet after 10 quiet minutes · up to 40 instancesTaxmin: ishchilar soni, xizmat vaqtlari, ma’lumotlar bazasi sig‘imi, kesh o‘lchami, to‘ldirish tezligi, narxlar va yomon buildning xato ulushi o‘rta veb-xizmat uchun ko‘rgazmali qiymatlar.
Tasodifiylik: seedli mulberry32 generatori; ishlatilgan taqsimotlar — tekis, eksponensial (teskari CDF), normal (Box–Muller), Puasson (Knuth). Seed ko‘rsatiladi va ulashiladi.
M. Harchol-Balter — Performance Modeling and Design of Computer Systems: Queueing Theory in Action (M/M/k, server farms, capacity provisioning) — Cambridge University Press, 2013