Скорость сгорания бюджета ошибок — что тут не так?

Edit...
Burn rate как коэффициент сгорания бюджета ошибок в SRE
Illustrated by Igan Pol

Привет, %username%! В индустрии прижился термин «скорость сгорания бюджета ошибок» (Error Budget Burn Rate). Однако слово «скорость» здесь часто вводит в заблуждение, заставляя мозг искать привычные физические размерности там, где их нет.

Разберемся, почему Burn Rate — это в первую очередь безразмерный коэффициент, и как это влияет на наше понимание надежности.

Начнем с математики#

Представим сервис со стабильной нагрузкой в 1000 запросов в минуту (req/min).

Мы установили SLO = 99.99%.

  1. Определяем бюджет ошибок: $\text{Error Budget} = 1 - \text{SLO} = 0.01%$ (или $0.0001$ в долях).
  2. Считаем бюджет в абсолютных величинах:
    • За 30-дневное окно общее количество запросов составит: $30 \text{ дней} \times 24 \text{ часа} \times 60 \text{ минут} \times 1000 \text{ req/min} = 43,200,000 \text{ запросов}$.
    • Допустимое количество ошибок: $43,200,000 \times 0.0001 = \mathbf{4320 \text{ ошибок}}$.

Это наш исчерпаемый ресурс на 30 дней.

Как можно тратить этот бюджет?#

Мы можем распределить эти 4320 ошибок равномерно по всему месяцу. Чтобы понять «нормальную» интенсивность ошибок, разделим бюджет на время:

$$\frac{4320 \text{ ошибок}}{43200 \text{ минут}} = 0.1 \text{ ошибки в минуту}$$

(Или 1 ошибка каждые 10 минут).

Это — Absolute Rate (абсолютный показатель). У него есть размерность (ошибки/мин). Но это всё еще не Burn Rate.

Два понятия, которые часто путают#

Чтобы не возникало путаницы, важно разделять интенсивность процесса и коэффициент потребления ресурса.

ХарактеристикаAbsolute Error Rate (Абсолютный показатель)Burn Rate (Коэффициент сгорания)
Что измеряетФактическую интенсивность ошибок «здесь и сейчас».Во сколько раз текущее потребление превышает норму.
РазмерностьИмеет единицы измерения (ошибок/сек, % ошибок).Безразмерный множитель ($1\times, 14.4\times, 50\times$).
Вопрос«Сколько ошибок произошло за последнюю минуту?»«Если такая интенсивность сохранится, уложимся ли мы в бюджет?»
ИнтерпретацияЗависит от объема трафика в данный момент.Универсальна: $>1$ — бюджет тает слишком быстро, $1$ — норма.

Почему «скорость» — плохое слово?#

В физике скорость ($v = s/t$) всегда привязана к единицам времени (км/ч, м/с). Когда мы называем Burn Rate скоростью, мы подсознательно ищем время в знаменателе.

На самом деле Burn Rate — это моментальный снимок соотношения, а не процесс, растянутый во времени.

  • Burn Rate = 1: Мы тратим бюджет ровно с той интенсивностью, которая позволит исчерпать его в последнюю секунду периода (при условии, что такая интенсивность сохранится).
  • Burn Rate = 14.4: Мы тратим бюджет в 14.4 раза быстрее плана. При такой нагрузке месячный бюджет сгорит всего за 2 дня ($30 / 14.4 \approx 2.08$).

Главный аргумент: Burn rate — это не про то, «как быстро» что-то движется, а про то, «во сколько раз» мы отклонились от нормы потребления.

Формулы#

Универсальный расчет коэффициента сгорания:

$$\text{Burn Rate} = \frac{\text{Фактическая доля ошибок (за интервал)}}{\text{Допустимая доля ошибок (по SLO)}}$$

Пример: Если за последние 5 минут у нас 2% ошибок при SLO 99.9% (допустимо 0.1%):

$$\text{Burn Rate} = \frac{0.02}{0.001} = 20\times$$

Важные нюансы#

1. Burn Rate возможен только при наличии бюджета#

Безразмерность — необходимое, но не достаточное условие. Для Burn Rate нужен исчерпаемый ресурс.

  • Сравнение $\text{Latency p99} / \text{SLA threshold}$ — это просто относительный коэффициент. Он не показывает сгорание ресурса, так как «время ожидания» само по себе не накапливается и не восстанавливается.
  • Однако, если SLO определен как «% запросов быстрее 200 мс», то каждый медленный запрос — это «трата» из бюджета ошибок. В этом случае расчет через доли запросов превращает метрику в настоящий Burn Rate.

2. Скользящее окно и «восстановление» бюджета#

В отличие от денег на счету, бюджет ошибок в SRE обычно считается на скользящем окне (например, последние 30 дней). Это значит, что бюджет не просто сгорает, но и восстанавливается: когда старые инциденты (31-дневной давности) выходят за пределы окна, ваш доступный бюджет снова увеличивается.

3. Проблема малого трафика#

Burn Rate плохо работает на сервисах с низкой нагрузкой. Если у вас 1 запрос в час, то одна случайная ошибка даст Burn Rate в тысячи единиц, что приведет к ложному алерту. Для таких систем используют другие подходы (например, агрегацию за очень большие промежутки времени).

Практический вывод#

Правильная терминология формирует правильное мышление:

  • Не используйте «скорость», если хотите подчеркнуть кратность превышения нормы.
  • Называйте это коэффициентом сгорания или множителем.
  • Помните, что Burn Rate универсален: значение $14.4\times$ одинаково критично и для сервиса с миллионом RPS, и для сервиса с сотней RPS, что делает его идеальной метрикой для настройки умных алертов.

А как этот безразмерный множитель превращается в язык разговора с бизнесом про деньги — в статье «Надёжность строится в диалоге с бизнесом» .


Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат , а так же подписывайся на канал .

О способах отблагодарить автора можно почитать на странице “Донаты ”.