# Обзор архитектуры MLflow

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Разобрать **внутреннюю архитектуру** MLflow: Tracking Server, backend store, artifact store, REST API.

## Предварительно

- [Обзор архитектуры MLOps](obzor-arhitektury-mlops.md)

## Время

**3–4 часа**

---

## Компоненты deployment MLflow

```mermaid
flowchart LR
  Client[Python/R/Java Client] -->|REST| Server[Tracking Server]
  UI[Web UI] --> Server
  Server --> Backend[(Backend Store)]
  Server --> Artifacts[(Artifact Store)]
```

| Компонент | Хранит | Типичная технология |
|-----------|--------|---------------------|
| **Backend store** | Experiments, runs, params, metrics, tags | SQLite, PostgreSQL, MySQL |
| **Artifact store** | Модели, plots, файлы | Локальный диск, S3, GCS, Azure Blob |
| **Tracking Server** | API + UI | `mlflow server` в Docker/K8s |

## Разделение метаданных и файлов

**Почему два хранилища?**
- Метаданные — маленькие, нужны SQL-запросы и индексы
- Артефакты — большие (ГБ моделей), дешевле в object storage

Конфигурация сервера (учебный пример):

```bash
mlflow server \
  --backend-store-uri postgresql://USER:PASSWORD@db.example.internal:5432/mlflow \
  --default-artifact-root s3://ml-artifacts-bucket/ \
  --host 0.0.0.0 \
  --port 5000
```

Используйте placeholder'ы: `USER`, `PASSWORD`, `db.example.internal` — не реальные креды.

## REST API

Клиенты общаются через HTTP:
- `POST /api/2.0/mlflow/runs/create`
- `GET /api/2.0/mlflow/experiments/search`

Это позволяет писать клиенты на любом языке и интегрировать CI/CD.

## High Availability

Для production:
- **Несколько реплик** tracking server за load balancer
- **Managed PostgreSQL** для backend
- **S3** с versioning для artifacts
- Бэкапы backend DB

## AuthN / AuthZ

Open-source MLflow **не включает** полноценный SSO из коробки. Варианты:
- Reverse proxy (OAuth2 Proxy, nginx + LDAP)
- Databricks / managed MLflow
- Network policies — доступ только из VPC

## Связь с Registry

Model Registry использует **тот же backend store**. Стадии модели (None → Staging → Production → Archived) — строки в БД + ссылки на artifact URI.

## Локальная схема (обучение)

```
./mlruns/
  0/                          # experiment_id
    meta.yaml
    <run_id>/
      meta.yaml
      metrics/
      params/
      artifacts/
```

При `mlflow server --backend-store-uri ./mlruns` UI читает ту же структуру.

---

## Самопроверка

1. Чем backend store отличается от artifact store?
2. Зачем MLflow REST API?
3. Где хранятся веса модели — в PostgreSQL или S3?

---

## Дальше

→ [Слои и потоки данных](sloi-i-potoki-dannyh.md)
