FORTECH.DEV

menu-icon
telegram-icon

Написать в Telegram

telegram-icon

Seobase: микросервисная архитектура для SEO

Разработка масштабируемого бэкенда на Nest.js и AWS для обработки миллионов SEO-запросов ежедневно.

О проекте

SEO-специалисты ежедневно отслеживают позиции сайтов по ключевым словам, анализируют конкурентов и мониторят метрики видимости. Вручную это занимает часы, а данные быстро устаревают. Seobase автоматизирует сбор и обработку SEO-метрик из множества источников, предоставляя актуальную аналитику в одном интерфейсе. Команда Fortech взяла на себя разработку бэкенда с нуля.

Задача — построить высоконагруженную систему, которая ежедневно обрабатывает миллионы запросов к внешним API, агрегирует данные и отдает результаты пользователям без задержек. Архитектура строилась на микросервисах в AWS с использованием Nest.js, DynamoDB и Lambda.

Seobase_Ilya Girin3 1.png

Задачи

  • Спроектировать архитектуру из нескольких микросервисов на Nest.js с четким разделением ответственности
  • Настроить взаимодействие между сервисами через очереди и API Gateway для изоляции нагрузки
  • Реализовать систему сбора метрик из сторонних SEO-API с кэшированием в DynamoDB для снижения количества повторных запросов
  • Оптимизировать обработку ошибок и запросы к базе для работы под высокой нагрузкой
  • Настроить хранение пользовательских файлов в S3 Bucket с контролем доступа через IAM-политики
  • Разработать Lambda-функции для фоновой обработки задач и триггеров на события в S3
  • Развернуть сервисы в ECR через Docker, настроить инфраструктуру через Terraform с автоматическим масштабированием

Seobase_Ilya Girin4 1.png

Реализация

Начали с аудита требований к нагрузке: система должна обрабатывать до 10 млн запросов в сутки с пиками в утренние часы. Выбрали Nest.js для микросервисов из-за встроенной поддержки dependency injection и модульности, TypeScript для строгой типизации на всех слоях. DynamoDB подошла под сценарий с большим объемом чтения и редкой записью — pay-per-request модель экономила бюджет в периоды низкой активности. Архитектуру разбили на три ключевых сервиса: сбор данных из внешних API, обработка и кэширование, отдача результатов клиентам. Главная техническая проблема возникла при интеграции DynamoDB с сервисом обработки. Запросы к базе занимали до 8 секунд из-за того, что данные передавались одним массивом с закодированными JSON-строками внутри атрибутов. Это создавало overhead на сериализацию и перегружало сеть.

Node.js

TypeScript

Docker

Решение: разделили данные на блоки по 25 записей (лимит BatchWriteItem в DynamoDB), увеличили емкость записи на таблице с 5 до 40 WCU, запустили параллельную обработку блоков через Promise.all. Изменили схему хранения — вместо одного атрибута с JSON теперь каждая метрика записывается как отдельный атрибут с нативным типом. Время запроса упало до 1.2 секунды. Для фоновых задач настроили Lambda-функции на Node.js: генерация отчетов, очистка устаревшего кэша, обработка загруженных файлов из S3. Триггеры на S3-события запускают Lambda автоматически при загрузке CSV с ключевыми словами. Все сервисы упаковали в Docker-образы, развернули через ECR. Terraform-конфигурация описывает всю инфраструктуру: VPC, security groups, ECS-кластеры, IAM-роли. Настроили auto-scaling на основе метрик CPU и количества запросов. S3 Bucket для файлов защищен политиками с ограничением доступа только для авторизованных сервисов через service roles.

Seobase_Ilya Girin2 1.png

Ключевые задачи и решения

Мы спроектировали отказоустойчивую микросервисную архитектуру на базе AWS, решив ряд критических задач по масштабированию и производительности:

  • Интеллектуальный сбор данных Реализован пул HTTP-клиентов с axios-retry для автоматических повторов и контроля лимитов (rate limiting), что обеспечило стабильную работу с 15+ внешними API. Кэширование в DynamoDB с TTL 24 часа снизило нагрузку на платные API на 60%.

  • Оптимизация работы с БД Для устранения задержек при записи перешли на пакетные операции BatchWriteItem и параллельную обработку через Promise.all. Отказ от хранения данных в JSON-строках в пользу нативных типов DynamoDB ускорил время отклика с 8 до 1.2 секунд.

  • Отказоустойчивость и мониторинг Внедрен централизованный exception filter в Nest.js и паттерн Circuit Breaker, что исключило каскадные сбои при пиковых нагрузках. Логирование всех процессов интегрировано в CloudWatch.

  • Автоматизация фоновых задач Настроена система на базе AWS Lambda и S3-триггеров. Файлы пользователей обрабатываются автоматически при загрузке, а безопасный доступ реализован через presigned URLs и строгие IAM-политики.

  • Инфраструктура как код (IaC) Вся инфраструктура (VPC, ECS, IAM, S3) описана через Terraform. Это обеспечило бесшовное автоматическое масштабирование сервисов в ECR на основе нагрузки и позволяет разворачивать новые окружения за 15 минут.

  • Межсервисное взаимодействие Создана надежная экосистема обмена данными: API Gateway для маршрутизации запросов, SQS-очереди для асинхронной обработки и AWS Cloud Map для эффективного service discovery.

Результат

SEO-специалисты получили платформу, которая автоматически собирает данные по позициям сайтов, объемам поиска и конкурентам из десятков источников. Вместо ручной работы с таблицами и API теперь все метрики агрегируются в одном интерфейсе с актуальностью данных до 1 часа. Система обрабатывает запросы пользователей за 1–2 секунды даже в пиковые нагрузки. Бизнес получил масштабируемую архитектуру, которая автоматически подстраивается под нагрузку и не требует ручного вмешательства при росте числа пользователей. Инфраструктура полностью описана в Terraform — новые окружения разворачиваются за 15 минут. Система кэширования снизила количество запросов к платным API на 60%, что напрямую сократило операционные расходы.

Уже появились идеи?

или
Phone
0/1000 символов
Политикой конфиденциальности
ООО «Фортех»
ИНН / КПП
6154162274
/
616401001
ОГРН
1226100005922
ОКВЭД
62.01 Разработка компьютерного программного обеспечения
Код вида деятельности в области IT:1.01, 1.04, 1.05, 1.06
Аккредитованная IT-компания
Минцифры России
VKTelegramMaxYouTubeWorkspace

Позвать нас в тендер