SRE: эксплуатация под нагрузкой

Вы научитесь держать сервис в рамках SLO, когда трафик растёт и зависимости падают: алерты по расходу бюджета ошибок, разбор инцидента по ролям, откат релиза за минуты. Знакомая картина: все поды в Running, а каждый сотый запрос ждёт больше четырёх секунд. Ставить у себя ничего не нужно: решения проверяются в песочнице на настоящих Prometheus, k3d, PostgreSQL, Redis, Kafka и nginx.

Чему вы научитесь

Пейджер молчит, бюджет горит

Доля 5xx на оформлении заказа выросла с 0,04 % до 3,7 %. При SLO 99,9 % это темп 37×: месячного бюджета хватит на 19,5 часа.

Пятиминутное окно увидело проблему на второй минуте. Часовое дошло до порога только на 23-й, и пейджер зазвонил на 25-й. Пороги вы считаете от бюджета, окна и выдержку for проверяете юнит-тестами promtool на синтетических рядах.

Сколько выдержит контейнер с limits.cpu: 500m?

Один сервис, один профиль нагрузки, меняется только предел процессора. С 500m на 150 rps квота CFS кончается раньше периода, и три запроса из четырёх не укладываются в таймаут клиента.

В курсе вы читаете такой прогон как отчёт: ступени нагрузки, колено кривой, ограничитель, доля троттлящихся периодов из cpu.stat. И знаете, почему у колена два повтора дают разный результат.

Что нужно знать

Linux на уровне процессов, сигналов и сети.

Docker и базовые объекты Kubernetes, kubectl для apply, get и logs.

Чтение кода на Python и Go: задачи пишутся на них, глубокое знание языков не нужно.

SQL на уровне SELECT и JOIN. Опыт дежурств поможет, но не обязателен.

Поды Running, а сервис не отвечает

Так начинается break-fix: кластер k3d уже сломан, и чекер прогоняет ваш скрипт на двух поломках разных классов. Угадать один раз не выйдет.

Причин пять: не тот образ, проба готовности смотрит не в тот порт, реплик ноль, селектор сервиса мимо меток, targetPort мимо порта процесса. Класс называете по выводу kubectl -o jsonpath до правки, объект не пересоздаёте.

Релиз, который не дошёл до всего парка

Шаблон подставил пул на 10 соединений вместо 40. Статическая проверка такой конфиг пропускает. Канарейка под тем же трафиком отвечает с p95 279 мс против 106 мс у базы, и гейт останавливает раскатку.

Этот гейт вы пишете сами: валидация ключей, бюджет таймаутов с ретраями, лимит соединений к базе, вердикт по журналу канарейки. Рядом — флаги-рубильники, миграции expand-contract и правило пяти минут для выбора между откатом и докатом.

Для кого

DevOps-инженерам и администраторам, которые идут в SRE и хотят мерить надёжность целями, а не ощущением «вроде работает».

Бэкенд-разработчикам, которые дежурят по своим сервисам.

Тимлидам платформенных команд, которым нужны SLO, ротация дежурств и постмортемы как процесс.

Итоговый проект: сервис orders под SLO

Четыре этапа на одном сервисе: слой SLI, алерты по бюджету, выкат с PodDisruptionBudget, break-fix с постмортемом. Каждый этап принимает чекер, а не человек.

Алерты без стража по объёму не пройдут: на сценарии с 0,1 запроса в секунду и половиной ошибок оба алерта загорятся, и promtool вернёт FAILED. Без keep_firing_for быстрый алерт погаснет раньше часового окна.

В постмортеме расход бюджета считается. Четыре минуты полного отказа при 10 запросах в секунду — 2400 неуспешных запросов, или 9,3 % месячного бюджета.

Поддержка

Вы также можете задать любой вопрос по курсу у поддержки t.me/mentorix_support

Программа курса

Модулей: 14, уроков: 65. Задачи с кодом проверяются автоматически.

  1. Мышление SRE и SLO

  2. Метрики и PromQL под нагрузкой

  3. Логи и трейсы

  4. Инциденты и on-call

  5. Kubernetes под нагрузкой

  6. Паттерны надёжности в коде

  7. Данные под нагрузкой

  8. Трафик и балансировка

  9. Нагрузочное тестирование и ёмкость

  10. Хаос-инжиниринг и устойчивость

  11. Linux под нагрузкой

  12. Релизы и изменения без риска

  13. Автоматизация эксплуатации

  14. Итоговый проект

Стоимость курса: 18990 ₽

Открыть курс на Mentorix · Все курсы