feature: архитектура v2 — api + очередь + worker, удержание окна браузера (#78)
- Сервис api (FastAPI, без Chrome): POST /v2/tasks, GET /v2/tasks/{id} (доступ по cookie
сессии), DELETE /v2/sessions/current; /v1/solve — прежний контракт поверх очереди.
- Сервис worker (dramatiq + RabbitMQ): слоты браузера, окна сессий между задачами
(browser_idle_timeout 0–120 мин, простой — TTL ключа в Redis), heartbeat.
- Маршрутизация задач сессии в персональную очередь воркера с открытым окном.
- Redis: задачи, результаты (RESULT_TTL_HOURS), окна, воркеры. Прокси и ключ 2captcha
в Redis не сохраняются.
- Движок: AsyncStealthySession.run() — действия на текущей странице без навигации.
- Два образа (robotex-api, robotex-worker), compose с rabbitmq и redis,
make up/down/logs/smoke, релиз собирает все образы.
- Тесты: api + worker в одном процессе (fakeredis), настоящий воркер dramatiq на
StubBroker, браузерные тесты на новой схеме, smoke для запущенного стенда.
- Документация: README, API (v2), Deployment, Usage.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
fe509c25c3
commit
7b511d5d38
38 files changed
+2142
-545
No files matched your search
+11
-4
@@ -1,9 +1,16 @@
|
||||
# Project Env
|
||||
# порт, CPU и память контейнера (docker-compose)
|
||||
# порт api на хосте (docker-compose)
|
||||
API_PORT=8000
|
||||
API_CPUS=4
|
||||
API_MEM_LIMIT=8g
|
||||
# сколько Chrome параллельно, ≈ числу ядер (docs/Deployment.md)
|
||||
# CPU и память контейнера worker
|
||||
WORKER_CPUS=4
|
||||
WORKER_MEM_LIMIT=8g
|
||||
# сколько окон Chrome на воркер — и выполняющих задачу, и удерживаемых (browser_idle_timeout); ≈ числу ядер
|
||||
BROWSER_SLOTS=4
|
||||
# пароль RabbitMQ (сеть compose наружу не открыта)
|
||||
RABBITMQ_PASSWORD=robotex
|
||||
# сколько часов хранится результат задачи в Redis
|
||||
RESULT_TTL_HOURS=24
|
||||
# сколько /v1/solve ждёт, пока воркер возьмёт задачу, прежде чем ответить 503
|
||||
V1_QUEUE_WAIT=30
|
||||
NO_SLOTS_RETRY_AFTER=5
|
||||
LOG_LEVEL=INFO
|
||||
Reference in new issue
Block a user