IT darbība — pakalpojumu uzticamība Dzīvais modelis

Jūs esat dežurants tīmekļa pakalpojumam: slodzes balansētājs pirms instanču flotes, kešatmiņa pirms datubāzes un 99,9 % pieejamības mērķis. Katru minūti modelis no mācību grāmatu formulām aprēķina rindas aizturi, noildzes, kešatmiņas trāpījumus un datubāzes slodzi, kā arī to, ko maksā jūsu lēmumi.

Ko jūs uzzināsiet

Simulators

Laiks 0 min
Pieprasījumi 1125 · Kļūdu īpatsvars 0,00% · p99 latentums 342 ms · Apkalpojošās instances 10 (+0) · Kešatmiņas trāpījumu īpatsvars 77% · Datubāzes noslodze 19% · Atlikušais kļūdu budžets (30 dienas) 50,0%⇉1125 pieprasījumi/s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msFlotes noslodze 52%Kešatmiņas trāpījumu īpatsvars 77%Datubāzes noslodze 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • Instance apkalpo
  • Instance startē
  • Instance sliktajā būvējumā
  • Brīva vieta
  • Ienākošie pieprasījumi

Vadīklas

Flotes apakšējā robeža. Tās palielināšana palaiž instances uzreiz, bet pirms apkalpošanas tām joprojām vajadzīga startēšanas aizture.

Mērķa sekošana noslodzei; jauna mērogošana uz augšu nenotiek, kamēr instances vēl startē. Izslēgts = tieši minimums.

Zemāka = lielāka rezerve un augstākas izmaksas. Izmērītā noslodze nevar pārsniegt 100 %, tāpēc piesātināta flote aug tikai pa soļiem.

Garāks TTL = vairāk trāpījumu, bet atbildes var būt vecākas (vidējais vecums ≈ TTL/2).

Ielādē karstās atslēgas 6 minūtes (+12 % no kešatmiņas minūtē) par cenu 600 papildu datubāzes vaicājumi/s.

Zemas prioritātes 30 % daļa (priekšielāde, pakešu apstrāde, rāpuļprogrammas), ko slodzes balansētājs noraida ar „mēģiniet vēlāk”.

Smagā funkcija pievieno 20 ms CPU un vienu datubāzes vaicājumu katram pieprasījumam. Izslēgts = graciozs funkcionalitātes samazinājums.

Pārlieto pēdējo labo būvējumu uz jauna servera parka (5 min, tiek rēķināts divreiz), pēc tam pārslēdz trafiku. Atkārtota nospiešana sāk sagatavošanu no jauna; ja neviens sliktais būvējums nedarbojas, tas maksā tikai naudu.

Rādītāji

Kļūdu īpatsvars
0,00%
normāls
p99 latentums
342ms
normāls
Atlikušais kļūdu budžets (30 dienas)
50,0%
normāls
Flotes noslodze
52%
normāls
Izdegšanas ātrums (1 h)0,0 ×
Pieprasījumi1125 req/s
Apkalpojošās instances10
Instances startē0
Kešatmiņas trāpījumu īpatsvars77 %
Datubāzes noslodze19 %
Atslogotais trafiks0 %
Flotes izmaksas4,00 $/h
Līdz šim izmaksas0,00 $
Kešoto atbilžu vidējais vecums30 s
Trafiks sliktajā būvējumā0 %
Pieejami ieteikumi100 %

Tendence

Kļūdu īpatsvars: — %20,000,00

Krīzes scenāriji

Līmenis 1 · Slikts laidiens

Jauns būvējums tiek izlaists plkst. 09:10. Mēnesis jau bijis grūts: atlicis tikai 20 % kļūdu budžeta. Dažas minūtes pēc izlaides nostrādā izdegšanas ātruma brīdinājums. Pasargājiet budžetu.

  • Atlikušais kļūdu budžets beigās ≥ 18,5 %
  • Vidējais kļūdu īpatsvars pēc izlaides ≤ 0,65 %
  • Flotes izmaksas ≤ 9,50 $

Līmenis 2 · Pēkšņs apmeklētāju pieplūdums

Saite uz pakalpojumu strauji izplatās, un šorīt kādā brīdī gaidāms datplūsmas lēciens — neviens nezina, kad un cik liels. Jaunām instancēm šodien vajag 8 minūtes, lai startētu. Kad tas notiks, noturiet kļūdas un aizkavi zemas, netērējot naudu tukšai jaudai.

  • Vidējais kļūdu īpatsvars ≤ 0,2 %
  • Vidējais p99 latentums ≤ 400 ms
  • Vidējais atslogotais trafiks ≤ 5 %
  • Kopējās izmaksas ≤ 21 $
  • Ieteikumi pieejami ≥ 85 % laika

Līmenis 3 · Auksta kešatmiņa

Dienas vidus maksimumā apkopes skripts iztīra visu kešatmiņu. Tagad katrs pieprasījums iet uz datubāzi, kas bija dimensionēta ierastajam 85 % trāpījumu īpatsvaram. Atjaunojiet pakalpojumu, nepārslogojot datubāzi.

  • Vidējais kļūdu īpatsvars ≤ 1,5 %
  • Datubāzes noslodze pēc pirmās minūtes nekad virs 90 %
  • Kešoto atbilžu vidējais vecums vidēji ≤ 90 s
  • Kopējās izmaksas ≤ 9 $
  • Ieteikumi pieejami ≥ 80 % laika
  • Vidējais atslogotais trafiks ≤ 5 %

Pamats — modelis aiz skaitļiem

Katra simulatora izmantotā sakarība ar tās avotu. Konstantes, kas atzīmētas kā pieņēmumi, ir ilustratīvas kalibrācijas.

Pieprasījumi seko dienas līknei plus traucējumiem; pieprasījumu skaits minūtē ir nejaušs (Puasona, normālā tuvinājumā) ar nelielu pieplūdumu.
λ(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]Pieņēmums: darbinieku skaits, apkalpošanas laiki, datubāzes jauda, kešatmiņas izmērs, atjaunošanās ātrums, cenas un sliktā būvējuma kļūdu īpatsvars ir ilustratīvas vērtības vidēja izmēra tīmekļa pakalpojumam.
Erlanga C: varbūtība, ka pieprasījumam jāgaida brīvs darbinieks M/M/N sistēmā.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Gaidīšanas laika aste: varbūtība gaidīt ilgāk par t krītas eksponenciāli; pieprasījumi, kas pie 2 s noildzes vēl gaida, neizdodas. Pārsniedzot jaudu, pārpalikums neizdodas.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
p99 latentums no apkalpošanas laika un gaidīšanas laika kvantiļiem.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Tuvinājums: apkalpošanas un gaidīšanas kvantiļu saskaitīšana nav precīza to summas p99 (tā var būt nedaudz augstāka vai zemāka); rinda katras minūtes ietvaros tiek uzskatīta par stabilu, jo pieprasījumi aizņem milisekundes.
Litla likums: aizņemtie darbinieki = pienākšanas ātrums × apkalpošanas laiks.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
TTL kešatmiņa: ar nejaušiem pieprasījumiem katrs netrāpījums sāk TTL periodu, kurā pieprasījumi trāpa.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Kešatmiņas netrāpījumi slogo datubāzi; tās rindas aizture palēnina katru pieprasījumu, kas to skar, un tas arī piepilda lietotnes darbiniekus.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Pieņēmums: darbinieku skaits, apkalpošanas laiki, datubāzes jauda, kešatmiņas izmērs, atjaunošanās ātrums, cenas un sliktā būvējuma kļūdu īpatsvars ir ilustratīvas vērtības vidēja izmēra tīmekļa pakalpojumam.
SLO un kļūdu budžets: izdegšanas ātrums parāda, cik reižu ātrāk nekā atļauts tiek tērēts budžets.
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]
Mērķa sekošanas automātiskais mērogotājs ar startēšanas aizturi un atdzišanas periodu.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Pieņēmums: darbinieku skaits, apkalpošanas laiki, datubāzes jauda, kešatmiņas izmērs, atjaunošanās ātrums, cenas un sliktā būvējuma kļūdu īpatsvars ir ilustratīvas vērtības vidēja izmēra tīmekļa pakalpojumam.
Pārējās modelī izmantotās ekspluatācijas konstantes.
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 instancesPieņēmums: darbinieku skaits, apkalpošanas laiki, datubāzes jauda, kešatmiņas izmērs, atjaunošanās ātrums, cenas un sliktā būvējuma kļūdu īpatsvars ir ilustratīvas vērtības vidēja izmēra tīmekļa pakalpojumam.

Nejaušība: sēklas mulberry32 ģenerators; izmantotie sadalījumi — vienmērīgais, eksponenciālais (apgrieztā CDF), normālais (Box–Muller), Puasona (Knuth). Sēkla tiek rādīta un to var kopīgot.

Avoti

  1. Site Reliability Engineering — Ch. 3 Embracing Risk (error budgets), Ch. 4 Service Level Objectives — Beyer, Jones, Petoff, Murphy (eds.), O'Reilly, 2016
  2. The Site Reliability Workbook — Ch. 5 Alerting on SLOs (burn rate; 14.4× over 1 h = 2 % of a 30-day budget) — Beyer, Murphy, Rensin, Kawahara, Thorne (eds.), O'Reilly, 2018
  3. Teletraffic Engineering Handbook — Erlang C formula; waiting-time distribution for M/M/n, FCFS — ITU-D Study Group 2 Question 16/2 (V. B. Iversen), 2005
  4. J. D. C. Little — A Proof for the Queuing Formula: L = λW — Operations Research 9(3):383–387, 1961
  5. J. Jung, A. W. Berger, H. Balakrishnan — Modeling TTL-based Internet Caches — IEEE INFOCOM 2003, 2003
  6. 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

Kas ar to nodarbojas profesionāli

Izglītojošs modelis — nav paredzēts ekspluatācijas lēmumiem. Reālas vietas kalibrē katru konstanti pēc savas iekārtas un datiem.