Автоскейлінг і баланс 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)`.