SLA и отказоустойчивость
Service Level Agreement — соглашение об уровне сервиса, где доступность и время реакции зафиксированы в числах и подкреплены компенсацией.
Что такое SLA
SLA (Service Level Agreement, соглашение об уровне обслуживания) — часть договора с провайдером, где качество услуги описано измеримыми числами: сколько процентов времени сервис доступен, за сколько отвечает поддержка, что провайдер платит, если обещание нарушено. Без последнего пункта это не SLA, а маркетинг.
Ключевой параметр — доступность (uptime): доля времени за расчётный период, когда сервис работал. Пишется в «девятках»: 99.9%, 99.99%. Разница между ними выглядит косметической, но на практике это разные классы инфраструктуры и разные деньги.
Сколько это в минутах простоя
В году 525 600 минут, в месяце (30 дней) — 43 200. Отсюда допустимый простой:
| Доступность | В год | В месяц | В сутки |
|---|---|---|---|
| 99% («две девятки») | 3,65 суток | 7,2 часа | 14,4 мин |
| 99,5% | 43,8 часа | 3,6 часа | 7,2 мин |
| 99,9% («три девятки») | 8,76 часа | 43,2 мин | 1,44 мин |
| 99,95% | 4,38 часа | 21,6 мин | 43 сек |
| 99,99% («четыре девятки») | 52,6 мин | 4,32 мин | 8,6 сек |
| 99,999% («пять девяток») | 5,26 мин | 26 сек | 0,9 сек |
Что из этого следует практически:
- 99,9% — 43 минуты в месяц. Хватает на плановую перезагрузку и одну неспешную починку руками. Типовой уровень массового хостинга и VPS.
- 99,99% — 4 минуты в месяц. Человек не успеет даже открыть ноутбук. Такое достигается только автоматическим переключением на резерв, то есть закладывается в архитектуру, а не в регламент дежурства.
- 99,999% — 26 секунд в месяц. Это уровень телеком-оборудования, стоит кратно дороже и почти никогда не нужен обычному веб-сервису.
Считать простой поминутно за месяц выгоднее клиенту: одна двухчасовая авария сжигает месячный бюджет 99,9%, но в годовом расчёте почти незаметна. Смотрите в договоре, какой период расчётный.
SLA расшифровка и соседние аббревиатуры
- SLA (Service Level Agreement) — внешнее обязательство перед клиентом с компенсацией за нарушение.
- SLO (Service Level Objective) — внутренняя цель команды. Всегда строже SLA: если клиенту обещано 99,9%, внутри целятся в 99,95%, чтобы был запас.
- SLI (Service Level Indicator) — сама метрика, которую меряют: доля успешных ответов, latency перцентиля 99.
- OLA (Operational Level Agreement) — договорённость между внутренними отделами, обеспечивающая внешний SLA.
Порядок такой: меряем SLI → ставим себе SLO → продаём клиенту SLA с запасом.
Что ещё есть в SLA, кроме процентов
- Время реакции поддержки по приоритетам: критичный инцидент — 15 минут, обычный — 8 часов. Реакция и решение — разные обязательства, не путайте.
- Исключения. Плановые работы с предупреждением, DDoS, форс-мажор и действия самого клиента обычно из расчёта простоя вычитаются. Именно здесь красивые «99,99%» часто и растворяются.
- Компенсация. Как правило — процент от месячной платы в виде кредита на счёт, а не возврат денег. Потолок компенсации почти всегда ограничен стоимостью услуги за период, а не вашими убытками.
- RTO (Recovery Time Objective) — за сколько восстановимся после аварии. RPO (Recovery Point Objective) — какой объём данных допустимо потерять. RPO в 1 час означает, что резервная копия снимается не реже, чем раз в час.
Что такое отказоустойчивость
Отказоустойчивость (fault tolerance) — свойство системы продолжать работу при выходе из строя отдельных компонентов. Достигается одним способом — резервированием: любой элемент, существующий в единственном экземпляре, рано или поздно станет причиной простоя (single point of failure).
Стоит различать два уровня:
- Высокая доступность (HA) — при отказе есть короткий перерыв на переключение (секунды-минуты). Реализуется через балансировщик, health check и failover-реплику.
- Отказоустойчивость в строгом смысле — отказ вообще не виден пользователю, узлы работают параллельно.
Как это выглядит на слоях инфраструктуры:
| Слой | Единая точка отказа | Резервирование |
|---|---|---|
| Диск | Смерть накопителя | RAID |
| Сервер | Отказ железа | Кластер из нескольких узлов + LB |
| База данных | Единственный инстанс | Репликация, автоматический failover |
| ЦОД | Пожар, обрыв канала | Вторая площадка, Disaster Recovery |
| Данные | Удаление, шифровальщик | Резервное копирование |
Резервирование не заменяет бэкап: RAID и репликация честно продублируют команду DROP TABLE на все узлы.
Как складывается доступность
Компоненты, соединённые последовательно, перемножаются — общая доступность всегда ниже самого слабого звена:
Приложение (99,9%) → БД (99,9%) → канал (99,9%)
0,999 × 0,999 × 0,999 = 0,997 → 99,7% (≈26 часов простоя в год)
Резервирование работает в обратную сторону — перемножаются вероятности отказа:
Два независимых сервера по 99,9% за балансировщиком:
1 − (0,001 × 0,001) = 0,999999 → 99,9999%
Отсюда два вывода. Первый: цепочка из трёх «трёх девяток» не даёт трёх девяток на выходе. Второй: дублирование даёт выигрыш только при независимости отказов — две виртуалки на одном гипервизоре, в одной стойке или на одном вводе питания падают вместе, и вся арифметика превращается в тыкву.
SLA у провайдера: на что смотреть
- На что именно распространяется процент — на сеть, на питание, на конкретную виртуалку или на весь ЦОД. Часто SLA даётся на доступность сети, а не вашего сервиса.
- Уровень ЦОД. Классические ориентиры Uptime Institute: Tier I — 99,671% (~28,8 ч простоя в год), Tier II — 99,741% (~22 ч), Tier III — 99,982% (~1,6 ч), Tier IV — 99,995% (~26 мин). Подробнее — в статье про инженерию ЦОД.
- Кто фиксирует простой. Если засчитываются только тикеты, открытые клиентом, компенсацию придётся выбивать самому.
- Есть ли SLA вообще. У части бюджетных тарифов и почти у всех spot-инстансов гарантий нет по определению — за это и скидка.
Связанные термины
- Disaster Recovery — восстановление после крупной аварии, RTO и RPO
- load balancer — базовый механизм высокой доступности
- health check — как система узнаёт об отказе узла
- Резервное копирование — защита от потери данных, которую не заменяет репликация
- Инженерия ЦОД — Tier и физическое резервирование площадки
- DevOps — SRE-практика error budget вокруг SLO
Готовы запустить GPU-задачу?
Запустить GPU-сервер