1.4 KiB
1.4 KiB
Lasttest – referensvärden
Skript: scripts/loadtest.mjs (autocannon, 25 samtidiga anslutningar, 10 s per scenario).
Kör mot valfri miljö: API_BASE_URL=https://… node scripts/loadtest.mjs
Trösklar: p99 < 500 ms, 0 fel, > 100 req/s på receptlistan. UNDERKÄND ger exitkod 1 (CI-vänligt).
Senaste körning (dev-container, 1 process, lokal Postgres)
| Scenario | req/s | p50 | p99 | fel |
|---|---|---|---|---|
| healthz (baslinje) | 12040 | 1 ms | 6 ms | 0 |
| GET /v1/recipes (lista + i18n-upplösning) | 754 | 31 ms | 74 ms | 0 |
| GET /v1/recommendations/what-to-eat (tyngsta läsvägen) | 135 | 173 ms | 290 ms | 0 |
Kommentar: healthz visar ren Fastify-overhead. Receptlistan inkluderar i18n-titelupplösning mot översättningstabellen. Rekommendationsvägen är medvetet tyngst (lager + FEFO + motor + förklaringar) – ~126 req/s på en utvecklingscontainer motsvarar med god marginal förväntad lanseringstrafik; skala horisontellt (fler API-containrar) före databasen.
Vid produktionssättning
- Kör mot staging bakom TLS – förvänta ~10–20 % lägre värden (TLS + nät).
- Kör om efter varje kapacitetspåverkande ändring (nya index, tunga endpoints).
- Rate limit: produktion har 300 req/min/IP – lasttest kräver RATE_LIMIT_MAX-överstyrning.