ИТ операции — надеждност на сайтове Жив модел

Дежурен сте за уеб услуга: балансьор на натоварването пред парк от инстанции, кеш пред база данни и цел за наличност от 99,9 %. Всяка минута моделът изчислява закъснението в опашката, тайм-аутите, попаденията в кеша и натоварването на базата по учебникарски формули — и колко струват решенията ви.

Какво ще научите

Симулатор

Време 0 мин
Заявки 1125 · Честота на грешките 0,00% · Латентност p99 342 ms · Инстанции, които обслужват 10 (+0) · Дял на попаденията в кеша 77% · Използване на базата данни 19% · Оставащ бюджет за грешки (30 дни) 50,0%⇉1125 заявки/с▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msИзползване на парка 52%Дял на попаденията в кеша 77%Използване на базата данни 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • Инстанция обслужва
  • Инстанция се зарежда
  • Инстанция на лошия билд
  • Свободен слот
  • Входящи заявки

Управление

Долна граница на парка. Повишаването пуска инстанции веднага — те все пак се нуждаят от закъснението на зареждане, преди да обслужват.

Следене на целта по използване; няма ново разширяване, докато инстанциите още се зареждат. Изкл. = точно минимумът.

По-ниско = повече запас и повече разход. Измереното използване не може да надхвърли 100 %, затова наситеният парк расте само стъпка по стъпка.

По-дълъг TTL = повече попадения, но отговорите може да са по-стари (средна възраст ≈ TTL/2).

Зарежда горещи ключове за 6 минути (+12 % от кеша на минута) срещу 600 допълнителни заявки към базата/s.

Дял от нископриоритетните 30 % (prefetch, пакетен, краулери), отхвърлен на балансьора на натоварването със „опитайте по-късно“.

Тежката функция добавя 20 ms CPU и една заявка към базата на всяка заявка. Изкл. = плавна деградация.

Внедрява отново последния добър билд на свеж парк (5 мин, таксува се двойно), след което превключва трафика. Повторно натискане рестартира подготовката; ако няма пуснат лош билд, струва само пари.

Показатели

Честота на грешките
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 %

Тенденция

Честота на грешките: — %20,000,00

Кризисни сценарии

Ниво 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, се провалят. Над капацитета излишъкът се проваля.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
Латентност p99 от квантилите на времето за обслужване и времето за чакане.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Приближение: сборът от квантилите на обслужването и чакането не е точният p99 на сбора им (може да е малко по-висок или по-нисък); опашката се третира като стабилна в рамките на всяка минута, защото заявките отнемат милисекунди.
Закон на Литъл: заети работници = скорост на пристигане × време в обслужване.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
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 със seed; използвани разпределения — равномерно, експоненциално (обратна CDF), нормално (Box–Muller), на Поасон (Knuth). Seed се показва и може да се споделя.

Източници

  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

Кой се занимава с това професионално

Образователен модел — не за оперативни решения. Реалните обекти калибрират всяка константа към собственото си оборудване и данни.