Приложение для знакомств с персонализированными ML-рекомендациями, построенное на модульном монолите с Clean Architecture и CQRS.
Каждое техническое решение в этом проекте — осознанный выбор. Мы задокументировали архитектуру трёх ключевых компонентов системы в формате RFC: не просто «что сделано», а «почему именно так» — с альтернативами, trade-off'ами и бизнес-обоснованием.
| RFC | Область | Ключевые решения |
|---|---|---|
| RFC: Backend | /backend/ |
Модульный монолит, Clean Architecture, CQRS, Domain Events, OAuth2, Kafka, IoC |
| RFC: Frontend | /frontend/ |
SPA, хуки для управления состоянием, SSE для чата, клиентское сжатие изображений |
| RFC: ML-сервис | /ml/ |
Векторный поиск, hash-based кодирование интересов, инкрементальное онлайн-обучение |
Backend построен как модульный монолит с явными границами между доменами: аутентификация, матчинг, мессенджер, модерация и транзакции. Каждый модуль изолирован по принципам Clean Architecture — бизнес-логика не зависит ни от HTTP-фреймворка, ни от базы данных. CQRS разделяет команды и запросы: не ради паттерна, а потому что у них принципиально разные требования к консистентности и производительности. Domain Events через Kafka развязывают ML-сервис от бэкенда — свайп записывается атомарно, ML обновляет рекомендации асинхронно, ни одно событие не теряется даже при временной недоступности сервиса.
Frontend намеренно минималистичен. Нет тяжёлых state-менеджеров, нет избыточных абстракций — только то, что нужно для задачи. SSE вместо WebSockets для чата: браузер переподключается сам, инфраструктура не требует специальной настройки. Сжатие фото на клиенте — экономия трафика и хранилища без единой строки серверного кода.
ML-сервис решает задачу холодного старта без исторических данных. Векторное представление интересов пользователей позволяет мгновенно находить похожие профили через ANN-поиск. Предпочтения обновляются инкрементально при каждом свайпе — онлайн-обучение без пересчёта всей истории. Воркер и HTTP API разделены на два контейнера с независимыми профилями масштабирования.
Backend Python · FastAPI · PostgreSQL · Kafka · Clean Architecture · CQRS · DDD
Frontend React · Vite · SSE
ML FastAPI · Qdrant (векторный поиск) · Redis · Kafka
Infra Docker Compose · Traefik · S3 · GitLab CI/CD · OpenTelemetry