perf: prepared statements, CSP, digest pin, вырезание design-preview, нагрузочные бюджеты, jsdom-тесты web, composite CI, SBOM/Trivy
This commit is contained in:
1 parent
08be310e6b
commit
1a68597d48
31 files changed
+1313
-158
No files matched your search
@@ -15,12 +15,39 @@
|
||||
| Образ | API бандлится tsup в один файл, в образ ставятся только нативные модули; статика только `.br`; healthcheck через `wget`; `NODE_OPTIONS=--max-old-space-size=160`; лимиты compose: 256 МиБ, 1 CPU, `read_only`, `cap_drop: ALL`. |
|
||||
| Бэкап | `docker exec auth-portal node dist/server.js backup` или `BACKUP_INTERVAL_HOURS`; онлайн-копия, `integrity_check`, ротация. |
|
||||
|
||||
Дополнительно: подготовленные запросы (`prepare` один раз на соединение),
|
||||
строгая CSP (`'self'`, без inline-скриптов), опциональное сжатие в Node
|
||||
(`ENABLE_COMPRESS=true`, если нет Traefik compress), базовый образ закреплён по
|
||||
digest, `design-preview`-маршруты вырезаются из прод-образа, healthcheck Traefik
|
||||
и `depends_on: service_healthy`, provenance + SBOM при публикации, Trivy
|
||||
(информативно), общий composite-action CI, `inputs` в `turbo.json`.
|
||||
|
||||
## Замеры (локально, Windows, Node 25; не Linux-контейнер)
|
||||
|
||||
| Что | Результат |
|
||||
|---|---|
|
||||
| `listActiveSessions` по пользователю на 100k сессий | ~1.6 мс |
|
||||
| `runHousekeeping`, 90k устаревших сессий | ~220 мс |
|
||||
| `appendAuditBatch`, 10k событий одной транзакцией | ~610 мс |
|
||||
| `listAudit(kind=logins)` на 10k | ~5 мс |
|
||||
| 20k prepared-запросов профиля | ~28 мс |
|
||||
| HTTP `GET /health` (autocannon, 50 соединений) | ~15 000 rps, p99 7 мс |
|
||||
| HTTP `GET /api/v1/auth/me` (JWT, кэш профиля) | ~8 300 rps, p99 11 мс |
|
||||
| web: файлов в `dist/assets` | 87 → 48 без preview-маршрутов; gzip JS 484 → 437 КБ |
|
||||
| Рабочий набор процесса (Windows) | ~117 МиБ в покое, ~237 МиБ после потока 8 с при куче 160 МБ |
|
||||
|
||||
Рабочий набор Windows не равен RSS контейнера Linux. Реальный RSS под лимитом
|
||||
256 МиБ мерит `scripts/ci/smoke-image.sh` и ночной `nightly-perf` — при
|
||||
превышении увеличьте `mem_limit` и `NODE_OPTIONS` вместе.
|
||||
|
||||
## Проверка
|
||||
|
||||
```bash
|
||||
pnpm turbo test:coverage --filter=@authportal/api --filter=@authportal/db --filter=@authportal/shared
|
||||
pnpm --filter web build && node scripts/ci/web-budget.mjs apps/web/dist/assets
|
||||
bash scripts/ci/smoke-image.sh <image> # размер, RSS, /ready, docker stop, данные после рестарта
|
||||
pnpm --filter @authportal/db test:perf # бюджеты производительности БД
|
||||
node scripts/perf/load.mjs http://127.0.0.1:8080 [container] # autocannon (ночью: nightly-perf.yaml)
|
||||
```
|
||||
|
||||
Бюджеты smoke-теста (env): `MAX_IMAGE_MB=250`, `MAX_RSS_MB=200`, `MAX_START_S=15`,
|
||||
|
||||
Reference in new issue
Block a user