SLO (Service Level Objective)
SLO — это конкретная измеримая цель по доступности или производительности сервиса, установленная внутренне командой для контроля качества. SLO помогает команде понимать, насколько хорошо работает система.
Примеры SLO
- Доступность API — не менее 99.9% в месяц
- Время отклика — 95% запросов обрабатываются за < 200ms
- Пропускная способность — система обрабатывает > 1000 RPS
- Процент ошибок — не более 0.1% HTTP 5xx ошибок
Как определить SLO
Для определения правильных SLO нужно:
1# Пример расчета SLO для API
2import time
3from datetime import datetime, timedelta
4
5class SLOCalculator:
6 def __init__(self, target_availability=99.9):
7 self.target_availability = target_availability
8
9 def calculate_error_budget(self, period_days=30):
10 """Рассчитать бюджет ошибок на период"""
11 total_minutes = period_days * 24 * 60
12 allowed_downtime = total_minutes * (100 - self.target_availability) / 100
13 return allowed_downtime
14
15 def check_slo_burn_rate(self, errors, total_requests):
16 """Проверить скорость расходования бюджета ошибок"""
17 error_rate = errors / total_requests * 100
18 return error_rate
19
20# Установка через pip
21pip install prometheus-client
22
23# Установка через poetry
24poetry add prometheus-client
SLO vs Error Budget
Error Budget (бюджет ошибок) — это обратная сторона SLO. Если SLO = 99.9%, то бюджет ошибок = 0.1%.
FAQ
Можно ли иметь несколько SLO?
Да, можно устанавливать разные SLO для разных аспектов сервиса (доступность, latency, throughput) и разных групп пользователей.
Что делать, если SLO нарушается?
Нужно замедлить релизы новых функций и сфокусироваться на повышении надежности системы.