сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · SRE и надёжность

SLI, SLO и бюджет ошибок

Показатель, цель и бюджет ошибок

Посчитал, что означают знаменитые девятки в минутах. Цель 99% - это 432 минуты недоступности в месяц, то есть больше семи часов. 99,9% - уже 43,2 минуты. 99,99% - 4,3 минуты, меньше пяти. А теперь главное: ОДИН десятиминутный полный отказ съедает 23% месячного бюджета при цели 99,9%. Два таких за месяц - и половины бюджета нет.

Стержень: цель по надёжности имеет смысл только вместе с бюджетом ошибок, а бюджет - это разрешение тратить, а не запрет ошибаться.

// Формулировки: «что такое SLI, SLO и SLA?», «зачем бюджет ошибок?», «как выбрать цель по доступности?»

Три сокращения и порядок между ними

SLI (service level indicator) - это сам показатель, измеримое число: доля успешных запросов, доля запросов быстрее 300 миллисекунд, доля свежих данных. Главное требование к нему - он должен отражать то, что чувствует пользователь, а не то, что удобно померить.

SLO (service level objective) - цель по этому показателю: «99,9% запросов успешны за скользящие 30 дней». Это внутреннее обещание команды. SLA (service level agreement) - внешнее обещание клиенту, с деньгами за нарушение. Порядок такой: сначала показатель, потом внутренняя цель, и только потом, если нужно, внешнее обещание - причём с запасом. Внутренняя цель всегда строже внешней, иначе нарушение обещания клиенту вы узнаёте от клиента.

// Выбирают цель не по красоте числа, а по цене. Каждая девятка стоит денег: 99% - это 7,2 часа в месяц, 99,9% - 43 минуты, 99,99% - четыре минуты. Разница между последними двумя означает совсем другую архитектуру: запасные мощности в разных площадках дата-центра, автоматическое переключение, отработанные учения. Если бизнесу хватает 99,5%, платить за 99,99% незачем.

SLI
измеримый показатель качества (service level indicator), отражающий опыт пользователя
SLO
внутренняя цель по показателю (service level objective)
SLA
внешнее обещание клиенту (service level agreement) с ответственностью за нарушение

Бюджет ошибок как инструмент

Бюджет ошибок - это то, что осталось от цели: при 99,9% за месяц разрешено 43,2 минуты неуспеха. Считать его надо в потраченном, а не в «сколько раз падали». Посчитал несколько сценариев при цели 99,9%: полный отказ на 10 минут забирает 23,1% бюджета; получасовой сбой с половиной ошибок - 34,7%; четырёхчасовая деградация с 5% ошибок - 27,8%; сутки с одним процентом ошибок - 33,3%.

Обрати внимание на последние два. Медленная тихая деградация, которую никто не считает аварией, съедает бюджета столько же, сколько громкое падение. Именно поэтому бюджет считают по показателю, а не по числу инцидентов.

// Дальше бюджет становится инструментом принятия решений, и в этом весь смысл. Бюджет цел - катим новое, экспериментируем, идём на риск. Бюджет исчерпан - выкатки (установка новой версии на прод) только критичные, команда занимается надёжностью, пока он не восстановится. Это снимает вечный спор «разработка хочет быстрее, эксплуатация хочет стабильнее»: спорить больше не о чем, есть число. И работает это ровно до тех пор, пока правило соблюдают на самом деле.

бюджет ошибок
разрешённая доля неуспеха: разница между 100% и целью
скорость сгорания
как быстро расходуется бюджет; по ней и заводят алерты

Как мерить и на что смотреть

Показатель считают отношением: успешные запросы к общему числу за скользящее окно. Окно берут скользящее, а не календарный месяц, иначе первого числа бюджет волшебно обнуляется и первую неделю можно ронять что угодно.

Алерт вешают не на само значение показателя, а на скорость сгорания бюджета. Логика простая: если бюджет тратится в 14 раз быстрее нормы, то за двое суток он кончится целиком - будим человека сейчас. Если в два раза быстрее нормы, то повод разобраться в рабочее время, а не ночью.

// И два честных ограничения. Первое: не всякий запрос стоит считать. Опросы состояния от мониторинга, повторы клиентов, запросы ботов легко перекашивают картину, и их обычно исключают. Второе: цель должна быть достижимой силами вашего сервиса. Если вы зависите от чужого сервиса с обещанием 99,5%, обещать сверху 99,99% нельзя арифметически.

скользящее окно
последние 30 дней в любой момент, а не календарный месяц
алерт по скорости сгорания
будит, когда бюджет тратится существенно быстрее нормы

Как отвечать: «Зачем нужен бюджет ошибок, если можно просто стремиться к нулю сбоев?»

Потому что ноль сбоев недостижим и, что важнее, не нужен. Бюджет ошибок переводит надёжность из спора в число: при цели 99,9% за месяц разрешено 43,2 минуты неуспеха, и это ресурс, который можно тратить. Я считал, как он сгорает: один полный отказ на десять минут забирает 23% месячного бюджета, а сутки тихой деградации с одним процентом ошибок - 33%, то есть больше. Отсюда два практических следствия. Первое: считать надо по показателю, а не по числу инцидентов, иначе медленная деградация проходит мимо. Второе: бюджет управляет выкатками - пока он цел, команда экспериментирует и катит быстро, а как только исчерпан, выкатки только критичные и все занимаются надёжностью. Это снимает вечный спор между скоростью и стабильностью, потому что спорить больше не о чем, есть число.

Ответ объясняет назначение бюджета, подкрепляет арифметикой сгорания и заканчивается тем, как он меняет работу команды. Последнее и есть смысл всей конструкции.

На чём валятся

  • Обещают 99,99% не понимая, что это четыре минуты в месяц и совсем другая архитектура.
  • Считают надёжность числом инцидентов: тихая деградация съедает бюджет незаметно.
  • Делают внутреннюю цель равной внешнему обещанию и узнают о нарушении от клиента.
  • Берут календарный месяц вместо скользящего окна и обнуляют бюджет первого числа.
  • Обещают сверху больше, чем обещают сервисы, от которых зависят.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 6, остальные разбираются в тренажёре.

  1. #dvo_slo1 / 5
    SLO — 99.9% успешных запросов за месяц. Что такое бюджет ошибок и зачем он нужен?
    A)Резерв мощностей, который держат под всплески нагрузки
    B)Сумма, заложенная на компенсации клиентам за простой
    C)Допустимая доля отказов: 0.1% месяца
    D)Число инцидентов, которое команда вправе допустить за квартал
    показать ответ и разбор
    +C)Допустимая доля отказов: 0.1% месяца

    // разбор: Бюджет ошибок — обратная сторона цели: при 99.9% в запасе примерно 43 минуты отказа в месяц. Пока бюджет цел, команда катит изменения смело — риск оплачен. Когда он сгорел, релизы притормаживают и силы уходят в надёжность. Так спор «фичи против стабильности» превращается в арифметику, а не в вопрос характера участников.

  2. #dvo_slo2 / 5
    Руководство просит поставить цель доступности 100%. Что отвечает инженер?
    A)Согласиться: цель мотивирует, а недобор спишут по фактам
    B)Каждая девятка дороже, а меняться нужно
    C)Взять 100% для внешнего соглашения, а внутри держать 99%
    D)Поставить 100% и добиваться его ретраями на стороне клиента
    показать ответ и разбор
    +B)Каждая девятка дороже, а меняться нужно

    // разбор: Стоимость надёжности растёт нелинейно: переход с трёх девяток на четыре означает резервирование, дублирование по зонам, автоматику переключения и дежурство. Плюс сервис зависит от чужих компонентов, у которых своя доступность, — сотня недостижима арифметически. И главное: без допустимой доли отказов нельзя катить релизы и обновлять инфраструктуру. Цель выбирают по тому, что реально нужно пользователю.

  3. #dvo_slo3 / 5
    Какой показатель брать за SLI сервиса, чтобы он отражал именно опыт пользователей?
    A)Пользовательский: доля успешных/быстрых запросов
    B)Загрузку CPU и памяти нод, где крутится сервис
    C)Число задеплоенных версий за неделю
    D)Количество строк логов, записанных сервисом
    показать ответ и разбор
    +A)Пользовательский: доля успешных/быстрых запросов

    // разбор: SLI выбирают с позиции пользователя: доля успешных запросов (availability), доля быстрых ответов (latency ниже порога), корректность. CPU/память — это ресурсы: они могут быть в норме, пока пользователю плохо, и наоборот. Хороший SLI — отношение «хороших» событий к общему числу на границе, которую видит клиент (например, у балансировщика). От него уже ставят SLO и считают бюджет ошибок.

  4. #dvo_slo4 / 5
    Команда выжгла бюджет ошибок за месяц раньше срока. Что предписывает разумная политика бюджета?
    A)Понизить SLO, чтобы бюджет снова стал положительным
    B)Игнорировать: бюджет — это ориентир, а не правило
    C)Притормозить рискованные запуски, вернуться к надёжности
    D)Ускорить релизы, чтобы быстрее выкатить исправления
    показать ответ и разбор
    +C)Притормозить рискованные запуски, вернуться к надёжности

    // разбор: Бюджет ошибок — это согласованный запас на риск. Политика бюджета заранее описывает, что происходит при его исчерпании: замораживают рискованные фичи-релизы и переключаются на работу над надёжностью (устранение причин инцидентов, устойчивость), пока бюджет не восстановится. Смысл — объективный, заранее принятый триггер для баланса «скорость против стабильности», а не спор на эмоциях по факту. Понижать SLO под провал нельзя.

  5. #dvo_slo5 / 5
    Из чего разумно выводить конкретное число SLO (скажем, 99.9%), а не брать его с потолка?
    A)Из максимально возможной цифры — чем выше, тем лучше
    B)Из SLO соседней команды, чтобы было единообразно
    C)Из круглого числа, которое проще объявить руководству
    D)Из нужд пользователей и исторических данных
    показать ответ и разбор
    +D)Из нужд пользователей и исторических данных

    // разбор: SLO ставят между двумя ориентирами: чего достаточно пользователям (сверхнадёжность, которую никто не замечает, — пустая трата) и что сервис реально выдаёт по историческим данным. Слишком высокий SLO жжёт ресурсы и парализует изменения (бюджета почти нет), слишком низкий — злит пользователей. Начинают с измерения текущего уровня и потребности, а дальше корректируют. Чужие цели и круглые числа — плохая основа.

дальше

Теорию прочитали. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.