По каким признакам можно определить, что система стала высоконагруженной?

«По каким признакам можно определить, что система стала высоконагруженной?» — вопрос из категории DevOps и инфраструктура, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Высоконагруженность системы — это состояние, когда она приближается к пределам своей производительности или доступности. Я определяю ее по комплексу метрик, выходящих за установленные пороги (SLA/SLO).

Ключевые признаки:

  1. Деградация времени отклика (Latency):

    • Процентили (p95, p99) времени ответа постоянно превышают целевые значения (например, p95 > 500 мс для API).
    • Рост задержки в очередях сообщений (Kafka, RabbitMQ).
  2. Рост уровня ошибок:

    • Увеличение доли HTTP-ответов 5xx (ошибки сервера) и 4xx (например, 429 Too Many Requests).
    • Рост таймаутов и ошибок подключения к базам данных, кэшам (Redis) или внешним сервисам.
  3. Насыщение критических ресурсов:

    • CPU: стабильная загрузка ядер выше 70-80%.
    • Память: высокое использование оперативной памяти, активный своп (swap), рост числа OOM-киллов.
    • Диск I/O: время ожидания операций ввода-вывода (await) растет, утилизация диска приближается к 100%.
    • Сеть: исчерпание пропускной способности или лимита соединений.
  4. Автомасштабирование не справляется: Количество инстансов в Auto Scaling Group постоянно на максимуме, но метрики нагрузки не снижаются.

Пример алерта в Prometheus для CPU:

- alert: HighNodeCPU
  expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 75
  for: 10m
  labels:
    severity: warning
  annotations:
    summary: "Высокая загрузка CPU на ноде {{ $labels.instance }}"

Проактивные действия: При появлении таких признаков мы сразу смотрим на графы в Grafana (цепочку зависимостей), логи (ELK Stack) и начинаем искать "узкое место" (bottleneck) — будь то база данных, конкретный микросервис или сетевая инфраструктура.