I nọ n'ọrụ oku maka ọrụ weebụ: load balancer n'ihu ndị ọrụ, cache n'ihu database, na ebumnuche ịdị adị 99,9 %. Nkeji ọ bụla ụdị ahụ na-agbakọ igbu oge ahịrị, oge gafere, cache hit na ibu database site na usoro akwụkwọ — na ihe mkpebi gị na-efu.
Ihe ị ga-amụta
Ihe mere igbu oge ji agbawa nso ojiji zuru oke (Erlang C), na ihe mere autoscaling nwere igbu oge mmalite ji abịa n'oge gafere mgbe niile.
Otú SLO, uru mmejọ na ọkwa ọsọ ọkụ si ekpebi mgbe a ga-eweghachi.
Otú cache oyi si bụrụ nsogbu database, na ihe ndị na-azụta oge: wepụ, belata, kpoo.
Simulator
Oge 0 min
▶Onye na-eje ozi
⚙Onye na-amalite
!Onye na-arụ na ngwa ọma ọjọọ
·Oghere efu
•Arịrịọ na-abata
Njikwa
Ala maka ndị niile. Ịbulite ya na-amalite ihe ozugbo — ha ka chọrọ igbu oge mmalite tupu ha ejere ozi.
Nsochi ebumnuche n'ojiji; enweghị scale-out ọhụrụ mgbe ihe ka na-amalite. Gbanyụọ = nke kacha nta kpọmkwem.
Dị ala = ohere karịa na ọnụ ahịa karịa. Ojiji tụrụ enweghị ike ịgafe 100 %, yabụ ndị juru eju na-eto naanị nzọụkwụ n'nzọụkwụ.
TTL ogologo = hit karịa, mana azịza nwere ike ịka ochie (nkezi afọ ≈ TTL/2).
Na-ebu igodo ọkụ nkeji 6 (+12 % nke cache kwa nkeji) na ọnụ ahịa ajụjụ database 600 ọzọ kwa sekọnd.
Òkè nke 30 % mbụ dị ala (prefetch, batch, crawlers) a jụrụ na load balancer site na „nwaa ọzọ mgbe e mesịrị“.
Ihe dị arọ na-agbakwunye 20 ms nke CPU na otu ajụjụ database kwa arịrịọ. Gbanyụọ = mbelata dị nro (graceful degradation).
Na-ebuga build ọma ikpeazụ ọzọ na ìgwè ọhụrụ (nkeji 5, a na-akwụ ụgwọ ugboro abụọ), mgbe ahụ na-agbanwe okporo ụzọ. Ịpị ọzọ na-amaliteghachi nkwadebe; ma ọ bụrụ na ọ nweghị build ọjọọ dị ndụ, ọ na-efu naanị ego.
Ihe ngosi
Ọnụ ọgụgụ mmejọ
0.00%
nkịtị
Igbu oge p99
342ms
nkịtị
Uru mmejọ fọdụrụ (ụbọchị 30)
50.0%
nkịtị
Ojiji ndị niile
52%
nkịtị
Ọsọ ọkụ (1 h)
0.0 ×
Arịrịọ
1125 req/s
Ndị na-eje ozi
10
Ndị na-amalite
0
Cache hit rate
77 %
Ojiji database
19 %
Okporo ụzọ wepụrụ
0 %
Ọnụ ahịa ndị niile
4.00 $/h
Ọnụ ahịa ruo ugbu a
0.00 $
Nkezi afọ nke azịza echekwara
30 s
Okporo ụzọ n'ime ngwa ọma ọjọọ
0 %
Ndụmọdụ dị
100 %
Ọnọdụ
Ọnọdụ nsogbu
Ọkwa 1 · Mwepụta ọjọọ
Ngwa ọma ọhụrụ pụtara na 09:10. Ọnwa agafeela nke ọma: naanị 20 % nke uru mmejọ fọdụrụ. Nkeji ole na ole mgbe mwepụta gasịrị, ọkwa ọsọ ọkụ na-akpọ. Chekwaa uru ahụ.
Uru mmejọ fọdụrụ na ngwụcha ≥ 18,5 %
Nkezi ọnụ ọgụgụ mmejọ ≤ 0,65 % mgbe mwepụta gasịrị
Ọnụ ahịa ndị niile ≤ $9,50
Ọkwa 2 · Ìgwè mmadụ na-abịa ozugbo
Njikọ na ọrụ ahụ na-agbasa ngwa ngwa ma a na-atụ anya ebili mmiri njem n'oge ụfọdụ n'ụtụtụ a — ọ dịghị onye maara mgbe ma ọ bụ ka ọ ga-adị ukwuu. Ihe ọhụrụ chọrọ nkeji 8 ịmalite taa. Mgbe ọ bịara, debe njehie na latency dị ala na-efughị ego na ikike na-anọ efu.
Nkezi ọnụ ọgụgụ mmejọ ≤ 0,2 %
Nkezi igbu oge p99 ≤ 400 ms
Nkezi okporo ụzọ wepụrụ ≤ 5 %
Ọnụ ahịa niile ≤ $21
Ndụmọdụ dị ≥ 85 % nke oge
Ọkwa 3 · Cache oyi
N'elu ehihie, script mmezi na-asachapụ cache niile. Arịrịọ ọ bụla na-aga database ugbu a, nke e mere maka 85 % hit rate nkịtị. Weghachi ọrụ ahụ n'ebughị database.
Nkezi ọnụ ọgụgụ mmejọ ≤ 1,5 %
Ojiji database adịghị n'elu 90 % mgbe nkeji mbụ gasịrị
Nkezi afọ nke azịza echekwara ≤ 90 s n'nkezi
Ọnụ ahịa ndị niile ≤ $9
Ndụmọdụ dị ≥ 80 % nke oge
Nkezi okporo ụzọ wepụrụ ≤ 5 %
Ntọala — ụdị dị n'azụ ọnụọgụ
Mmekọrịta ọ bụla simulator na-eji, na isi mmalite ya. Ihe na-agbanwe agbanwe akara dị ka echiche bụ nhazi ngosi.
Arịrịọ na-agbaso usoro kwa ụbọchị na ihe mgbochi; ọnụ ọgụgụ kwa nkeji bụ n'enweghị usoro (Poisson, nso nkịtị) nwere ntakịrị mgbawa.
λ(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]Echiche: ọnụ ọgụgụ ndị ọrụ, oge ọrụ, ikike database, nha cache, ọsọ ịjuputa, ọnụ ahịa na ọnụ ọgụgụ mmejọ nke ngwa ọma ọjọọ bụ ụkpụrụ ngosi maka ọrụ weebụ nha etiti.
Erlang C: ohere na arịrịọ aghaghị ichere onye ọrụ n'efu n'usoro M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Ọdụ oge ichere: ohere ichere ogologo karịa t na-agbada n'ụzọ exponential; arịrịọ ka na-eche na oge 2 s na-ada. Gafere ikike, ihe ọzọ na-ada.
Igbu oge p99 sitere na quantile oge ọrụ na oge ichere.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Nkpọ: ịgbakọta quantile ọrụ na nchere abụghị p99 ziri ezi nke nchikota ha (ọ nwere ike dị elu ma ọ bụ dị ala ntakịrị); a na-ewere ahịrị dị ka nke kwụsiri ike n'ime nkeji ọ bụla n'ihi na arịrịọ na-ewe millisecond.
TTL cache: n'arịrịọ n'enweghị usoro, miss ọ bụla na-amalite oge TTL nke arịrịọ na-eme hit.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Cache miss na-ebu database; igbu oge ahịrị ya na-eme ka arịrịọ ọ bụla metụrụ ya nwayọọ, nke na-ejupụtakwa ndị ọrụ ngwa.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Echiche: ọnụ ọgụgụ ndị ọrụ, oge ọrụ, ikike database, nha cache, ọsọ ịjuputa, ọnụ ahịa na ọnụ ọgụgụ mmejọ nke ngwa ọma ọjọọ bụ ụkpụrụ ngosi maka ọrụ weebụ nha etiti.
SLO na uru mmejọ: ọsọ ọkụ na-ekwu ugboro ole ngwa ngwa karịa nke e kwere ka a na-eji uru ahụ.
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]
Autoscaler nsochi ebumnuche nwere igbu oge mmalite na cooldown.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Echiche: ọnụ ọgụgụ ndị ọrụ, oge ọrụ, ikike database, nha cache, ọsọ ịjuputa, ọnụ ahịa na ọnụ ọgụgụ mmejọ nke ngwa ọma ọjọọ bụ ụkpụrụ ngosi maka ọrụ weebụ nha etiti.
Ihe ndị ọzọ kwụsiri ike nke ụdị ahụ na-eji.
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 instancesEchiche: ọnụ ọgụgụ ndị ọrụ, oge ọrụ, ikike database, nha cache, ọsọ ịjuputa, ọnụ ahịa na ọnụ ọgụgụ mmejọ nke ngwa ọma ọjọọ bụ ụkpụrụ ngosi maka ọrụ weebụ nha etiti.
Enweghị usoro: ihe mmepụta mulberry32 nwere mkpụrụ; nkesa ejiri — uniform, exponential (inverse CDF), normal (Box–Muller), Poisson (Knuth). A na-egosi mkpụrụ ma nwee ike ikekọrịta ya.
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