SLA, SLO, SLI и error budget

На прошлом шаге вы научились видеть, что происходит с системой: метрики, логи, дашборды. Остался вопрос, на который графики сами по себе не отвечают: а какая цель? Когда система достаточно здорова? 99% успешных запросов, это хорошо или стыдно? Нужно ли гнаться за 100%? Чтобы про надежность можно было договариваться и спорить по делу, ее переводят в числа. Этим занимаются три похожие аббревиатуры, SLI, SLO, SLA, и идея error budget поверх них. Все это пришло из практики SRE и давно стало общим языком надежности.

Три буквы, SLI, SLO, SLA

Разберем снизу вверх, потому что так понятнее.

SLI (Indicator) – то, что вы реально измеряете. Это метрика с прошлого шага, но не любая, а выбранная так, чтобы отражать счастье пользователя: доля успешных запросов (не 5xx), доля запросов быстрее 300 миллисекунд, доступность сервиса. SLI, это просто число, снятое с системы, например «99,95% запросов за месяц прошли успешно».

SLO (Objective) – цель, которую команда сама себе ставит по этому числу. «Доля успешных запросов должна быть не ниже 99,9% за месяц». Это внутренний ориентир: пока SLI выше SLO, все хорошо, опустился ниже, пора разбираться.

SLA (Agreement) – обещание клиенту, у которого есть последствия. «Гарантируем доступность 99,5%, а если нарушим, вернем часть денег». Это уже договор с деньгами на кону, и потому внешний SLA почти всегда мягче внутреннего SLO: цель ставят строже обещания, чтобы успеть среагировать до того, как нарушение дойдет до клиента.

Связь читается одной строкой: SLI измеряет, SLO задает цель, SLA дает обещание. Путать их любят на собеседованиях, поэтому держите в голове именно эту тройку «измеряю, цель, обещание».

Сколько стоит девятка

Доступность принято считать в «девятках», и за безобидными процентами прячется конкретное время простоя. Вот сколько сервису разрешено лежать при разных целях:

ДоступностьПростой в годПростой в месяц
99% (две девятки)~3,65 дня~7,2 часа
99,9% (три девятки)~8,8 часа~43 минуты
99,99% (четыре девятки)~52 минуты~4,3 минуты
99,999% (пять девяток)~5 минут~26 секунд

Из таблицы видно главное: каждая следующая девятка дается куда дороже предыдущей. Подняться с 99% до 99,9%, это серьезная инженерная работа, а прыжок с 99,99% до 99,999% требует резервирования, автоматики и денег, которые большинству проектов не окупятся никогда. Поэтому число девяток выбирают под задачу: блогу хватит двух, платежной системе нужны четыре, и стоят эти варианты совершенно по-разному.

Почему не 100%

Напрашивается мысль: а давайте просто стремиться к 100%. Так вот, не давайте, и это ключевая идея SRE.

Сто процентов недостижимы и не нужны. Стоят они бесконечно дорого, а пользователь разницы все равно не заметит: между 99,99% и 100% стоит его собственный wi-fi, который падает чаще вашего сервиса. Но есть причина серьезнее. Стремление к стопроцентной надежности означает «никогда не рисковать»: не катить новые версии, не экспериментировать, не трогать работающее. А это смерть для продукта, который должен развиваться. Надежность и скорость изменений тянут в разные стороны, и 100% надежности оборачивается нулем новых фич.

Значит, нужна не максимальная надежность, а достаточная. И как только цель перестает быть стопроцентной, появляется кое-что полезное, право на ошибку, выраженное числом.

Error budget, бюджет на ошибки

Если цель 99,9%, то оставшиеся 0,1% это не позор, а разрешенный расход. Это и есть error budget, бюджет ошибок: бюджет равен 100% минус SLO. При цели 99,9% за месяц у вас есть примерно 43 минуты, в которые сервису позволено быть недоступным, и это нормально.

Самое интересное в том, как этот бюджет тратят. Из него оплачиваются риски: каждый деплой, каждый эксперимент, канареечная выкатка из модуля про CI/CD, все понемногу расходует бюджет. И отсюда простое правило жизни команды:

Этим error budget снимает вечный спор между разработчиками, которые хотят быстрее катить фичи, и эксплуатацией, которая хочет стабильности. Вместо споров на эмоциях появляется одно общее число. Бюджет цел, рискуйте на здоровье. Бюджет на нуле, значит, в этом месяце сервис уже исчерпал право падать, релизы тормозят, и силы идут на стабилизацию. И тот же бюджет защищает дежурного из разговоров про три часа ночи: пока команда укладывается в SLO, гнаться за каждой микросекундой и выжигать людей бессмысленно.

Причем здесь DevOps

Вся эта арифметика стоит ровно на прошлом шаге: SLI, это метрика, посчитанная из тех же данных, что собирает Prometheus, а нарушение SLO ловится обычным алертом. Поверх метрик надстраиваются цели, поверх целей бюджет, и из сухих графиков получается язык, на котором бизнес и инженеры договариваются о надежности. Для девопса это повседневная рамка: что считать за SLI, какие SLO держать, сколько бюджета осталось и можно ли сегодня рисковать с выкаткой. А на собеседованиях разница SLA, SLO и SLI и смысл error budget, вопросы настолько стабильные, что их стоит уметь рассказать не задумываясь.

Словарик

ТерминЧто означает
SLIИзмеряемый показатель, отражающий счастье пользователя (доля успешных запросов)
SLOВнутренняя цель по SLI (например, ≥ 99,9% за месяц)
SLAВнешнее обещание клиенту с последствиями за нарушение; мягче, чем SLO
ДевяткиСпособ считать доступность: 99,9%, 99,99% и так далее
Error budgetРазрешенный расход на ошибки: 100% минус SLO
Трата бюджетаРиски, деплои, эксперименты; бюджет исчерпан, релизы замораживают
Почему не 100%Недостижимо, бесконечно дорого и убивает развитие продукта