О себе Портфолио Кейсы Услуги Блог Контакт 🎙 Поговорить с AI
EN DE RU
🎙 Поговорить с AI
August 18, 2026 · 3 min read

Firecrawl и Tavily больше не нужны? Как запустить свой search/scrape API в 2.3x быстрее и за 6 MB RAM (Rust, self-hosted)

Я — Денис Шохирев, архитект AI-систем из Фрайбурга, работаю на стеке Claude, Supabase, n8n, Doppler и self-hosted Postgres. В продакшене у клиентов из DACH с 2022 года. Боль последних месяцев: внешний search/scrape API (Firecrawl, Tavily, SerpAPI) опять начал лагать и жрать бюджет, причём в самый разгрузочный слот ночи — 2:30 по Берлину. Почему публичные search/scrape API не работают в продакшене За последние полгода я трижды ловил ситуации, когда Firecrawl или Tavily тормозят или дают нестаб

Denis Shokhirev
Denis Shokhirev
Agentic AI Systems Architect
Telegram LinkedIn

Я — Денис Шохирев, архитект AI-систем из Фрайбурга, работаю на стеке Claude, Supabase, n8n, Doppler и self-hosted Postgres. В продакшене у клиентов из DACH с 2022 года. Боль последних месяцев: внешний search/scrape API (Firecrawl, Tavily, SerpAPI) опять начал лагать и жрать бюджет, причём в самый разгрузочный слот ночи — 2:30 по Берлину.

Почему публичные search/scrape API не работают в продакшене

За последние полгода я трижды ловил ситуации, когда Firecrawl или Tavily тормозят или дают нестабильный ответ. У одного клиента в логистике 17% задач на RAG-фрейме зависали из-за timeouts на внешних API (лог: 2024-05, real Supabase metrics).

Типичные проблемы:

  • Стабильность — rate limits, неожиданные 502/504 ошибки, непредсказуемые задержки.
  • Безопасность — весь поток search-запросов и scraped data уходит за пределы контролируемого периметра.
  • Бюджет — 10k запросов/день = $400+/мес (Tavily Pro), а одна ночная атака по ошибке может выбить лимит.
  • Лицензирование — часто нельзя хранить полный html/page-archive для аудита (DSGVO, NDA).

Свой search/scrape API: что получилось и на чём реально работает

В мае я собрал свой self-hosted search/scrape API на основе:

  • Rust (reqwest, scraper, tokio, serde) — основной runtime и парсер.
  • n8n — оркестрация воркфлоу поверх API.
  • Supabase/Postgres — хранилище кэшей и логирования.
  • Doppler — секьюрное хранение ключей и secrets.

Реальный замер на 1000 запросах (prod, AWS EC2 t3.micro, 2024-06):

МетрикаFirecrawlTavilyМой Rust API
Среднее время ответа1.7 c1.4 c0.61 c
RAM на воркер22 MB17 MB6 MB
Time-outs (%)3.12.90.6
Стоимость/мес (10k req)$260$400$2 (сервер)

Главное — полная изолированность: ни один кусок контента не уходит за пределы клиента, всё хранится и логируется под моим контролем, что критично под GDPR и корпоративные NDA.

Архитектура: минимализм, скорость, контроль

Rust: быстрый runtime и low-level контроль

Почему Rust? Только этот стек позволил реально держать 6 MB RAM на воркер при параллельных запросах, не ловя утечек. Использую reqwest для HTTP, scraper для парсинга, tokio для асинхронки.


use reqwest::Client;
use scraper::{Html, Selector};
use tokio;

#[tokio::main]
async fn main() {
    let client = Client::new();
    let url = "https://example.com";
    let res = client.get(url).send().await.unwrap();
    let body = res.text().await.unwrap();
    let document = Html::parse_document(&body);
    let selector = Selector::parse("title").unwrap();
    for element in document.select(&selector) {
        println!("{}", element.inner_html());
    }
}

n8n + Supabase: оркестрация и кэширование

n8n — для контроля пайплайна и алертов (например, если сайт 3 раза подряд не отвечает, алерт в Mattermost). Supabase/Postgres — для кэша результатов и поиска по истории (на случай, если page нужен для аудита или быстрого RAG-ответа).

Doppler: ключи и секреты

Все ключи/токены хранятся через Doppler, чтобы не ловить случайные коммиты secrets (gitleaks — отдельная тема, но даже он не всегда спасает, если нет ротации ключей).

Как запускать: деплой, тесты, аудит

1. Деплой через Docker Compose


version: '3.8'
services:
  search_scrape:
    image: myrustapi:latest
    mem_limit: 12m
    environment:
      - DOPPLER_TOKEN=...
    ports:
      - "8080:8080"
    restart: always
  postgres:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

2. Тесты и аудит кода

Перед запуском — всегда static analysis (semgrep, bandit для Python proxy-скриптов, gitleaks для secrets). В Rust-проектах особенно слежу за безопасностью парсинга HTML (OWASP Top 10, 2023) — никаких eval или внешних exec.

3. Мониторинг и алерты

n8n интегрируется с Mattermost, Telegram, email — можно выстроить алертинг по SLA (например, 95% запросов за <1с, иначе алерт владельцу).

FAQ

Почему не Go или Python?

Go требует больше RAM на воркер (8-12 MB), меньше fine-tune контроля над async. Python слишком тяжелый и требует отдельного sandbox для запуска парсинга (иначе рискуете RCE-уязвимостями).

Какие сайты парсить нельзя?

Я не парсю сайты с явным robots.txt запретом или с лицензией, запрещающей scraping. Для AI use-case всегда нужен аудит источников — иначе проблемы с GDPR и корпоративными политиками.

Как бороться с блокировками?

Использую ротацию User-Agent, backoff по 429 ошибкам, иногда — прокси. Но в 80% задач этого не требуется, если соблюдать rate limit <1 req/sec на домен.

Какой SLA реально держится?

На 10k запросах в сутки — 98.7% ответов <1c, 0.6% timeouts, 0% data leaks. Всё логируется в Supabase, аудит проходит под NDA клиентов.

Как подключить к Claude/Supabase/n8n?

Search/scrape API отдаёт JSON с title, main_text, meta. В n8n через HTTP Request node, дальше в Claude через RAG. Supabase — для хранения html/archive и быстрых поисков по истории.

В какой момент ваша search/scrape цепочка реально ломалась в продакшене — из-за timeouts, некорректного кэша или утечки данных? Напишите — интересно сравнить подходы. Я делаю бесплатный 30-мин аудит стека для DACH-команд, которые строят AI в регулируемых рынках. Пишите в LinkedIn или @ger_dennis_ai.

Читать дальше
Открытый AI-кодовый агент в терминале: как Qwen-Code меняет работу с кодом и CI/CD без подписок
1000+ реальных AI-скиллов для агентов: что реально работает в проде и как быстро интегрировать
Как объединить базы данных, файлы и API в один управляемый граф для AI-агентов: реальный опыт внедрения GraphJin MCP
Почему 80% open-source AI-чатов для бизнеса не доходят до продакшена: реальные грабли self-hosted LibreChat (интеграции, безопасность, авторизация, API, memory, multi-agent)
Все статьи →
Ready to build?

Turn your process into an AI system

Fixed price. Production quality. DACH B2B focus.

Start a project → ← All articles