Ọrụ IT — ntụkwasị obi ọrụ Ụdị dị ndụ

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

Simulator

Oge 0 min
Arịrịọ 1125 · Ọnụ ọgụgụ mmejọ 0.00% · Igbu oge p99 342 ms · Ndị na-eje ozi 10 (+0) · Cache hit rate 77% · Ojiji database 19% · Uru mmejọ fọdụrụ (ụbọchị 30) 50.0%⇉1125 arịr./sec▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msOjiji ndị niile 52%Cache hit rate 77%Ojiji database 19%⚠ 0.00% · 🔥 0.0×50%$ 4.00/h · Σ $0.00
  • 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 ozi10
Ndị na-amalite0
Cache hit rate77 %
Ojiji database19 %
Okporo ụzọ wepụrụ0 %
Ọnụ ahịa ndị niile4.00 $/h
Ọnụ ahịa ruo ugbu a0.00 $
Nkezi afọ nke azịza echekwara30 s
Okporo ụzọ n'ime ngwa ọma ọjọọ0 %
Ndụmọdụ dị100 %

Ọnọdụ

Ọnụ ọgụgụ mmejọ: — %20.000.00

Ọ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.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
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.
Iwu Little: ndị ọrụ na-arụ ọrụ = ọnụ ọgụgụ ọbịbịa × oge n'ọrụ.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
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.

Isi mmalite

  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

Ndị na-arụ nke a dị ka ọrụ

Ụdị agụmakwụkwọ — ọ bụghị maka mkpebi ọrụ. Ebe n'ezie na-edozi ihe niile na-agbanwe agbanwe dịka ngwá ọrụ na data nke ha si dị.