🖥️ ИТ операции — сигурност на услуги Модел во живо
Дежурни сте за веб-услуга: балансер на оптоварување пред флота од инстанци, кеш пред база на податоци и цел за достапност од 99,9 %. Секоја минута моделот пресметува задоцнување во редица, истекувања на време, погодоци во кешот и оптоварување на базата според формули од учебник — и колку чинат вашите одлуки.
Што ќе научите
Зошто латенцијата експлодира близу полна искористеност (Erlang C) и зошто автоматското скалирање со задоцнување за подигање секогаш доцни.
Како SLO, буџетите на грешки и аларми за стапка на горење одлучуваат кога да се врати назад.
Како студен кеш се претвора во прекин на базата и кои лостови купуваат време: одбивање, деградација, загревање.
Симулатор
Време 0 мин
▶Инстанца служи
⚙Инстанца се подига
!Инстанца на лошата верзија
·Слободно место
•Дојдовни барања
Контроли
Долна граница за флотата. Нејзиното зголемување веднаш пушта инстанци — но тие сепак треба задоцнување за подигање пред да служат.
Следење на целна искористеност; нема ново проширување додека инстанците уште се подигаат. Исклучено = точно минимумот.
Пониско = повеќе резерва и повеќе трошок. Измерената искористеност не може да надмине 100 %, па заситената флота расте само чекор по чекор.
Подолг TTL = повеќе погодоци, но одговорите можат да бидат постари (просечна старост ≈ TTL/2).
Вчитува чести клучеви 6 минути (+12 % од кешот по минута) по цена на 600 дополнителни барања до базата/s.
Дел од сообраќајот со низок приоритет од 30 % (префетч, batch, роботи) што балансерот го одбива со „обидете се подоцна“.
Тешката функција додава 20 ms CPU и едно барање до базата по барање. Исклучено = блага деградација.
Повторно ја распоредува последната добра верзија на нова флота (5 min, наплатено двапати), потоа го префрла сообраќајот. Повторното притискање ја рестартира подготовката; ако нема жива лоша верзија, само чини пари.
Показатели
Стапка на грешки
0,00%
нормално
p99 латенција
342ms
нормално
Преостанат буџет на грешки (30 дена)
50,0%
нормално
Искористеност на флотата
52%
нормално
Стапка на горење (1 h)
0,0 ×
Барања
1125 req/s
Инстанци што служат
10
Инстанци што се подигаат
0
Стапка на погодоци во кешот
77 %
Искористеност на базата
19 %
Одбиен сообраќај
0 %
Трошок на флотата
4,00 $/h
Трошок досега
0,00 $
Просечна старост на кеширани одговори
30 s
Сообраќај на лошата верзија
0 %
Достапни препораки
100 %
Тренд
Кризни сценарија
Ниво 1 · Лошо издание
Нова верзија излегува во 09:10. Месецот веќе беше тежок: останало само 20 % од буџетот на грешки. Минути по распоредувањето се огласува алармот за стапка на горење. Заштитете го буџетот.
Преостанат буџет на грешки на крајот ≥ 18,5 %
Просечна стапка на грешки ≤ 0,65 % по распоредувањето
Трошок на флотата ≤ $9,50
Ниво 2 · Налет на посетители
Врска до услугата се шири брзо и очекуваме врв на сообраќај некогаш утрово — никој не знае кога, ниту колку голем. Новите инстанци денес бараат 8 минути за да стартуваат. Кога ќе дојде, држете ги грешките и задоцнувањето ниски без да трошите пари на неискористен капацитет.
Просечна стапка на грешки ≤ 0,2 %
Просечна p99 латенција ≤ 400 ms
Просечен одбиен сообраќај ≤ 5 %
Вкупен трошок ≤ $21
Препораки достапни ≥ 85 % од времето
Ниво 3 · Студен кеш
На пладневниот врв скрипта за одржување го празни целиот кеш. Секое барање сега оди до базата, димензионирана за вообичаената стапка на погодоци од 85 %. Вратете ја услугата без да ја преоптоварите базата.
Просечна стапка на грешки ≤ 1,5 %
Искористеност на базата никогаш над 90 % по првата минута
Просечна старост на кеширани одговори ≤ 90 s во просек
Вкупен трошок ≤ $9
Препораки достапни ≥ 80 % од времето
Просечен одбиен сообраќај ≤ 5 %
Основа — моделот зад бројките
Секоја релација што ја користи симулаторот, со својот извор. Константите означени како претпоставки се илустративни калибрации.
Барањата следат дневна крива плус пореметувања; бројот по минута е случаен (Поасон, нормална апроксимација) со малку налетност.
λ(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]Претпоставка: бројот на работници, времињата на услуга, капацитетот на базата, големината на кешот, брзината на полнење, цените и стапката на грешки на лошата верзија се илустративни вредности за веб-услуга со средна големина.
Erlang C: веројатноста барањето да мора да чека слободен работник во M/M/N систем.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Опашка на времето на чекање: шансата да се чека подолго од t опаѓа експоненцијално; барањата што сè уште чекаат на истекот од 2 s откажуваат. Над капацитетот, вишокот откажува.
p99 латенција од квантилите на времето на услуга и времето на чекање.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Апроксимација: собирањето на квантилите на услугата и чекањето не е точниот p99 на нивниот збир (може да биде малку повисок или понизок); опашката се третира како стабилна во рамки на секоја минута бидејќи барањата траат милисекунди.
Литлов закон: зафатени работници = стапка на пристигнување × време во услуга.
TTL кеш: со случајни барања секој промашај започнува TTL период во кој барањата погодуваат.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Промашувањата на кешот ја оптоваруваат базата; нејзиното задоцнување во редицата го забавува секое барање што ја допира, што ги полни и работниците на апликацијата.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Претпоставка: бројот на работници, времињата на услуга, капацитетот на базата, големината на кешот, брзината на полнење, цените и стапката на грешки на лошата верзија се илустративни вредности за веб-услуга со средна големина.
SLO и буџет на грешки: стапката на горење покажува колку пати побрзо од дозволеното се троши буџетот.
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]
Автоматски скалер со следење на цел, задоцнување за подигање и период на смирување.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Претпоставка: бројот на работници, времињата на услуга, капацитетот на базата, големината на кешот, брзината на полнење, цените и стапката на грешки на лошата верзија се илустративни вредности за веб-услуга со средна големина.
Други оперативни константи што ги користи моделот.
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 instancesПретпоставка: бројот на работници, времињата на услуга, капацитетот на базата, големината на кешот, брзината на полнење, цените и стапката на грешки на лошата верзија се илустративни вредности за веб-услуга со средна големина.
Случајност: генератор mulberry32 со зрно; користени распределби — рамномерна, експоненцијална (инверзна CDF), нормална (Box–Muller), Поасонова (Knuth). Зрното е прикажано и може да се сподели.
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