Что означает термин “availability” (доступность) и как она измеряется?
Что означает «availability» (доступность)
Availability — это степень готовности сервиса обрабатывать запросы и отдавать требуемую функциональность пользователю. Проще: это доля времени (или доля успешных запросов), когда сервис «работает» по заданному критерию успеха.
Формулы
-
Временной подход (time-based availability)
Availability=Общее время−Время простояОбщее время\text{Availability} = \frac{\text{Общее время} - \text{Время простоя}}{\text{Общее время}}
где «Время простоя» — суммарное время, когда сервис считается недоступным по определённым правилам (health-checks, ошибки, таймауты и т.д.). -
Подход по запросам (request-based availability)
Availability=Число успешных запросовОбщее число запросов\text{Availability} = \frac{\text{Число успешных запросов}}{\text{Общее число запросов}}
«Успешный запрос» — это заранее определённое условие (например, HTTP-коды 2xx, p95 latency < X и т.п.).
Пример вычисления (цифра за цифрой)
Возьмём SLO = 99.9% за 30-дневный период и посчитаем допустимое время простоя:
-
30 дней = 30 × 24 = 720 часов.
-
720 часов × 3600 = 2 592 000 секунд.
-
Ненадёжность = 1 − 0.999 = 0.001.
-
Допустимое простое время в секундах = 2 592 000 × 0.001 = 2 592 сек.
-
2 592 сек = 2 592 ÷ 60 = 43.2 мин → 43 мин и 0.2×60 = 12 сек → 43 мин 12 сек.
Часто используемые уровни доступности — время простоя
(дано в человеко-понятном виде)
-
90% → год: ~36 дн 12 ч; месяц(30д): ~3 дн; день: ~2 ч 24 мин.
-
99% → год: ~3 дн 15 ч 36 мин; месяц: ~7 ч 12 мин; день: ~14 мин 24 сек.
-
99.9% → год: ~8 ч 45 мин 36 сек; месяц: ~43 мин 12 сек; день: ~1 мин 26 сек.
-
99.95% → год: ~4 ч 22 мин 48 сек; месяц: ~21 мин 36 сек; день: ~43 сек.
-
99.99% → год: ~52 мин 34 сек; месяц: ~4 мин 19 сек; день: ~9 сек.
-
99.999% → год: ~5 мин 15 сек; месяц: ~26 сек; день: ~1 сек.
Как измеряют на практике
-
Синтетические проверки (active / probes): регулярные HTTP-запросы монитора к URL/эндпойнту (ping, healthcheck). Позволяют быстро обнаружить доступность, но могут не отражать реальный пользовательский опыт.
-
Реальные запросы (RUM / passive): измерение успешных/проваленных реальных пользовательских транзакций. Лучший индикатор UX, но может быть подвержен шуму и нерегулярному трафику.
-
Логи и метрики сервера: подсчёт ошибок 5xx/availability по сервисам, контролируемым компонентам.
-
Трейсинг и APM: использование распределённых трейсингов для определения точек отказа и влияния на availability.
На каком уровне считать
- Уровень сервиса (API, сайт), компонент (база данных, кэш), регион/зона и edge/CDN — важно указывать уровень, на котором измеряется availability, иначе цифры будут вводить в заблуждение.
Что считается «успехом»
Нужно заранее определить: HTTP 2xx? 2xx+3xx? Включать ли повторные попытки (retries)? Что делать с частично деградировавшей функциональностью (например, поисковая функция работает медленно — считать доступной или нет)? Эти правила должны быть документированы.
Особенности и подводные камни
-
Окна учета: скользящее окно (rolling) и календарный месяц дают разные результаты.
-
Искажения из-за ретраев и CDN: клиентские ретраи могут скрывать реальные сбои.
-
Синхронизация времени: ошибки в часовых метках могут исказить подсчёт.
-
Зависимости: доступность комплексного сервиса = функция доступности зависимостей; простая агрегация может неверно оценивать UX.
-
Плановое обслуживание: обычно исключается из SLA, но это должно быть явно согласовано.
-
Разная метрика для разных пользователей: internal admin UI и публичный API могут иметь разные SLO/SLA.
Лучшие практики измерения
-
Формализовать критерий «успеха» и методику подсчёта SLI.
-
Собирать и хранить сырые метрики запросов и health-check событий для верификации.
-
Сочетать синтетические проверки и RUM для полноты картины.
-
Мониторить скорость «сжигания» error budget, а не только факт нарушения SLO.
-
Учитывать границы — региональные сбои, сетевые partition’ы и плановые окна.