docs: IFT loadtest baseline after ×1–×3 ladder; defer absolute capacity to bare Linux.

Fixes EventHub/EventHubBack#30 [skip ci]

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-16 23:09:48 +03:00
parent 0585274b8e
commit e98f0a800f
+13 -12
View File
@@ -232,25 +232,26 @@ IFT и stage крутят **одну и ту же** сборку `sha-*`. Produc
Стенд IFT (HOME-PC): Docker Swarm **внутри WSL2**. Часть BOUNDARY_HIT под aggressive stress — артефакт гипервизора/`vmmem`, не только приложения.
### Baseline (июль 2026, текущее железо)
### Baseline (июль 2026, IFT / WSL2, `sha-6d8f02d`)
| Метрика | Значение |
|---------|----------|
| Рабочий потолок hot-path (до пересчёта) | ~**10 VU/s** (interarrival ≥ 0.1 s, thinktime ≥ 1 s), прогон ×3 + WAF |
| Green hold | фазы 0.2 / 0.1 s |
| OVER (connect) | ~20 VU/s (interarrival 0.05) на ×1/×2 (исторически) |
| Пересчёт | после fix Mnesia dump_log + Traefik loadtest без WAF: лестница **×1 → ×2 → ×3** |
| Зелёный hold (×2 / ×3, maxusers=100) | 0 errors; mean ~4065 ms; late ≤ ~210 ms |
| ×1, maxusers=100 | **BOUNDARY** по latency (mean ~613 ms) — одной ноды мало |
| Hot ladder ×3 (0.1→0.05→0.035, maxusers=100) | **UNDER** (mean ~47 ms) |
| Soft OVER concurrent | maxusers=**150** на ×3 — 0 errors, но late ~1.5 s → BOUNDARY |
| Prod-ориентир с IFT | минимум **2** реплики EventHub; абсолютные VU/CPU с WSL **не** копировать 1:1 |
Подробности: `EventHubBack/test/tsung/README.md`, задача `EventHubBack#30`.
Подробности: `EventHubBack/test/tsung/README.md`. Абсолютный потолок на bare Linux — `EventHubDevOps#4` (Future).
### Правила (обязательно)
- **Default stress-профиль:** `eventhub_ift_stress_hold.xml` / `stress-hold`.
- `maxusers`**300** (для `stress-hold` default **100**); `thinktime`**1** s; плановый interarrival ≥ **0.1** s.
- Uncapped / `stress-bump` / `maxusers≫300` на IFT **запрещены** без явного согласования (`CONFIRM_DANGEROUS=1` в оркестраторе).
- **Default stress-профиль:** `eventhub_ift_stress_hold.xml` / `stress-hold` (maxusers=**100**).
- `maxusers`**150** на IFT без согласования; **200+** / uncapped / `stress-bump` / beams — только с `CONFIRM_DANGEROUS=1`.
- `thinktime`**1** s; плановый interarrival ≥ **0.1** s для green hold.
- Prepare/restore: `EventHubDevOps/scripts/ift-loadtest-*.sh`; при hang WSL SSH — Windows `restore-ift.ps1` / `wsl --shutdown`.
- **Потолок vs репликация:** сначала `EVENTHUB_REPLICAS=1`, затем 2, 3 — отдельные прогоны с gate; не смешивать ступени.
- Prepare по умолчанию подменяет Traefik на `dynamic_conf.loadtest.yml` (**без WAF**); `LOADTEST_TRAEFIK=0` — штатный conf с Coraza.
- **Потолок vs репликация:** сначала `EVENTHUB_REPLICAS=1`, затем 2, 3 — отдельные прогоны с gate.
- IFT Traefik: штатно **без Coraza/WAF** (память); loadtest-оверлей — `dynamic_conf.loadtest.yml` / `LOADTEST_TRAEFIK`.
### После каждого stress-прогона (обязательно)
@@ -311,7 +312,7 @@ error rate > 1% **или** mean request > 500 ms (hold ≥2 мин в фазе)
- Новая задача — **отдельный чат** с брифом по §5.
- **Версии/деплой:** product = `VERSION` (`MAJOR.MINOR`); IFT+stage = `sha-*` (+ floating `:ift`/`:stage`); без ручных stage-тегов и без patch++ на каждый push (см. §6).
- **FrontAdmin E2E:** mock-suite обязателен в CI; IFT smoke — после Deploy IFT (`e2e-ift.yml`, учётки из стендового `.env`).
- **IFT loadtest:** hold-профиль default; потолок пересчитывать лестницей ×1→×2→×3; Traefik loadtest без WAF; uncapped stress запрещён; после stress — collect+анализ (+мониторинг)+**cleanup дампов на IFT**+отчёт+restore (см. §7).
- **IFT loadtest:** hold default maxusers=100; зелень на ×2/×3; ×1 — latency BOUNDARY; absolute capacity — bare Linux (`EventHubDevOps#4`); uncapped/beams без `CONFIRM_DANGEROUS=1` запрещены; после stress — collect+анализ+cleanup+отчёт+restore (см. §7).
---