Как работает CrawlerLens
Путь запроса
Когда бот запрашивает страницу:
1. Запрос бота
└─▶ Nginx определяет бота по User-Agent
└─▶ Проксирует на CrawlerLens Gateway
2. Обработка Gateway
├─ Валидирует заголовок X-CL-Token
├─ Проверяет верификацию домена
├─ Нормализует URL
└─▶ Проверяет кэш Redis
3. Статус кэша
├─ СВЕЖИЙ: Возврат из кэша (~50мс)
├─ УСТАРЕВШИЙ: Возврат из кэша + фоновый ре-рендер
└─ ПРОМАХ: Постановка задачи в очередь, ожидание (~3-5с)
4. Рендеринг (если нужен)
├─ Worker берёт задачу
├─ Открывает страницу в Chromium
├─ Ждёт выполнения JavaScript
├─ Извлекает HTML
└─ Сохраняет в MinIO + обновляет кэш
5. Ответ
└─▶ Gateway возвращает HTML боту
Компоненты
| Компонент | Порт | Описание |
|---|---|---|
| Dashboard | 5173 | Веб-интерфейс управления |
| API | 3001 | REST API для dashboard |
| Gateway | 3002 | Точка входа для ботов |
| Worker | - | Фоновый рендерер (Chromium) |
| Redis | 6379 | Кэш и очередь задач |
| PostgreSQL | 5434 | Основное хранилище |
| MinIO | 9000 | Хранилище снапшотов (S3) |
Стратегия кэширования
CrawlerLens использует TTL + SWR (Stale-While-Revalidate):
Время: 0 TTL TTL+SWR ∞
│ │ │ │
▼ ▼ ▼ ▼
────────┬──────────┬──────────────────┬───────────────
│ СВЕЖИЙ │ УСТАРЕВШИЙ │ ИСТЁКШИЙ
│ │ │
Действие:│ Вернуть │ Вернуть старый + │ Ждать новый
│ из кэша │ фоновый рендер │ рендер
│ (~50мс) │ │ (~3-5с)
Это обеспечивает:
- Быстрые ответы (всегда есть что вернуть)
- Свежий контент (фоновые обновления)
- Нет "громового стада" (один рендер на URL)