Skip to content

Repository files navigation

TMatch

Приложение для знакомств с персонализированными ML-рекомендациями, построенное на модульном монолите с Clean Architecture и CQRS.


Архитектурные решения (RFC)

Каждое техническое решение в этом проекте — осознанный выбор. Мы задокументировали архитектуру трёх ключевых компонентов системы в формате 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

About

PROD olympiad dating service

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages