Files
sless/doc/architecture/overview.md
T
“Naeel” b29b6c3d10 docs: initial project documentation
- architecture overview and stack
- project structure and development order
- API design (endpoints, models, runtimes)
- infrastructure overview (k8s cluster, S3, registry)
- decisions log with rationale
- progress tracker v1/v2
2026-03-06 09:51:01 +04:00

65 lines
2.6 KiB
Markdown

# Архитектура системы
## Общее описание
Managed Serverless Functions Service для облачного провайдера nubes.ru.
Пользователь загружает код, сервис его собирает и запускает по HTTP-триггеру или расписанию.
## Стек
| Компонент | Технология | Где запущен |
|-----------|-----------|-------------|
| API сервер | Go | Kubernetes, namespace `sless` |
| PostgreSQL | PostgreSQL | Kubernetes, namespace `sless` |
| Redis | Redis | Kubernetes, namespace `sless` |
| RabbitMQ | RabbitMQ | Kubernetes, namespace `sless` (позже) |
| S3 | Ceph (облачный) | `ceph.tst.nubes.ru` |
| Container Registry | Внутренний registry кластера | namespace `registry` |
| Функции пользователей | k8s Jobs/Deployments | namespace `sless-fn-{id}` |
## Схема
```
Пользователь
REST API (Go) ←── Terraform provider
├── PostgreSQL — метаданные функций, версии, логи вызовов
├── S3 (Ceph) — хранение кода (zip архивы)
├── Redis — кеш, rate limiting
Builder — получает zip из S3, собирает Docker образ, пушит в registry
Runner (k8s) — деплоит функцию как Job/Deployment в k8s
RabbitMQ — async вызовы, cron triggers (v2)
```
## Аутентификация
Используется токен облака (Bearer token), который пользователь получает в UI облака.
Terraform provider передаёт его в заголовке `Authorization: Bearer <token>`.
Keycloak не используется.
## Мониторинг
Метрики функций → Victoria Metrics / Grafana (уже есть в облаке).
Grafana: https://grafana.ngcloud.ru/dashboards/...
## Kubernetes кластер
Сейчас используется существующий кластер (временно).
Планируется переезд на новый кластер — манифесты переносятся без изменений.
Ноды существующего кластера:
- `wheel-control-plane-fm9sr` — control-plane
- `wheel-workers-tv4qr-r45xs` — worker
- `wheel-workers-tv4qr-x8xw7` — worker
Ingress: nginx, external IP `5.172.178.182`
Storage: rawfile CSI (local-path, default)