🖥️ Uendeshaji wa TEHAMA — uaminifu wa tovuti (SRE) Modeli hai
Uko kwenye zamu ya dharura ya huduma ya wavuti: kisawazisha mzigo mbele ya kundi la mashine, kache mbele ya hifadhidata, na lengo la upatikanaji la 99.9 %. Kila dakika modeli hukokotoa ucheleweshaji wa foleni, muda wa kikomo, vibao vya kache na mzigo wa hifadhidata kwa fomula za vitabu vya kiada — na gharama za maamuzi yako.
Utakachojifunza
Kwa nini ucheleweshaji hulipuka karibu na matumizi kamili (Erlang C), na kwa nini kuongeza uwezo kiotomatiki kwa ucheleweshaji wa kuwaka daima huchelewa.
Jinsi SLO, bajeti za makosa na tahadhari za kiwango cha kuchoma zinavyoamua wakati wa kurudisha toleo.
Jinsi kache baridi inavyogeuka kuwa kuharibika kwa hifadhidata, na vidhibiti vipi vinanunua muda: kukata, kushusha utendaji, kupasha joto.
Kiigaji
Muda 0 min
▶Mashine inahudumia
⚙Mashine inawaka
!Mashine kwenye ujenzi mbaya
·Nafasi huru
•Maombi yanayoingia
Vidhibiti
Sakafu ya kundi la mashine. Kuipandisha huanzisha mashine mara moja — bado zinahitaji ucheleweshaji wa kuwaka kabla ya kuhudumia.
Kufuatilia lengo la matumizi; hakuna upanuzi mpya wakati mashine bado zinawaka. Imezimwa = kiwango cha chini kabisa.
Chini = nafasi zaidi na gharama zaidi. Matumizi yaliyopimwa hayawezi kuzidi 100 %, kwa hivyo kundi lililojaa hukua hatua kwa hatua tu.
TTL ndefu = vibao vingi, lakini majibu yanaweza kuwa ya zamani (umri wastani ≈ TTL/2).
Hupakia funguo zinazotumika sana kwa dakika 6 (+12 % ya kache kwa dakika) kwa gharama ya maswali 600 ya ziada ya hifadhidata/s.
Sehemu ya 30 % ya kipaumbele cha chini (upakiaji wa awali, kundi, roboti za utafutaji) inayokataliwa kwenye kisawazisha mzigo kwa "jaribu tena baadaye".
Kipengele kizito huongeza ms 20 za CPU na swali moja la hifadhidata kwa kila ombi. Imezimwa = kushuka kwa utendaji kwa udhibiti.
Hupeleka tena toleo zuri la mwisho kwenye kundi jipya la seva (dakika 5, hutozwa mara mbili), kisha hubadilisha trafiki. Kubonyeza tena huanzisha upya maandalizi; bila toleo baya linalofanya kazi, hugharimu pesa tu.
Viashiria
Kiwango cha makosa
0.00%
kawaida
Ucheleweshaji wa p99
342ms
kawaida
Bajeti ya makosa iliyobaki (siku 30)
50.0%
kawaida
Matumizi ya kundi la mashine
52%
kawaida
Kiwango cha kuchoma (saa 1)
0.0 ×
Maombi
1125 req/s
Mashine zinazohudumia
10
Mashine zinazowaka
0
Kiwango cha vibao vya kache
77 %
Matumizi ya hifadhidata
19 %
Trafiki iliyokatwa
0 %
Gharama ya kundi la mashine
4.00 $/h
Gharama hadi sasa
0.00 $
Umri wastani wa majibu ya kache
30 s
Trafiki kwenye ujenzi mbaya
0 %
Mapendekezo yanapatikana
100 %
Mwelekeo
Matukio ya mgogoro
Kiwango 1 · Toleo baya
Ujenzi mpya unatolewa saa 09:10. Mwezi tayari umekuwa mgumu: ni 20 % tu ya bajeti ya makosa iliyobaki. Dakika chache baada ya kutoa, tahadhari ya kiwango cha kuchoma inalia. Linda bajeti.
Bajeti ya makosa iliyobaki mwishoni ≥ 18.5 %
Kiwango wastani cha makosa ≤ 0.65 % baada ya kutoa
Gharama ya kundi la mashine ≤ $9.50
Kiwango 2 · Umati wa ghafla
Kiungo cha huduma kinasambaa haraka na kuongezeka kwa trafiki kunatarajiwa wakati fulani asubuhi hii — hakuna anayejua lini, wala ukubwa gani. Mashine mpya zinahitaji dakika 8 kuanza leo. Itakapokuja, weka makosa na ucheleweshaji chini bila kuchoma pesa kwenye uwezo usiotumika.
Kiwango wastani cha makosa ≤ 0.2 %
Ucheleweshaji wastani wa p99 ≤ ms 400
Trafiki wastani iliyokatwa ≤ 5 %
Gharama jumla ≤ $21
Mapendekezo yanapatikana ≥ 85 % ya muda
Kiwango 3 · Kache baridi
Kwenye kilele cha adhuhuri, hati ya matengenezo hufuta kache yote. Kila ombi sasa huenda kwenye hifadhidata, iliyopimwa kwa kiwango cha kawaida cha vibao cha 85 %. Rudisha huduma bila kupakia hifadhidata kupita kiasi.
Kiwango wastani cha makosa ≤ 1.5 %
Matumizi ya hifadhidata yasizidi 90 % kamwe baada ya dakika ya kwanza
Umri wastani wa majibu ya kache ≤ s 90 kwa wastani
Gharama jumla ≤ $9
Mapendekezo yanapatikana ≥ 80 % ya muda
Trafiki wastani iliyokatwa ≤ 5 %
Msingi — modeli iliyo nyuma ya namba
Kila uhusiano ambao kiigaji kinatumia, pamoja na chanzo chake. Viwango vilivyowekwa alama kama dhana ni urekebishaji wa mfano.
Maombi hufuata mkunjo wa kila siku pamoja na usumbufu; idadi kwa dakika ni nasibu (Poisson, makadirio ya kawaida) na mlipuko kidogo.
λ(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]Dhana: idadi ya wafanyakazi, muda wa huduma, uwezo wa hifadhidata, ukubwa wa kache, kasi ya kujaza, bei na kiwango cha makosa cha ujenzi mbaya ni thamani za kielelezo kwa huduma ya wavuti ya ukubwa wa kati.
Erlang C: uwezekano kwamba ombi lazima lisubiri mfanyakazi huru katika mfumo wa M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Mkia wa muda wa kusubiri: uwezekano wa kusubiri zaidi ya t hupungua kwa kasi ya kielelezo; maombi yanayosubiri bado kwenye muda wa kikomo wa s 2 hushindwa. Zaidi ya uwezo, ziada hushindwa.
Ucheleweshaji wa p99 kutoka kwa kwantaili za muda wa huduma na muda wa kusubiri.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Makadirio: kujumlisha kwantili za huduma na kusubiri si p99 kamili ya jumla yao (inaweza kuwa juu au chini kidogo); foleni inachukuliwa kuwa tulivu ndani ya kila dakika kwa sababu maombi huchukua milisekunde.
Sheria ya Little: wafanyakazi wenye shughuli = kiwango cha kuwasili × muda wa huduma.
Kache ya TTL: kwa maombi ya nasibu, kila kukosa huanza kipindi cha TTL ambapo maombi hupata.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Kukosa kwa kache hupakia hifadhidata; ucheleweshaji wake wa foleni hupunguza kasi ya kila ombi linaloigusa, jambo ambalo pia hujaza wafanyakazi wa programu.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Dhana: idadi ya wafanyakazi, muda wa huduma, uwezo wa hifadhidata, ukubwa wa kache, kasi ya kujaza, bei na kiwango cha makosa cha ujenzi mbaya ni thamani za kielelezo kwa huduma ya wavuti ya ukubwa wa kati.
SLO na bajeti ya makosa: kiwango cha kuchoma kinasema bajeti inatumika mara ngapi kwa kasi zaidi ya inavyoruhusiwa.
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]
Kiongeza uwezo kiotomatiki chenye kufuatilia lengo, chenye ucheleweshaji wa kuwaka na muda wa kutulia.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Dhana: idadi ya wafanyakazi, muda wa huduma, uwezo wa hifadhidata, ukubwa wa kache, kasi ya kujaza, bei na kiwango cha makosa cha ujenzi mbaya ni thamani za kielelezo kwa huduma ya wavuti ya ukubwa wa kati.
Vigezo vingine vya uendeshaji vinavyotumiwa na 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 instancesDhana: idadi ya wafanyakazi, muda wa huduma, uwezo wa hifadhidata, ukubwa wa kache, kasi ya kujaza, bei na kiwango cha makosa cha ujenzi mbaya ni thamani za kielelezo kwa huduma ya wavuti ya ukubwa wa kati.
Nasibu: jenereta ya mulberry32 yenye mbegu; mgawanyo unaotumika — sawa, kielelezo (CDF kinyume), kawaida (Box–Muller), Poisson (Knuth). Mbegu inaonyeshwa na inaweza kushirikiwa.
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