SLO (Service Level Objective)¶
SLO (Service Level Objective) - это целевые показатели надежности сервиса, которые определяют, какой уровень качества считается приемлемым (например, "99,9% успешных запросов в месяц"). Они нужны, чтобы формализовать ожидания пользователей и команды, а также принимать решения: когда вкладываться в стабильность, а когда — в фичи.
Это соглашение, договоренность, обещание "Наш сервис будет работать не хуже, чем...". SLO — не догма, а инструмент для баланса между надежностью и бизнес-целями.
От SLA отличается тем, что применяется там, где между договорившимися не происходит взаиморасчетов, нет тарифов и штрафных санкций.
SLO служит для оценки качества сервиса с точки зрения пользователей этого сервиса. Смысл в том, что определив SLO для сервиса, мы должны пытаться удерживать наши реальные показатели немного выше, постоянно улучшая наш сервис.
SLO также используется для того, чтобы понимать, как приоретизировать задачи инженеров. Например, у нас есть две проблемы:
- раз в неделю наша главная страница начинает сыпать пятисотками
- раз в месяц у нас падает база данных
Пятисотки сжигают 7% нашего бюджета ошибок, а падение БД сразу 20%. Но первое случается чаще, и в итоге съедает больше, поэтому пятисотками следует заняться в первую очередь.
Пример SLO:¶
- Доступность API - 99,9% uptime в месяц (API может быть недоступно не больше 43 минут в месяц). Метрика:
(успешные HTTP-запросы / общее количество запросов) × 100%. - ВМ с 1 CPU и 1 HDD 10Gb должна создаваться не дольше 20 секунд. Метрика: Перцентиль p^95 времени создания.
Как определить SLO¶
Чем надёжнее система, тем дороже она стоит. Поэтому определите самый низкий уровень надёжности, который может сойти вам с рук, и укажите его в качестве SLO
сказано в рекомендациях Google. "Сойти с рук" - значит, что пользователи не заметят разницы или заметят, но это не повлияет на их удовлетворенность сервисом.
Кто определяет SLO¶
Определение SLO это совместный процесс, в котором участвуют SRE и менеджеры продукта (по хорошему - еще и разработка), но роли у них разные.
| Роль | Вклад в SLO | Почему? |
|---|---|---|
| Product Manager / Бизнес | Определяет, что важно для пользователей | Знают, как это работает, знают бизнес-требования и UX |
| SRE | Определяют, что технически возможно | Понимают инфраструктуру и реалистичность |
Почему это нужно делать вместе¶
- Продукт без SRE выберет нереалистичные SLO (например, "100% uptime"), что приведет к:
- Постоянному нарушению SLO.
- Невозможности релизить новые фичи (из-за Error Budget).
- SRE без продукта выберут слишком мягкие SLO (например, "95% uptime"), что приведет к:
- Деградации пользовательского опыта.
- Потере клиентов из-за частых сбоев.
Пример конфликта: - PM: "Нам нужен 99,999% uptime" - SRE: "Это потребует 100500x увеличение мощностей и найм 18 человек за 500000 рублей в секунду"
Компромисс: 99,9% uptime + автоматическое переключение при сбоях.
Как согласовать SLO¶
-
Продукт говорит:
- Какие функции продукта критичны
- Какие метрики важны для пользователей (например, "скорость загрузки <2 сек").
-
SRE предлагают:
- Технически достижимые значения (например, "p^95 latency <1 сек").
- Инструменты для измерения.
- Последствия для Error Budget (например, "при 99,9% можно релизить 10 фич/мес").
- Какие компоненты тормозят (например, "БД не вытянет 99,99% без шардинга").
- Итог: Подписанный документ с SLO, который устраивает всех.
Что будет, если SLO определяет только одна роль?¶
- Только PM: Нереалистичные SLO → команды L3 и SRE всегда в тушении пожаров.
- Только SRE: Слишком низкие SLO → сервис будет постоянно падать, но формально SLO соблюдается или SLO могут не учитывать бизнес-потребности (например, "нам всё равно на latency").