Архитектура SLOzy
- High-level архитектурные диаграммы
- Схемы взаимодействия сервисов (4 ключевых потока)
- Схема базы данных (15+ таблиц с индексами)
- Варианты развёртывания: Docker Compose, Kubernetes, VM
- Архитектура безопасности (OAuth, RBAC, шифрование)
- Стратегия масштабирования (single-tenant → multi-tenant)
- Мониторинг и эксплуатационные требования
Версия: 1.0-alpha
Дата: 2025-06-09
Статус: Черновик
Аудитория: Технические специалисты, DevOps, SRE
💡 Смотрите также: Начало работы · Развёртывание · Возможности · English version
Высокоуровневая архитектура
Философия
SLOzy построен на stateless-архитектуре с внешним состоянием (PostgreSQL + Redis). Это даёт горизонтальное масштабирование, простые обновления и разделение ответственности.
Ключевые принципы:
- Сервис-ориентированность: отдельные API-сервис, worker и мониторинг
- Stateless: никакого локального состояния, всё в БД/кэше
- Event-Driven: ingestion worker запускается по cron
- Multi-Process: тяжёлые задачи (расчёт метрик) в отдельном процессе
- Future-Proof: архитектура поддерживает single-tenant (MVP) и multi-tenant (будущее)
Интеграция с системами метрик
SLOzy — read-only consumer. Он не хранит сырые метрики, а только результаты расчётов (SLI, burn rate, error budget) в своей PostgreSQL.
Типовые сценарии подключения:
| Сценарий | URL в Data Source | Как настроено |
|---|---|---|
| Одна Docker-сеть | http://prometheus:9090 | Внутренний Docker DNS |
| Другой сервер в сети | http://10.0.1.50:9090 | Прямой HTTP |
| VictoriaMetrics | http://victoria:8428 | Совместимый API (/api/v1/query) |
| Thanos | http://thanos:19194 | Query frontend |
| За reverse proxy | https://prom.example.com | Basic Auth / Bearer Token |
Схема компонентов
┌─────────────────────────────────────────────────────────┐
│ SLOzy Deployment │
│ (развёртывается у клиента) │
└─────────────────────────────────────────────────────────┘
┌───────────────────────┐
│ Внешний трафик │
└───────────┬───────────┘
│ HTTPS (Port 443)
│
┌───────────────▼────────────────┐
│ Nginx │
│ (SSL, reverse proxy, лимиты) │
└───────────────┬────────────────┘
│ Port 8080
│
┌────────────────────────────────────────────────────┐
│ Application Layer │
│ │
│ ┌──────────────┐ ┌───────────────────┐ │
│ │ slozy-web │ │ slozy-ingestor │ │
│ │ (API Server) │ │ (Worker Service) │ │
│ │ │ │ │ │
│ │ - SLO CRUD │ │ - Prometheus │ │
│ │ - Auth │ │ Queries │ │
│ │ - Dashboard │ │ - Burn Rate Comp. │ │
│ │ Endpoint │ │ - Metrics Store │ │
│ └──────┬───────┘ └─────────┬─────────┘ │
│ │ │ │
└─────────┼──────────────────────────┼──────────────┘
│ │
│ │ SQL + TCP
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ PostgreSQL │ │ Redis │
│ (основная БД) │ │ (кэш + сессии) │
└─────────────────┘ └─────────────────┘
│
▼
┌────────────────────────────────────────────────────┐
│ Внешние зависимости │
│ │
│ ┌────────────┐ ┌─────────────┐ ┌──────────┐ │
│ │ Prometheus │ │ Victoria │ │ Grafana │ │
│ │ (метрики) │ │ Metrics │ │ (дашборды)│ │
│ └────────────┘ └─────────────┘ └──────────┘ │
└────────────────────────────────────────────────────┘Технологический стек
| Компонент | Технология | Назначение |
|---|---|---|
| Backend | Go 1.22+ | API-сервер, worker |
| База данных | PostgreSQL 15+ | Основное хранилище |
| Кэш | Redis 7+ | Кэш метрик, сессии |
| Фронтенд | React 18 + TypeScript | Web-интерфейс |
| Метрики | Prometheus API | Источник данных SLO |
| Визуализация | Grafana (опционально) | Дашборды |
Дальнейшие шаги
- Начало работы — первый запуск SLOzy
- Руководство по развёртыванию — Docker, Kubernetes, VM
- Возможности — SLO, уведомления, кэширование
- English version — documentation in English