Stroy1Click — высоконагруженный, отказоустойчивый e-commerce проект с микросервисной архитектурой, современной инфраструктурой, полной наблюдаемостью.
- 🛒 Каталог категорий, подкатегорий, типов продуктов, товаров, корзина, заказы
- 👤 Пользователи, роли, авторизация и безопасность
- ⚡ Высокая производительность и отказоустойчивость
- 🧠 Кэширование и распределённые блокировки
- 🔍 Полная наблюдаемость: метрики, трассировка, логи
- 🧪 Интеграционные и контейнерные тесты
- ☁️ Полностью готов к деплою в Kubernetes
Основные принципы архитектуры:
- микросервисный подход
- горизонтальное масштабирование
- устойчивость к сбоям за счёт использования Resilience4j CircuitBreaker
- безопасность на основе JWT-аутентификации между микросервисами
- централизованный мониторинг и распределённая трассировка на базе OpenTelemetry
- автоматизированный CI/CD
- Database-per-Service - каждый сервис владеет своей базой данных
- Outbox Pattern для надёжной доставки событий и согласованности данных (используется между ProductService и SearchService)
- Реактивное программирование (используется в Notification Service)
- Redis-кэширование для повышения производительности и снижения нагрузки на БД
- JavaScript
- HTML / CSS
- BFF (Backend for Frontend) - Spring Boot
- Thymeleaf
- Java / Spring Boot
- Spring Web (Spring MVC)
- Spring Data JPA
- Spring Security
- Spring Validation
- Spring WebFlux
- Spring Actuator
- Spring for Apache Kafka
- Spring Boot Starter Mail
- Spring Boot Starter Freemarker
- Resilience4j (CircuitBreaker, RateLimiter)
- Redisson
- Flyway
- ModelMapper
- Lombok
- AWS Java SDK
Для унификации кода и повторного использования логики в микросервисной среде были разработаны следующие модули:
- Common Library:
- Общие модели данных:
DTO,Command,Event. - Exceptions
- Работа с JWT:
JwtService. - Валидация: логика
ImageValidator. - Утилитные классы: конфигурация
ModelMapper, логирование и обработка ошибокValidationErrorUtils.
- Общие модели данных:
- Outbox Core:
- Централизованная логика для реализации паттерна Transactional Outbox.
- Обеспечивает атомарность сохранения бизнес-данных и событий для отправки.
- Outbox Consumer Core:
- Логика для идемпотентной обработки сообщений из Kafka.
- Защита от дубликатов при повторной доставке (Exactly-once processing logic).
- Python
- AI / Search processing
- Go
- Chi
- Cors
- Docker
- Kubernetes
- Redis
- PostgreSQL
- S3
- Apache Kafka
- OpenTelemetry
- ElasticSearch
- Tempo
- Prometheus
- Grafana
- JUnit
- Mockito
- Testcontainers
- Swagger / OpenAPI
- CircuitBreaker для внешних вызовов
- RateLimiter для защиты от перегрузки
- Redis-кэш для уменьшения нагрузки на БД
- Graceful degradation при отказах сервисов
- Аутентификация и авторизация на основе JWT
- JWT используется для защищённого взаимодействия между микросервисами
- Ingress Controller выполняет роль API Gateway
- Каждый входящий запрос проходит через Ingress, где:
- извлекается JWT-токен
- выполняется валидация токена через JWT Validator Service
- проверяются права доступа
- Разграничение прав доступа на уровне API Gateway / BFF
- Secure secrets management
- Метрики - Prometheus
- Трассировка - OpenTelemetry + Tempo
- Логи - ElasticSearch
- Визуализация - Grafana
В системе используется реактивное программирование в Notification Service на базе Spring WebFlux и Server-Sent Events (SSE).
Поток событий при создании заказа:
- Order Service создаёт заказ
- Notification Service получает сообщение от Apache Kafka
- Notification Service публикует событие через SSE
- Административная консоль в реальном времени отображает появление нового заказа
В проекте используется паттерн Transactional Outbox для обеспечения гарантированной доставки сообщений между микросервисами (например, от Product Service к Search Service).
Механизм работы:
- Сервис обновляет состояние сущности в БД и одновременно сохраняет событие в таблицу
outboxв рамках одной транзакции. - Отдельный процесс считывает события из
outboxи публикует их в Apache Kafka. - Микросервисы-потребители (Consumer) получают сообщения и обрабатывают их, используя
Outbox Consumer Coreдля предотвращения дублирования действий.
Данный подход гарантирует Eventual Consistency (согласованность в конечном счете) и исключает потерю данных при сбоях брокера или сети.
Проект развернут в облачной инфраструктуре timeweb.cloud с использованием Docker и Kubernetes. Для локального развёртывания перейдите к observability-infrastructure/docker-compose.yaml.
После запуска микросервиса Swagger доступен по адресу:
http://localhost:{port}/swagger-ui/index.html
Высокопроизводительный микросервис на Python (FastAPI), реализующий логику семантического поиска и интеллектуальной обработки товаров.
- Framework: FastAPI (Asynchronous).
- Machine Learning:
sentence-transformers(модельparaphrase-multilingual-MiniLM-L12-v2). - Vector Engine: Elasticsearch 8.x (Dense Vector storage).
- Database: PostgreSQL (SQLAlchemy 2.0 Async) для надежного хранения метаданных.
- Hybrid Data Storage: Сервис поддерживает актуальную копию данных в PostgreSQL (схема
search_schema) и синхронизирует её с поисковым индексом Elasticsearch. - Semantic Search (k-NN): Поиск выполняется не по ключевым словам, а по смысловому сходству векторов (Cosine Similarity). Это позволяет находить релевантные товары даже при отсутствии точных совпадений в тексте.
- Multilingual Support: Используемая модель трансформера оптимизирована для работы с русским и английским языками.
- Outbox Synchronization: Интеграция с Java-микросервисами через обработку событий
OutboxMessageDto, что гарантирует согласованность данных (Eventual Consistency).
- Ingestion: Приложение принимает событие (создание/обновление товара) через REST-эндпоинт.
- Embedding: Текстовое описание товара преобразуется в вектор из 384 чисел.
- Indexing: Данные сохраняются в индекс
products_ai_searchвместе с вектором. - Search: При поисковом запросе сервис векторизует запрос пользователя и находит ТОП-10 ближайших соседей в векторном пространстве Elasticsearch.
Сервисы мониторинга и наблюдаемости доступны по адресам:
Grafana - http://localhost:3000
Prometheus - http://localhost:9095/query
ElasticSearch - http://localhost:9200