🖥️ Operacionet IT — besueshmëria e sitit Model i drejtpërdrejtë
Ju jeni në detyrë për një shërbim ueb: një balancues ngarkese përpara një flote instancash, një cache përpara një baze të dhënash, dhe një objektiv disponueshmërie 99,9 %. Çdo minutë modeli llogarit vonesën e radhës, afatet e skaduara, goditjet e cache dhe ngarkesën e bazës së të dhënave nga formula teksti — dhe sa kushtojnë vendimet tuaja.
Çfarë do të mësosh
Pse vonesa shpërthen afër shfrytëzimit të plotë (Erlang C), dhe pse shkallëzimi automatik me vonesë ndezjeje mbërrin gjithmonë vonë.
Si vendosin SLO-të, buxhetet e gabimeve dhe alarmet e shkallës së djegies kur duhet kthyer mbrapsht.
Si një cache e ftohtë kthehet në ndërprerje të bazës së të dhënave, dhe cilat leva blejnë kohë: heqja e trafikut, degradimi, ngrohja.
Simulatori
Koha 0 min
▶Instancë që shërben
⚙Instancë që po ndizet
!Instancë në ndërtimin e keq
·Vend i lirë
•Kërkesa që mbërrijnë
Kontrollet
Dyshemeja e flotës. Rritja e saj nis instanca menjëherë — ato kanë ende nevojë për vonesën e ndezjes para se të shërbejnë.
Ndjekje e objektivit sipas shfrytëzimit; nuk ka shkallëzim të ri përderisa instancat ende ndizen. Fikur = saktësisht minimumi.
Më i ulët = më shumë rezervë dhe më shumë kosto. Shfrytëzimi i matur nuk mund të kalojë 100 %, kështu që një flotë e ngopur rritet vetëm hap pas hapi.
TTL më i gjatë = më shumë goditje, por përgjigjet mund të jenë më të vjetra (mosha mesatare ≈ TTL/2).
Ngarkon çelësat e nxehtë për 6 minuta (+12 % e cache në minutë) me çmimin e 600 pyetjeve shtesë në bazën e të dhënave/s.
Pjesa e 30 %-it me përparësi të ulët (prefetch, batch, crawlers) që refuzohet në balancuesin e ngarkesës me “provo më vonë”.
Veçoria e rëndë shton 20 ms CPU dhe një pyetje në bazën e të dhënave për kërkesë. Fikur = degradim i butë.
Rivendos ndërtimin e fundit të mirë në një flotë të re (5 min, e faturuar dy herë), pastaj kalon trafikun. Shtypja përsëri e fillon përgatitjen nga e para; nëse nuk ka ndërtim të keq në punë, kushton vetëm para.
Treguesit
Shkalla e gabimeve
0,00%
normale
Vonesa p99
342ms
normale
Buxheti i gabimeve i mbetur (30 ditë)
50,0%
normale
Shfrytëzimi i flotës
52%
normale
Shkalla e djegies (1 h)
0,0 ×
Kërkesa
1125 req/s
Instanca që shërbejnë
10
Instanca që po ndizen
0
Shkalla e goditjeve të cache
77 %
Shfrytëzimi i bazës së të dhënave
19 %
Trafik i hequr
0 %
Kostoja e flotës
4,00 $/h
Kostoja deri tani
0,00 $
Mosha mesatare e përgjigjeve në cache
30 s
Trafiku në ndërtimin e keq
0 %
Rekomandime të disponueshme
100 %
Trendi
Skenarë krizash
Niveli 1 · Publikim i keq
Një ndërtim i ri del në 09:10. Muaji ka qenë tashmë i vështirë: ka mbetur vetëm 20 % e buxhetit të gabimeve. Minuta pas vendosjes bie alarmi i shkallës së djegies. Mbro buxhetin.
Buxheti i gabimeve i mbetur në fund ≥ 18,5 %
Shkalla mesatare e gabimeve ≤ 0,65 % pas vendosjes
Kostoja e flotës ≤ $9,50
Niveli 2 · Turmë e befasishme
Një lidhje drejt shërbimit po përhapet shpejt dhe pritet një shpërthim trafiku diku këtë mëngjes — askush nuk e di kur, apo sa i madh. Instancat e reja kanë nevojë për 8 minuta për t'u nisur sot. Kur të vijë, mbaji gabimet dhe vonesën të ulëta pa djegur para për kapacitet të papunë.
Shkalla mesatare e gabimeve ≤ 0,2 %
Vonesa mesatare p99 ≤ 400 ms
Trafiku mesatar i hequr ≤ 5 %
Kostoja totale ≤ $21
Rekomandime të disponueshme ≥ 85 % të kohës
Niveli 3 · Cache e ftohtë
Në pikun e mesditës një skenar mirëmbajtjeje e shpëlan gjithë cache-n. Çdo kërkesë tani shkon te baza e të dhënave, e dimensionuar për shkallën e zakonshme të goditjeve 85 %. Ktheje shërbimin pa mbingarkuar bazën e të dhënave.
Shkalla mesatare e gabimeve ≤ 1,5 %
Shfrytëzimi i bazës së të dhënave kurrë mbi 90 % pas minutës së parë
Mosha mesatare e përgjigjeve në cache ≤ 90 s mesatarisht
Kostoja totale ≤ $9
Rekomandime të disponueshme ≥ 80 % të kohës
Trafiku mesatar i hequr ≤ 5 %
Baza — modeli pas numrave
Çdo marrëdhënie që përdor simulatori, me burimin e saj. Konstantet e shënuara si supozime janë kalibrime ilustruese.
Kërkesat ndjekin një kurbë ditore plus shqetësime; numri për minutë është i rastësishëm (Poisson, përafrim normal) me pak shpërthime.
λ(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]Supozim: numri i punëtorëve, kohët e shërbimit, kapaciteti i bazës së të dhënave, madhësia e cache, shpejtësia e mbushjes, çmimet dhe shkalla e gabimeve e ndërtimit të keq janë vlera ilustruese për një shërbim ueb të mesëm.
Erlang C: probabiliteti që një kërkesë duhet të presë për një punëtor të lirë në një sistem M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Bishti i kohës së pritjes: shansi për të pritur më gjatë se t bie eksponencialisht; kërkesat që ende presin në afatin 2-s dështojnë. Përtej kapacitetit, teprica dështon.
Vonesa p99 nga kuantilet e kohës së shërbimit dhe kohës së pritjes.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Përafrim: mbledhja e kuantileve të shërbimit dhe pritjes nuk është p99 i saktë i shumës së tyre (mund të dalë pak i lartë ose i ulët); radha trajtohet si e qëndrueshme brenda çdo minute sepse kërkesat zgjasin milisekonda.
Ligji i Little: punëtorë të zënë = shpejtësia e mbërritjes × koha në shërbim.
Cache me TTL: me kërkesa të rastësishme, çdo humbje nis një periudhë TTL gjatë së cilës kërkesat godasin.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Humbjet e cache ngarkojnë bazën e të dhënave; vonesa e radhës e saj ngadalëson çdo kërkesë që e prek, gjë që mbush edhe punëtorët e aplikacionit.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Supozim: numri i punëtorëve, kohët e shërbimit, kapaciteti i bazës së të dhënave, madhësia e cache, shpejtësia e mbushjes, çmimet dhe shkalla e gabimeve e ndërtimit të keq janë vlera ilustruese për një shërbim ueb të mesëm.
SLO dhe buxheti i gabimeve: shkalla e djegies tregon sa herë më shpejt se sa lejohet po shpenzohet buxheti.
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]
Shkallëzues automatik që ndjek objektivin, me vonesë ndezjeje dhe periudhë ftohjeje.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Supozim: numri i punëtorëve, kohët e shërbimit, kapaciteti i bazës së të dhënave, madhësia e cache, shpejtësia e mbushjes, çmimet dhe shkalla e gabimeve e ndërtimit të keq janë vlera ilustruese për një shërbim ueb të mesëm.
Konstante të tjera operative të përdorura nga modeli.
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 instancesSupozim: numri i punëtorëve, kohët e shërbimit, kapaciteti i bazës së të dhënave, madhësia e cache, shpejtësia e mbushjes, çmimet dhe shkalla e gabimeve e ndërtimit të keq janë vlera ilustruese për një shërbim ueb të mesëm.
Rastësia: një gjenerator mulberry32 me farë; shpërndarjet e përdorura — uniforme, eksponenciale (CDF e anasjellë), normale (Box–Muller), Poisson (Knuth). Fara shfaqet dhe mund të ndahet.
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