IT operacijos – paslaugų patikimumas Gyvas modelis

Budite dėl žiniatinklio paslaugos: apkrovos balansuotojas prieš egzempliorių parką, talpykla prieš duomenų bazę ir 99,9 % pasiekiamumo tikslas. Kiekvieną minutę modelis pagal vadovėlines formules apskaičiuoja eilės delsą, skirtojo laiko viršijimus, talpyklos pataikymus ir duomenų bazės apkrovą – ir ką kainuoja jūsų sprendimai.

Ko išmoksite

Simuliatorius

Laikas 0 min.
Užklausos 1125 · Klaidų dažnis 0,00% · p99 delsa 342 ms · Aptarnaujantys egzemplioriai 10 (+0) · Talpyklos pataikymų dažnis 77% · Duomenų bazės naudojimas 19% · Likęs klaidų biudžetas (30 dienų) 50,0%⇉1125 užkl./s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msParko naudojimas 52%Talpyklos pataikymų dažnis 77%Duomenų bazės naudojimas 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • Egzempliorius aptarnauja
  • Egzempliorius kraunasi
  • Egzempliorius blogoje versijoje
  • Laisva vieta
  • Gaunamos užklausos

Valdikliai

Parko apatinė riba. Ją padidinus egzemplioriai paleidžiami iš karto – bet jiems vis tiek reikia įkrovos delsos, kad pradėtų aptarnauti.

Apkrovos sekimas pagal naudojimą; naujas plėtimas nevyksta, kol egzemplioriai dar kraunasi. Išjungta = tiksliai minimumas.

Mažiau = daugiau atsargos ir didesnės išlaidos. Išmatuotas naudojimas negali viršyti 100 %, todėl prisotintas parkas auga tik žingsnis po žingsnio.

Ilgesnis TTL = daugiau pataikymų, bet atsakymai gali būti senesni (vidutinis amžius ≈ TTL/2).

6 minutes kraunami dažnai naudojami raktai (+12 % talpyklos per minutę) už 600 papildomų duomenų bazės užklausų/s kainą.

Mažo prioriteto 30 % (išankstinis krovimas, paketai, vorai) dalis, kurią apkrovos balansuotojas atmeta su „bandykite vėliau“.

Sunkioji funkcija prideda 20 ms CPU ir vieną duomenų bazės užklausą kiekvienai užklausai. Išjungta = sklandus funkcionalumo mažinimas.

Iš naujo paleidžia paskutinę gerą versiją naujame serverių parke (5 min., apmokestinama dvigubai), tada perjungia srautą. Paspaudus dar kartą, paruošimas pradedamas iš naujo; jei nėra veikiančios blogos versijos, tai tik kainuoja pinigus.

Rodikliai

Klaidų dažnis
0,00%
normali
p99 delsa
342ms
normali
Likęs klaidų biudžetas (30 dienų)
50,0%
normali
Parko naudojimas
52%
normali
Išeikvojimo greitis (1 h)0,0 ×
Užklausos1125 req/s
Aptarnaujantys egzemplioriai10
Kraunami egzemplioriai0
Talpyklos pataikymų dažnis77 %
Duomenų bazės naudojimas19 %
Atmestas srautas0 %
Parko kaina4,00 $/h
Kaina iki šiol0,00 $
Talpyklos atsakymų vidutinis amžius30 s
Srautas blogoje versijoje0 %
Prieinamos rekomendacijos100 %

Tendencija

Klaidų dažnis: — %20,000,00

Krizių scenarijai

1 lygis · Bloga versija

Nauja versija išleidžiama 09:10. Mėnuo ir taip buvo sunkus: liko tik 20 % klaidų biudžeto. Praėjus minutėms po diegimo suveikia išeikvojimo greičio signalas. Apsaugokite biudžetą.

  • Klaidų biudžeto likutis pabaigoje ≥ 18,5 %
  • Vidutinis klaidų dažnis po diegimo ≤ 0,65 %
  • Parko kaina ≤ 9,50 USD

2 lygis · Staigus lankytojų antplūdis

Nuoroda į paslaugą sparčiai plinta, ir šį rytą kažkada laukiamas srauto šuolis — niekas nežino, kada ir kokio dydžio. Nauji egzemplioriai šiandien paleidžiami per 8 minutes. Kai jis ateis, išlaikykite klaidas ir delsą mažas neišleisdami pinigų nenaudojamam pajėgumui.

  • Vidutinis klaidų dažnis ≤ 0,2 %
  • Vidutinė p99 delsa ≤ 400 ms
  • Vidutinis atmestas srautas ≤ 5 %
  • Bendra kaina ≤ 21 USD
  • Rekomendacijos prieinamos ≥ 85 % laiko

3 lygis · Šalta talpykla

Dienos piko metu priežiūros scenarijus išvalo visą talpyklą. Dabar kiekviena užklausa eina į duomenų bazę, kuri buvo suprojektuota įprastam 85 % pataikymų dažniui. Atkurkite paslaugą neperkraudami duomenų bazės.

  • Vidutinis klaidų dažnis ≤ 1,5 %
  • Duomenų bazės naudojimas niekada nevirš 90 % po pirmos minutės
  • Talpyklos atsakymų vidutinis amžius ≤ 90 s vidutiniškai
  • Bendra kaina ≤ 9 USD
  • Rekomendacijos prieinamos ≥ 80 % laiko
  • Vidutinis atmestas srautas ≤ 5 %

Pagrindas — modelis už skaičių

Kiekviena simuliatoriaus naudojama priklausomybė su savo šaltiniu. Konstantos, pažymėtos kaip prielaidos, yra iliustraciniai kalibravimai.

Užklausos seka paros kreivę plius sutrikimus; užklausų skaičius per minutę yra atsitiktinis (Puasono, normalioji aproksimacija) su nedideliu sprogstamumu.
λ(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]Prielaida: darbuotojų (worker) skaičius, aptarnavimo laikai, duomenų bazės talpa, talpyklos dydis, užpildymo greitis, kainos ir blogos versijos klaidų dažnis yra iliustracinės vidutinio žiniatinklio paslaugos vertės.
Erlang C: tikimybė, kad užklausa turės laukti laisvo darbuotojo M/M/N sistemoje.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Laukimo laiko uodega: tikimybė laukti ilgiau nei t krenta eksponentiškai; užklausos, vis dar laukiančios 2 s skirtojo laiko pabaigoje, nepavyksta. Viršijus pajėgumą perteklius nepavyksta.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
p99 delsa iš aptarnavimo ir laukimo laiko kvantilių.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Apytikslis skaičiavimas: aptarnavimo ir laukimo kvantilių sudėjimas nėra tikslus jų sumos p99 (gali būti kiek didesnis ar mažesnis); eilė kiekvieną minutę laikoma pastovia, nes užklausos trunka milisekundes.
Little dėsnis: užimti darbuotojai = atvykimo greitis × laikas aptarnavime.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
TTL talpykla: esant atsitiktinėms užklausoms kiekvienas nepataikymas pradeda TTL laikotarpį, kurio metu užklausos pataiko.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Talpyklos nepataikymai apkrauna duomenų bazę; jos eilės delsa sulėtina kiekvieną užklausą, kuri į ją kreipiasi, o tai taip pat užpildo programos darbuotojus.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Prielaida: darbuotojų (worker) skaičius, aptarnavimo laikai, duomenų bazės talpa, talpyklos dydis, užpildymo greitis, kainos ir blogos versijos klaidų dažnis yra iliustracinės vidutinio žiniatinklio paslaugos vertės.
SLO ir klaidų biudžetas: išeikvojimo greitis (burn rate) parodo, kiek kartų greičiau nei leidžiama išleidžiamas biudžetas.
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]
Tikslo sekimo automatinis mastelio keitiklis su įkrovos delsa ir atvėsimo laikotarpiu.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Prielaida: darbuotojų (worker) skaičius, aptarnavimo laikai, duomenų bazės talpa, talpyklos dydis, užpildymo greitis, kainos ir blogos versijos klaidų dažnis yra iliustracinės vidutinio žiniatinklio paslaugos vertės.
Kitos modelyje naudojamos eksploatacinės konstantos.
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 instancesPrielaida: darbuotojų (worker) skaičius, aptarnavimo laikai, duomenų bazės talpa, talpyklos dydis, užpildymo greitis, kainos ir blogos versijos klaidų dažnis yra iliustracinės vidutinio žiniatinklio paslaugos vertės.

Atsitiktinumas: mulberry32 generatorius su pradiniu skaičiumi; naudojami skirstiniai — tolygusis, eksponentinis (atvirkštinė pasiskirstymo funkcija), normalusis (Box–Muller), Puasono (Knuth). Pradinis skaičius rodomas ir juo galima dalytis.

Šaltiniai

  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 tuo užsiima profesionaliai

Mokomasis modelis — netinka operaciniams sprendimams. Tikri objektai kiekvieną konstantą pritaiko savo įrangai ir duomenims.