Обзор инфраструктуры
В этой статье представлен всесторонний обзор инфраструктуры, на которой работает публичный веб-сайт Thinvent. Мы рассмотрим полный стек технологий, от веб-сервера до уровня базы данных, и объясним, как все компоненты работают вместе, чтобы обеспечить быстрый, надежный и масштабируемый опыт электронной коммерции.
Стек веб-приложения
Flask — основа
Наш сайт построен на Flask, легковесном и гибком веб-фреймворке для Python. Flask обеспечивает базовую маршрутизацию, обработку запросов/ответов и систему Blueprint, которая организует наше приложение в модульные компоненты.
Ключевые возможности Flask, которые мы используем:
-
Blueprints: Организация приложения в логические модули (web, api, cart, product и т.д.)
-
Шаблонизатор Jinja2: Генерация HTML на стороне сервера с наследованием шаблонов
-
Контекст запроса: Автоматическая обработка HTTP-запросов и сессий
-
Werkzeug: Сервер для разработки и служебные функции
Приложение Flask инициализируется в модуле web, где мы:
-
Создаем Blueprint для веб-части
-
Инициализируем Babel для интернационализации
-
Настраиваем хранилище сессий Valkey
-
Настраиваем контекстные процессоры для переменных шаблонов
Gunicorn — продакшен-сервер
В продакшене мы используем Gunicorn (Green Unicorn), WSGI HTTP-сервер для Python. Gunicorn запускает наше Flask-приложение с несколькими рабочими процессами.
Gunicorn управляется systemd, что гарантирует его автоматический перезапуск в случае сбоя или перезагрузки сервера. Это обеспечивает высокую доступность без ручного вмешательства.
Nginx — обратный прокси и балансировщик нагрузки
Nginx выступает в роли нашего обратного прокси и балансировщика нагрузки. Он расположен перед Gunicorn и обрабатывает:
-
SSL/TLS termination: Шифрование/дешифрование HTTPS
-
Раздачу статических файлов: CSS, JavaScript, изображения (отдаются напрямую с диска)
-
Обратное проксирование: Перенаправление динамических запросов к Gunicorn
-
Ограничение скорости (Rate limiting): Защита от злоупотреблений
-
Сжатие запросов: Gzip-сжатие для более быстрой передачи
Ubuntu — операционная система
Все EC2-инстансы работают под управлением Ubuntu, выбранного нами дистрибутива Linux. Мы предпочитаем использовать пакеты Python от Ubuntu, когда это возможно, вместо pip.
Типичный поток запроса:
flowchart LR
A[Браузер клиента] -->|HTTPS-запрос| B[Nginx]
B -->|Проксировать к| C[Gunicorn]
C -->|WSGI| D[Flask-приложение]
D -->|Запрос| E[Кэш Valkey]
E -->|Промах| F[DynamoDB]
F -->|Ответ| E
E -->|Попадание| G[Ответ]
G --> B
B -->|Ответ| ACloudFront — сеть доставки контента (CDN)
CloudFront — наш CDN, обеспечивающий:
-
Защиту от DDoS: Встроенная защита от распределенных атак
-
Экранирование источника (Origin shielding): Защищает наши исходные серверы от всплесков трафика
Наш дистрибутив CloudFront имеет два источника (origin):
-
Бэкенд-сервер: Бэкенд-приложение на Flask
-
S3: S3-бакет для статических ресурсов
Настроенные политики кэширования (Cache behaviors):
-
/s/*— Статические ресурсы (CSS, JS, изображения) с TTL 24 часа -
/ds/*.pdf— Технические описания (Datasheets) с TTL 24 часа -
/api/*— API-эндпоинты без кэширования -
/cart— Корзина с TTL 24 часа -
/set-language— Без кэширования (динамический)
Уровень данных
DynamoDB — основная база данных
Мы используем Amazon DynamoDB в качестве основной базы данных. DynamoDB — это NoSQL база данных.
Наши таблицы DynamoDB включают:
-
Рекомендации (Recommendations): AI-генерируемые рекомендации товаров
-
Описания товаров (Product descriptions): Описания товаров на нескольких языках
-
Страницы запросов (Query pages): Разобранные страницы запросов для SEO
Мы используем PynamoDB, Pythonic ORM для DynamoDB, который предоставляет:
- Определения моделей (Model definitions): Python-классы для таблиц базы данных
Valkey — кэш в оперативной памяти
Valkey (форк Redis) — наш слой кэша в оперативной памяти, обеспечивающий:
-
Хранение сессий (Session storage): Пользовательские сессии со скользящим сроком действия 30 дней
-
Часто запрашиваемые данные: Количество товаров, популярные запросы
-
Кэш автодополнения (Autocomplete): Поисковые подсказки
-
Манифест изображений (Image manifest): Расположение изображений товаров
Valkey обеспечивает значительные преимущества в производительности:
-
В 100 раз быстрее, чем DynamoDB для операций чтения
-
Сниженная нагрузка на БД: Попадания в кэш избегают запросов к DynamoDB
-
Сохранение сессий (Session persistence): Сессии на основе Valkey между запросами
Мы используем Valkey для:
-
Сессий: Состояние входа пользователя, данные корзины
-
Кэширования: Популярные запросы, подсказки автодополнения
-
Счетчиков (Counters): Количество товаров на складе (кэшируется для производительности)
-
Очередей (Queues): Фоновая обработка задач
S3 — объектное хранилище
Amazon S3 — наш сервис объектного хранения.
Мы используем S3 для:
-
Изображений товаров: Фотографии товаров в высоком разрешении
-
Технических описаний (Datasheets): PDF-спецификации товаров
-
Статических ресурсов: CSS, JS, изображения
DNS и маршрутизация
Route53 — управление доменами
Route53 управляет нашей DNS:
- Регистрация доменов: thinvent.in и связанные домены
Маршрутизация Nginx
Nginx маршрутизирует запросы на основе шаблонов URL:
-
/→ Flask-приложение (главная, товары, корзина, оформление заказа) -
/q/→ Flask-приложение (страницы запросов, результаты поиска) -
/api/→ Flask-приложение (API-эндпоинты) -
/static/→ CloudFront/S3 (статические ресурсы)
Инфраструктура поиска и ИИ
Сервис поиска
Мы запускаем отдельное Flask-приложение для функциональности поиска. Этот сервис предоставляет:
-
Векторный поиск (Vector search): Семантическое сходство для связанных запросов
-
Автодополнение (Autocomplete): Подсказки поиска на основе префикса
-
Популярные запросы (Popular queries): Самые искомые термины
-
Извлечение фильтров (Filter extraction): Разбор поисковых запросов для аспектов (facets)
Сервис поиска использует:
-
Valkey RediSearch: Векторный поиск по сходству
-
SentenceTransformer: Генерация эмбеддингов
-
Соответствия фраз (Phrase mappings): Извлечение фильтров через сопоставление подстрок
Провайдеры ИИ
Мы используем нескольких провайдеров ИИ для различных задач:
DeepSeek
-
Модель: deepseek-chat
-
Варианты использования: Описания товаров, контент страниц запросов, перевод
-
API: DeepSeek API с резервным вариантом Together.ai
-
Кэширование: Системные промпты для эффективности кэширования промптов
Gemini
-
Модель: Gemini (конкретная модель)
-
Варианты использования: Генерация контента
-
Интеграция: Прямые вызовы API
Amazon Bedrock
-
Модели: Nova Pro
-
Варианты использования: Внутренний чат
-
Интеграция: boto3 SDK
Amazon Bedrock
-
Модели: Nova Lite
-
Варианты использования: Чат-бот для клиентов
-
Интеграция: boto3 SDK
Полный поток запроса
Вот как типичный запрос проходит через нашу инфраструктуру:
flowchart TD
A[Браузер клиента] -->|DNS-запрос| B[Route53]
B -->|IP-адрес| C[CloudFront]
C -->|Проверка кэша| D{Попадание в кэш?}
D -->|Да| E[Вернуть закэшированный контент]
D -->|Нет| F[Nginx]
F -->|Прокси| G[Gunicorn]
G -->|WSGI| H[Flask-приложение]
H -->|Проверка кэша| I[Valkey]
I -->|Попадание| J[Вернуть закэшированные данные]
I -->|Промах| K[DynamoDB]
K -->|Запрос| L[Вернуть данные]
L --> I
J --> M[Сформировать ответ]
E --> M
M --> N[Отправить клиенту]Мониторинг и работоспособность
UptimeRobot — внешний мониторинг
Мы используем UptimeRobot для внешнего мониторинга всех публично доступных эндпоинтов:
-
Бэкенд-сервер (Backend server): Бэкенд веб-сайта
-
www.thinvent.in: Публичный веб-сайт
Проверки работоспособности (Health Checks)
-
Gunicorn: systemd управляет перезапусками
-
Flask: Эндпоинт
/healthвозвращает статус -
Valkey: Мониторится состояние соединения
-
DynamoDB: Мониторятся задержка и пропускная способность
Логирование
-
Логи приложения (Application logs): Gunicorn error.log
-
Логи доступа (Access logs): Gunicorn access.log
-
Email: Уведомления в реальном времени о критических событиях с трассировками стека Python
Итог
Наша инфраструктура разработана для:
-
Производительности: Многоуровневое кэширование, CDN, оптимизированные запросы
-
Масштабируемости: Автомасштабируемые базы данных, балансировка нагрузки
-
Экономической эффективности: Оплата по факту использования, кэширование для снижения нагрузки на БД
Комбинация Flask, Gunicorn, Nginx, Ubuntu, DynamoDB, Valkey, CloudFront и UptimeRobot обеспечивает надежную, масштабируемую основу для нашей платформы электронной коммерции.
Связанные статьи
-
Архитектура аналитики — Узнайте о нашем гибридном подходе к аналитике
-
SEO-пайплайн — Поймите, как поисковые запросы превращаются в страницы товаров
-
Архитектура сервиса поиска — Погрузитесь в нашу поисковую инфраструктуру
-
Стратегия кэширования — Изучите кэширование на всех уровнях
-
Архитектура развертывания — Посмотрите, как система развернута
-
Вопросы безопасности — Ознакомьтесь с мерами безопасности