Автоскейлинг и баланс SLA
Автоскейлинг и баланс SLA
1) Цели и принципы
Цель автоскейлинга — держать SLO (латентность/доступность) при минимальной стоимости.
SLA↔SLO↔SLA Cost: не гонимся за «бесконечным» масштабом — скейлимся в пределах бюджета ошибок и денежных лимитов.
Открытая модель нагрузки: приходящие запросы формируют поток интенсивности `λ`; система должна обеспечить средний параллелизм `N ≈ λ × W` (закон Литтла), где `W` — среднее время обслуживания.
2) Какие метрики годятся в триггеры
Технические:- CPU/RAM/IO (proxy для насыщения).
- Конкурентность (in-flight) и pool wait.
- p95/p99 application latency (реально отражает SLO).
- RPS/arrival rate (скорость заявок).
- Очереди: глубина, возраст сообщений, скорость обработки.
- Доля успешных транзакций ≤ T сек (депозиты, чек-аут).
- Время подтверждения операций.
Рекомендация: комбинировать 2–3 сигнала: например, latency+pools для сервисов и queue depth+age для воркеров.
3) Реактивный vs предиктивный скейл
Реактивный (feedback): HPA/ASG увеличивают/уменьшают реплики по факту. Просто, но есть лаг.
Предиктивный (feed-forward): календарь/прошлая телеметрия/маркет-ивенты. Включает pre-warm: поднять N инстансов за Δt до пика.
На практике: гибрид — baseline (минимум), предиктивный буст перед событиями, реактивный доводит.
4) Скейл-политики и параметры стабильности
Target tracking: держать метрику около целевого (напр., CPU 60%).
Step scaling: ступени при превышениях (агрессивно на спайках).
Stabilization window / cooldown: сгладить флаппинг (напр., 60–180 сек).
Min/Max: нижний и верхний пределы; max — в рамках лимитов БД/провайдера.
5) Координация уровней (архитектурный каскад)
1. Периметр / API-шлюз — эластичен, но с лимитами и backpressure.
2. Сервисы — HPA по latency/RPS/pool wait.
3. Очереди/воркеры — KEDA/ASG по глубине/возрасту сообщений.
4. БД/кеш — масштабирование осторожно (реплики/шардирование), заранее.
Правило: не увеличивайте приложение быстрее, чем выдержат «данные».
6) Очереди и закон Литтла (как считать воркеров)
Для очереди с входом `λ` (msg/s) и средним временем обработки `W` (s):- Нужный параллелизм: `N_min ≈ λ × W`.
- С запасом по пикам/хвостам: `N ≈ λ × W × (1.2–1.5)`.