🖥️ ІТ операциялары — сайттың сенімділігі Тірі модель
Сіз веб-қызмет бойынша кезекшісіз: даналар паркінің алдындағы жүктеме теңестіргіш, дерекқордың алдындағы кэш және 99,9 % қолжетімділік мақсаты. Модель әр минут сайын оқулық формулаларынан кезек кідірісін, күту шегін, кэш табуларын және дерекқор жүктемесін, сондай-ақ шешімдеріңіздің бағасын есептейді.
Нені үйренесіз
Кідіріс толық пайдалануға жақындағанда неге жарылып кетеді (Эрланг C) және жүктелу кідірісімен автомасштабтау неге әрдайым кеш келеді.
SLO, қателер бюджеттері және жану жылдамдығы ескертулері қашан кері қайтару керектігін қалай шешеді.
Суық кэш дерекқор ақауына қалай айналады және қандай тетіктер уақыт ұттырады: жеңілдету, деградация, қыздыру.
Симулятор
Уақыт 0 мин
▶Қызмет көрсетіп жатқан дана
⚙Іске қосылып жатқан дана
!Нашар жинақтағы дана
·Бос орын
•Кіріс сұраулар
Басқару элементтері
Паркке төменгі шек. Оны көтеру даналарды бірден іске қосады — бірақ қызмет көрсетуден бұрын оларға жүктелу кідірісі керек.
Пайдалану деңгейі бойынша мақсатты бақылау; даналар әлі іске қосылып жатқанда жаңа масштабтау жоқ. Өшірулі = дәл минимум.
Төмен = көбірек қор және көбірек шығын. Өлшенген пайдалану 100 %-дан аса алмайды, сондықтан қаныққан парк тек қадамдап өседі.
Ұзағырақ TTL = көбірек тауып алу, бірақ жауаптар ескірек болуы мүмкін (орташа жасы ≈ TTL/2).
6 минут бойы ыстық кілттерді жүктейді (минутына кэштің +12 %-ы) қосымша 600 дерекқор сұрауы/с бағасына.
Жүктеме теңестіргіште «кейін қайталаңыз» деп қабылданбайтын төмен басымдықты 30 %-дың (алдын ала жүктеу, пакеттік өңдеу, роботтар) үлесі.
Ауыр мүмкіндік әр сұрауға 20 мс CPU және бір дерекқор сұрауын қосады. Өшірулі = жұмсақ деградация.
Соңғы жақсы құрастыруды жаңа серверлер паркінде қайта орналастырады (5 мин, екі есе төленеді), содан кейін трафикті ауыстырады. Қайта басу дайындықты басынан бастайды; жаман құрастыру жұмыс істемей тұрса, тек ақшаға түседі.
Көрсеткіштер
Қате үлесі
0,00%
қалыпты
p99 кідірісі
342ms
қалыпты
Қалған қателер бюджеті (30 күн)
50,0%
қалыпты
Парктің пайдаланылуы
52%
қалыпты
Жану жылдамдығы (1 сағ)
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 мс
Орташа жеңілдетілген трафик ≤ 5 %
Жалпы шығын ≤ $21
Ұсыныстар уақыттың ≥ 85 %-ында қолжетімді
3-деңгей · Суық кэш
Түскі шыңда қызмет көрсету скрипті бүкіл кэшті тазалайды. Енді әр сұрау әдеттегі 85 % табу үлесіне есептелген дерекқорға барады. Дерекқорды шамадан тыс жүктемей, қызметті қалпына келтіріңіз.
Орташа қате үлесі ≤ 1,5 %
Бірінші минуттан кейін дерекқорды пайдалану ешқашан 90 %-дан жоғары емес
Кэштелген жауаптардың орташа жасы орта есеппен ≤ 90 с
Жалпы шығын ≤ $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]Жорамал: жұмысшылар саны, қызмет көрсету уақыттары, дерекқор сыйымдылығы, кэш көлемі, толтыру жылдамдығы, бағалар және нашар жинақтың қате үлесі орта өлшемді веб-қызмет үшін иллюстрациялық мәндер.
Эрланг 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 с күту шегінде әлі күтіп тұрған сұраулар сәтсіз болады. Сыйымдылықтан асқанда артығы сәтсіз болады.
Қызмет көрсету уақыты мен күту уақытының квантильдерінен 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Жорамал: жұмысшылар саны, қызмет көрсету уақыттары, дерекқор сыйымдылығы, кэш көлемі, толтыру жылдамдығы, бағалар және нашар жинақтың қате үлесі орта өлшемді веб-қызмет үшін иллюстрациялық мәндер.
Кездейсоқтық: seed бар mulberry32 генераторы; қолданылатын үлестірімдер — біркелкі, экспоненциалды (кері CDF), қалыпты (Box–Muller), Пуассон (Knuth). Seed көрсетіледі және оны бөлісуге болады.
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