- 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
65 lines
2.6 KiB
Markdown
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)
|