From e98f0a800f73a2cf9d01fa62ce45e95749e03c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=A1=D0=B0?= =?UTF-8?q?=D0=B1=D0=B8=D0=BB=D0=B8=D0=BD?= Date: Thu, 16 Jul 2026 23:09:48 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20IFT=20loadtest=20baseline=20after=20?= =?UTF-8?q?=C3=971=E2=80=93=C3=973=20ladder;=20defer=20absolute=20capacity?= =?UTF-8?q?=20to=20bare=20Linux.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes EventHub/EventHubBack#30 [skip ci] Co-authored-by: Cursor --- WORKFLOW.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/WORKFLOW.md b/WORKFLOW.md index f3a4a7c..8fd328d 100644 --- a/WORKFLOW.md +++ b/WORKFLOW.md @@ -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 ~40–65 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). ---