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 нарушается?

Нужно замедлить релизы новых функций и сфокусироваться на повышении надежности системы.