Files
RekomenciBackend/RFC.md
T
2025-11-23 14:06:16 +03:00

5.0 KiB

Rekomenci fluon RFC

Архитектура. (Всё как завещал дядюшка Боб...)

Проект следует чистой архитектуре дядюшки Боба.

RFC-PROOD: Архитектура Recomenci Fluon

Статус: PROOOD Дата: 23 ноября 2025 Автор: prod 39

1. Краткое описание

Цель.

Описать целевую архитектуру, границы ответственности компонентов, модель разработки и деплоя для проекта рекомендаций и предсказаний зарплат (далее — проект)

RFC определяет интерфейсы для API, операционные требования и переходный план

2. Мотивация

  • Упорядочить архитектуру для масштабируемости, тестируемости и повторяемости ML-экспериментов
  • Обеспечить безопасный и предсказуемый деплой
  • Определить контракты между web/API, ML-сервисом и хранилищем данных

3. Область и не-включения

Включено:

  • Архитектура сервисов (web_api, ml)
  • Хранилища: PostgreSQL, S3(далее object storage)
  • CI/CD, контейнеризация и инвентори infra: Docker Compose
  • Метрики, логирование, мониторинг базовой обработки ошибок

Не включено:

  • Подробный дизайн интерфейсов UI
  • Исследовательские ML-эксперименты (детальные датасеты/фичи) — описан процесс интеграции

4. Цели и критерии приёмки

Цели:

  • Стабильный REST/HTTP API для вакансий и предсказаний
  • Горизонтально масштабируемый ML embedding-сервис
  • Повторяемый pipeline подготовки данных и обучения

5. Высокоуровневая архитектура

  • Web API (web_api): HTTP-сервис, инкапсулирующий бизнес логику. Проксируются запросы к ML
  • ML сервис (ml): HTTP-сервис для генерации embenddings и предсказания
  • PostgreSQL — является хранилищем данных
  • Инфра: Docker Compose для локальной разработки; Coolify для CI/CD

Коммуникация:

  • HTTP rest-ful между web_api и ml; опционально gRPC в будущем
  • Обмен артефактами через object storage и метаданные в PostgreSQL

6. Контракты API (предварительно)

  • Web API:
    • POST /v1/predict — payload: vacancy/resume; returns: salary_prediction {value, confidence, model_version}.
    • POST /v1/vacancies — сохраняет вакансию для последующей обработки.
    • GET /v1/models — список доступных моделей и версий.
  • ML service:
    • POST /infer — принимает фичи/сырой текст, возвращает предсказание и мета.
    • GET /health, GET /metrics.

Входные/выходные схемы должны быть описаны в OpenAPI (yaml) и поддерживаться CI-валидатором

7. Деплой и CI/CD

  • Локально: Docker Compose (just up/build)
  • Staging/Prod: Coolify
  • CI pipeline: lint → build images → full tests → sast → тагирование → deploy staging
  • Резервное копирование: pg_dump + object storage snapshot.
  • Логи и екзек в контейнер в кулифае, метрики в графане

8. Миграции данных и схем

  • Использовать alembic для миграций схем PostgreSQL.
  • Версионировать фичи и контракт входных данных (jsonschema).
  • При изменениях схем: обеспечить миграционные скрипты + миграционный план с откатом.

9. Безопасность и секреты

  • Секреты в ENV (environment secrets в CI).
  • Валидация входящих данных и rate-limiting (Redis).

10. Мониторинг и логирование

  • Логи структурированные (JSON), собираются в централизованный collector (ELK/Prometheus + Grafana для метрик).
  • Метрики: latency, error_rate, throughput, model_drift indicators (distribution shifts), resource usage.
  • Алёрты: SLO/SLA для latency/errors.

11. Тестирование

  • Unit tests - тестируют бизнес логику
  • E2E - тестируют весь user flow