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

2.6 KiB

Архитектура системы

Общее описание

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)