GH GambleHub

High Availability и SLA

High Availability и SLA

1) Терміни і зв'язок з бізнесом

SLI (Service Level Indicator) - вимірюваний показник сервісу (напр. частка успішних запитів 2xx/3xx ≤ T мс).
SLO (Service Level Objective) - цільове значення SLI (напр. "99. 95% запитів ≤ 300 мс").
SLA (Service Level Agreement) - контрактне зобов'язання перед клієнтом (штрафи/кредити при порушенні).
HA (High Availability) - архітектурні та операційні заходи, що дозволяють виконати SLO/SLA.

Принцип: SLA спирається на SLO, а SLO - на спостережувані SLI. Не можна обіцяти в SLA те, що не вимірюєте.

2) «Дев'ятки» і математика доступності

Доступність за період ='час _ роботи/загальний _ час'. Орієнтири (за рік):
ДоступністьМакс. простий/рік
99. 0%≈ 3 дні 15 год
99. 5%≈ 1 день 20 год
99. 9%≈ 8 год 45 м
99. 95%≈ 4 год 23 м
99. 99%≈ 52 м 34 с
99. 999%≈ 5 м 15 с

Композиція доступності

Послідовний ланцюжок (залежності по «червоному шляху»): 'A _ total = Π A_i' (кожен компонент зменшує підсумок).
Паралельні актив-актив вузли: 'A _ total = 1 − Π (1 − A_i)'( резерв підвищує підсумок).

3) Що саме вимірювати (правильний SLI)

Користувацький погляд: успішні завершення ключових операцій (login, депозит, чек-аут) та їх латентність p99.
Годинний коридор: агрегуйте по ковзних вікнах (5/30/60 хв) і по регіонах.
Винятки: «заплановані вікна» враховуються в SLO, а в SLA - тільки якщо так сказано в контракті.

Типи SLI:
  • Доступність: частка успішних відповідей ≤ T.
  • Якість: p95/p99 latency.
  • Складені: «частка успішних депозитів ≤ 5 с».

4) Error Budget і швидкість згоряння

Error Budget = `1 − SLO`. Для 99. 95% щомісячне вікно дає 0. 05% помилок/простою.
Burn-rate: швидкість витрати бюджету (напр. 4 × означає, що за 6 годин ви з'їдаєте денний ліміт).
Політика: при швидкому згорянні - стоп релізів, фокус на стабілізації, feature-freeze.

5) Архітектура HA: від вузла до регіону

5. 1 Вузол/сервіс

N+1: мінімум одна надлишкова репліка (Deployment ≥ 2, PDB, anti-affinity).
Ізоляція ресурсів: ліміти CPU/RAM/IO, пріоритети (PriorityClass).
Graceful shutdown/drain: відсутність обриву запитів при рестарті.

5. 2 Зона/регіон

Multi-AZ: репліки в різних зонах, крос-зонне балансування, незалежне харчування/мережа.
Multi-region: актив-актив (важче: дані/консистентність) або актив-пасив (простіше: вище RPO).
Дані: CP для грошей/замовлень (кворум/RAFT), EC/AP для кешів/вітрин.

5. 3 Мережевий шар і периметр

L7-LB с health-checks, retry/timeout/circuit-breaking.
GSLB/DNS/Anycast для глобального трафіку, короткі TTL.
Egress-контроль і відмовостійкі канали до зовнішніх PSP/провайдерів.

6) Деградація замість падіння

Feature kill-switch (фіча-прапори): вимкнути не-критичне, зберегти «червоний шлях».
Перемикання на спрощені шляхи: синхрон → асинхрон/черга, «прийнято в обробку».
Rate-limit/квоти: краще обмежити трафік, ніж упустити всіх.
Stale-режими: віддавати кеш/статичні дані при недоступності origin.

7) Управління залежностями

Карта залежностей (service map): прямі/транзитивні, критичність, SLO кожного.
Вразливі ланки: зовнішній провайдер без SLA - обертається кешем/чергою/дублікатом.
Bulkhead-ізоляція: різні пули з'єднань/квоти для повільних маршрутів.
Timeouts > Retries: короткі таймаути, максимум 1 ретрай для ідемпотентних операцій.

8) Операції та зміни

Change management: релізи через канарок/blue-green, SLO-гейти, автоматичний відкат.
Заплановані вікна: стандартизуйте - довжина, періодичність, комунікації.
Інциденти: ролі (IC/Comms/Tech/DB), runbook'і, постмортеми з коригуючими діями.
Сек'юріті-івенти: при компрометації - «паніка-режим» (read-only/токени/ротація/блокування).

9) Спостережуваність і алертинг

RED-модель (Rate, Errors, Duration) на кожен маршрут.
SLI-дашборди: доступність/латентність по регіону і по клієнтському сегменту.
Burn-rate алерти: швидкі (1h, 14. 4 ×), повільні (6h, 2 ×) - сигнал до зриву SLO.
Екземпляри (Exemplars): перехід з метрик в траси по trace_id.
Синтетика: проби із зовнішніх точок (периметр, платіжні флоу).

10) Тести відмовостійкості

Game-days: сценарії відключення AZ/регіонів, деградації БД/кешів, відмова зовнішніх провайдерів.
Chaos-інструменти: фолти мережі (latency/loss), kill-pods, перевантаження CPU/IO.
DR-drills: відпрацювання RTO/RPO для Tier-0 систем (див. «Бекапи і DR»).

11) Проектування SLA

Визначення «доступності»: що вважається інцидентом (5xx, час> T, помилки домену).
Вікно розрахунку: місяць/квартал; включення/виключення планових робіт.
Кредити/штрафи: шкала (напр., 99. 9–99. 99% - X%, нижче - Y%).
Обов'язки клієнта: інтеграція, ретраї в розумних межах, ліміти.
Нотифікації та процедура клімів: терміни, формат, доказова база (логи/метрики).
Форс-мажор: юридичне формулювання і межі.

Приклад (начерк):
  • "Доступність API по SLI "успішні ≤ 500 мс" не нижче 99. 95% на календарний місяць. Планові вікна (до 60 хв/міс, оголошені за 48 год) виключені. При 99. 90–99. 95% - кредит 5%; 99. 80–99. 90% — 10%; <99. 80% — 25%.»

12) Економіка дев'яток

Кожна додаткова «дев'ятка» ростить витрати не лінійно (подвійні регіони, кворуми, дублі провайдерів, 24 × 7). Застосовуйте tiering SLO:
  • Tier-0 (гроші/замовлення): 99. 95–99. 99%, мульти-AZ, DR готовий.
  • Tier-1 (основні фічі): 99. 9–99. 95%, мульти-AZ.
  • Tier-2 (не-критичне): 99. 5–99. 9%, допускається деградація/стоп при інцидентах.

13) Патерни HA по шарах

Периметр: CDN/edge, multi-CDN или GSLB, WAF, rate-limit.
Балансування: L7 з outlier-ejection, таймаути/ретраї, sticky/consistent-hash.
Додатки: горизонтальний скейл, readiness/liveness, PDB, topology spread.
Дані: leader+replicas, quorum для CP, кэш L2, idempotency, PITR.
Черги: дзеркалювання/мультикластер, дедуп, DLQ.
Секрети/конфіги: GitOps, атомарні снапшоти, rollback.

14) Анти-патерни

SLA без інструментів вимірювання та зовнішньої синтетики.
Єдина зона/кластер як SPOF.
Безконтрольні ретраї → «само-DDoS».
Довгі транзакції/мутекси на гарячому шляху.
«Важкі» міграції/релізи без канарок і плану відкату.
Відсутність runbook і спілкування зі стейкхолдерами при інциденті.

15) Чек-лист впровадження (0-60 днів)

0-15 днів

Визначити критичні призначені для користувача SLI, задати SLO за рівнями Tier-0/1/2.
Включити burn-rate алерти, SLO-дашборди, синтетичні перевірки периметра.
Прибрати SPOF: ≥2 репліки, PDB, multi-AZ для фронтів і критичних БД.

16-40 днів

Ввести канарські релізи з SLO-гейтингом і авто-відкатом.
Карта залежностей + квоти/пули/таймаути/СВ по кожному «червоному шляху».
Регламент планових вікон і комунікацій, шаблони інцидент-повідомлень.

41-60 днів

Game-day: відключення AZ, провал зовнішнього провайдера, «бурст» трафіку.
Перерахунок SLA і кредитів за фактом, публікація звітів клієнтам.
Перегляд «вартість ↔ дев'ятки» і перекладка по тиру.

16) Метрики зрілості

≥ 95% критичних маршрутів мають SLI/SLO і burn-rate алерти.
Помилки SLO супроводжуються авто-заморожуванням релізів (policy).
Multi-AZ покриття Tier-0 = 100%, успішні DR-drills ≥ 1/квартал.
Час «детектування → мітігація» p50 <5 хв, p95 <15 хв.
Кореляція «реліз ↔ інциденти» - ведеться і скорочується (rollback rate↓).
Публічний звіт про інциденти/кредити - протягом N робочих днів.

17) Приклади та сніпети

Burn-rate алерти (ідея правил):
  • Швидкий: «SLO 99. 95%, вікно 1 год, burn ≥ 14. 4× → page on-call».
  • Повільний: «вікно 6 год, burn ≥ 2 × → ticket & моніторинг».
Envoy — circuit breaking/outlier:
yaml circuit_breakers:
thresholds:
- max_connections: 200 max_pending_requests: 100 max_requests: 1000 max_retries: 1 outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
Канарка з аналізом SLO (Argo Rollouts, ідея):
yaml analysis:
templates:
- name: slo-burn metrics:
- name: error-rate successCondition: result < 0. 005 provider: prometheus
Приклад формулювання SLI:

SLI: fraction_of_good_requests = good(HTTP 2xx/3xx ≤ 500ms) / all(requests)
SLO: ≥ 99. 95% per calendar month, per region

18) Висновок

High Availability - це не тільки кластери і репліки, а узгоджений набір архітектури, процесів і метрик: чіткі SLI/SLO, реалістичний SLA, «дев'ятки» з економікою, деградація замість падіння, дисципліна таймаутів/квот, канарні релізи, регулярні навчання і прозора комунікація. Робіть доступність вимірною і керованою - і вона стане конкурентною перевагою, а не лотереєю.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Telegram
@Gamble_GC
Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.