2.4 KiB
2.4 KiB
CONTEXT_TEST
Обновлено: 2026-04-23 (Europe/Moscow)
Цель
Продолжить нагрузочное тестирование маршрута GET /go/{slug} и стабилизировать поведение под конкуренцией.
Что внедрено в API
- Ограничение ожидания lock-ов:
- добавлен
LockTimeoutError; allocator_lock(...)теперь поддерживает timeout черезpg_try_advisory_lock;- для user-lock в
go_service:GO_USER_LOCK_TIMEOUT_SECONDS(default2.0); - для pool-lock:
GO_POOL_LOCK_TIMEOUT_SECONDS(default5.0).
- Контролируемые ответы вместо долгого зависания:
- timeout user-lock ->
429; - timeout pool-lock ->
503.
- Фазовая телеметрия
go_service:
- событие:
go_service_timing; - фиксируются времена фаз (wait lock, check existing/limit, ensure/acquire/dispatch/commit, total).
- Ограничен dispatch runtime-пула:
POOL_DISPATCH_RETRIES(default4),POOL_DISPATCH_REQUEST_TIMEOUT_SECONDS(default2.0),POOL_DISPATCH_SLEEP_SECONDS(default0.3).
Что исправлено в тестовом контуре
- В
.envбыл пустойSIGNING_KEY-> заполнен,apiперезапущен. - В k6-скрипте включено
noCookiesReset: true, иначе возникал ложный вал401.
Актуальные контрольные результаты
Контрольный тест (после правок):
- профиль:
5 VU,25s, single-user; http_req_failed = 0%;open_success = 1138;open_rejected = 0;p95 http_req_duration = 10.79ms;- по логам
/go/*:1138 x 303,1 x 503.
Это подтверждает, что:
- долгие зависания заменены на быстрые контролируемые ответы;
- тестовый сценарий больше не искажается cookie-сбросом.
Следующие шаги
- Повторить multi-user
load(30 VU, 5m) на этом же скрипте и зафиксировать:
- долю
303/429/503, - p95/p99,
go_service_timingпо фазам.
- При необходимости тонко настроить:
GO_USER_LOCK_TIMEOUT_SECONDS,GO_POOL_LOCK_TIMEOUT_SECONDS,POOL_DISPATCH_*.