docs: WORKFLOW §7 — IFT capacity baseline and loadtest rules

Refs EventHubSpec#3

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-15 17:35:21 +03:00
parent 877c23b895
commit 17a97f053f
+34
View File
@@ -228,6 +228,38 @@ IFT и stage крутят **одну и ту же** сборку `sha-*`. Produc
---
## 7. Нагрузочное тестирование IFT (Tsung)
Стенд IFT (HOME-PC): Docker Swarm **внутри WSL2**. Часть BOUNDARY_HIT под aggressive stress — артефакт гипервизора/`vmmem`, не только приложения.
### Baseline (июль 2026, текущее железо)
| Метрика | Значение |
|---------|----------|
| Рабочий потолок hot-path | ~**10 VU/s** (interarrival ≥ 0.1 s, thinktime ≥ 1 s) |
| Green hold | фазы 0.2 / 0.1 s |
| OVER (connect) | ~20 VU/s (interarrival 0.05) на ×1/×2 |
| ×3 | connect держится; упор в rate limit / Mnesia / archive (см. Back#32#34) |
Подробности: `EventHubBack/test/tsung/README.md`, закрытая задача `EventHubBack#30`.
### Правила (обязательно)
- **Default stress-профиль:** `eventhub_ift_stress_hold.xml` / `stress-hold`.
- `maxusers`**300**; `thinktime`**1** s; плановый interarrival ≥ **0.1** s.
- Uncapped / `stress-bump` / `maxusers≫300` на IFT **запрещены** без явного согласования (`CONFIRM_DANGEROUS=1` в оркестраторе).
- Prepare/restore: `EventHubDevOps/scripts/ift-loadtest-*.sh`; при hang WSL SSH — Windows `restore-ift.ps1` / `wsl --shutdown`.
- Exchange-share: `collect-ift-loadtest-logs*.ps1`, `restart-wsl-and-collect-logs.ps1`.
### Критерий верхней границы (2A)
error rate > 1% **или** mean request > 500 ms (hold ≥2 мин в фазе) → `BOUNDARY_HIT`.
Разбор: `python3 test/tsung/summarize-tsung-stress.py`.
Сравнение hold на bare Linux (без WSL2) — отложено: `EventHubDevOps#4` (Future).
---
## 4. Расширение правил
При появлении новой договорённости в работе:
@@ -253,6 +285,7 @@ IFT и stage крутят **одну и ту же** сборку `sha-*`. Produc
- Новая задача — **отдельный чат** с брифом по §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; потолок ~10 VU/s; uncapped stress запрещён; recover через Windows SSH / `wsl --shutdown` (см. §7).
---
@@ -260,6 +293,7 @@ IFT и stage крутят **одну и ту же** сборку `sha-*`. Produc
| Дата | Изменение |
|------|-----------|
| 2026-07-15 | §7: capacity baseline IFT + правила Tsung stress (после EventHubBack#30) |
| 2026-07-15 | §2.1: пропуск CI — `[skip ci]` / `SKIP_CI=1` в git-commit.sh |
| 2026-07-14 | §6 + gate: Playwright E2E (mock CI + IFT smoke secrets) |
| 2026-07-14 | §6: VERSION MAJOR.MINOR + auto stage по sha после CI |