Цели уровня обслуживания
Что это такое
Показатель уровня обслуживания — это измерение того, что важно пользователям. Цель уровня обслуживания — ориентир для этого измерения за период. У ориентира должны быть число, окно и область: доля запросов, которые завершаются успешно, за тридцать дней, для названного сервиса. Цель — это бизнес-утверждение, выраженное измеримо, а не описание внутреннего здоровья системы.
Почему это важно
Ориентир — это то, как надёжность становится решением, а не мнением. Без него вызов в три часа ночи оправдывается тем, кто поставил оповещение, а вопрос «выпускать функцию или чинить базу данных» превращается в состязание характеров. С ним ответ — арифметика, и спор переходит к куда более продуктивному вопросу: правильный ли это ориентир. Назвать ориентир — значит ещё и заставить команду решить, что на самом деле чувствуют пользователи, а это часто не то, что измеряют внутренние панели.
Ключевые идеи
Измеряйте то, что чувствует пользователь, а не то, что сообщает система
Показатель должен быть долей успеха, задержкой или доступностью в том виде, как их воспринял бы пользователь, измеренными в самой близкой к пользователю точке, какая практична. Сервис, который быстро отвечает, но возвращает ошибки, имеет хорошее здоровье системы и плохой результат для пользователя. Сервис, который работает, но невыносимо медленный, подводит пользователя так же полно.
показатель: доля запросов, обслуженных успешно за 300 мс
цель: 99,9% за скользящие 30 дней
область: сервис checkout, без внутренних проверок здоровья
Ориентир — это выбор о стоимости, а не измерение качества
Переход с 99,9 на 99,99 процента обычно стоит куда больше, чем десятикратные усилия, потому что он отнимает свободу развёртывать без репетиции и падать, а потом восстанавливаться. Ориентир должен быть тем уровнем, который пользователи замечают, и не выше, и его следует согласовывать с теми, кто зависит от сервиса, а не устанавливать в одностороннем порядке силами эксплуатации. Многие продукты вполне успешны при куда меньшем числе.
Усреднение прячет интересные случаи
Среднее по всем запросам прячет самые медленные и самых невезучих пользователей. Средние от средних по нескольким экземплярам прячут экземпляр, который отказывает. Ориентиры по задержке следует формулировать как долю в пределах порога, а не как среднее, чтобы длинный хвост шёл в счёт ориентира, а не усреднялся.
Новый сервис начинает с чужого ориентира
Выбирать ориентир для чего-то без пользователей — гадание. Практичный подход — взять ориентир платформы или соседнего сервиса, измерять фактическое поведение какое-то время, а затем установить свой, опираясь на это. Ориентир — живая договорённость, которую пересматривают по мере взросления сервиса, а не число, зафиксированное на этапе проектирования.
Цель должна измеряться по реальному сигналу
Если показатель нельзя вычислить из данных, которые уже собираются, за ним не будут следить. Здесь и связь с наблюдаемостью: цель, требующая измерения, которое никто не ведёт, — это желание. Это же довод в пользу выбора показателей, которые уже выражаются имеющимися метриками.
Меньше целей, и у каждой явный владелец
Одной-двух на видимое пользователю взаимодействие достаточно. Список из двадцати целей — это описание системы, а не набор обещаний, и никто по нему не будет действовать. У каждой цели должен быть названный владелец, отвечающий и за её достижение, и за изменение, когда меняется договорённость.
Практика
Напишите одну цель для реального сервиса
Выберите знакомый сервис и напишите его показатель, ориентир, окно и область одним предложением, затем проверьте, что метрика существует.
Готово, когда: вы можете назвать показатель, число, период и область и показать данные, которые его вычисляют.
Найдите слепое пятно показателя
Возьмите существующую цель и опишите видимый пользователю отказ, который она не поймает.
Готово, когда: вы можете назвать хотя бы один режим отказа, который цель пропускает, и решить, приемлемо ли это.
Частые ошибки
- Измерять внутреннее здоровье вместо опыта пользователя — панель зелёная, а пользователи терпят отказы; исправить: формулируйте показатель так, как его воспринял бы пользователь.
- Ставить ориентир односторонне и очень высоко — цена огромна, а ценность не доказана; исправить: согласуйте ориентир с потребителями и ставьте тот, что им нужен.
- Использовать средние — самые медленные запросы и самые невезучие пользователи исчезают; исправить: измеряйте долю в пределах порога.
- Писать много целей, у которых нет владельца — список не обещание; исправить: одна-две цели, у каждой названный владелец.
- Выбирать показатель, за которым нет данных — цель никогда не измеряется; исправить: выбирайте метрики, которые стек наблюдаемости уже собирает.
Что читать дальше
- Обеспечение надёжности сайтов (06-cloud-devops/23-site-reliability-engineering) — практика, основой которой служат эти цели.
- Бюджеты ошибок (06-cloud-devops/23-site-reliability-engineering/02-error-budgets) — что ориентир означает для распределения времени команды.
- Мониторинг и наблюдаемость (Prometheus / Grafana) (06-cloud-devops/18-monitoring-observability-prometheus-grafana) — где показатель на самом деле измеряется.