Как SPG99 делает auto-start безопасным и прозрачным для приложений

Снаружи SPG99 выглядит как обычный PostgreSQL по стандартному DSN. Внутри платформа разделяет точку входа, жизненный цикл compute и durable-хранение данных. Именно это позволяет базе безопасно спать, быстро запускаться и переживать пересоздание рабочего узла без смены DSN.

Стабильная точка входа

Один DSN для приложений через Gateway.

Жизненный цикл compute

Auto-start и auto-stop — штатные состояния архитектуры.

Durable-хранение

Остановка compute не означает потерю данных.

Базовый принцип

Gateway, Control Plane, Compute и storage-контур разделены по ролям

Клиент всегда приходит в Gateway. Control Plane решает, нужно ли поднимать compute. Compute исполняет SQL. Pageserver, Safekeeper и S3 держат durable-состояние базы. Поэтому auto-stop — это штатная часть архитектуры, а не рискованная оптимизация.

Control Plane (CP)

Каталог tenants и БД, доступы, lifecycle и orchestration запуска.

Console

Управление и observability поверх того же Control Plane API.

Gateway

Единый TLS endpoint PostgreSQL (:5432). Принимает соединение, определяет БД и инициирует auto-start.

Provisioner + Agent

Поднимают compute и доводят PostgreSQL до состояния ready.

Compute (PostgreSQL 17)

Рабочий SQL-слой. Может быть пересоздан, потому что durable-состояние вынесено отдельно.

Safekeeper

Принимает WAL и обеспечивает durable write-path.

Pageserver

Собирает storage-состояние и отдаёт basebackup / страницы для bootstrap и restart.

S3-хранилище

Долговечный слой данных и WAL в РФ.

Точки интеграции

Для приложения — DSN. Для платформенной команды — Console и API

Пользовательская поверхность у SPG99 намеренно простая: стандартный PostgreSQL endpoint для приложений и Control Plane API для автоматизации. Это позволяет встроить сервис в CI/CD, внутренний портал или IaC без отдельного проприетарного протокола.

ConsoleREST API v2curl / Postman
Control Plane API v2
# Control Plane API (v2)
export SPG99_CP_URL="https://<cp-host>/v2"
export SPG99_API_KEY="<api-key>"

# 1) Создать tenant
curl -sS "$SPG99_CP_URL/tenants"   -H "Authorization: Bearer $SPG99_API_KEY"   -H "Content-Type: application/json"   -d '{"name":"acme"}' | jq .

# 2) Создать БД (стартовый публичный уровень по умолчанию: L1)
curl -sS "$SPG99_CP_URL/tenants/acme/dbs"   -H "Authorization: Bearer $SPG99_API_KEY"   -H "Content-Type: application/json"   -d '{"name":"app"}' | jq .

# 3) Получить DSN для подключения через Gateway
curl -sS "$SPG99_CP_URL/tenants/acme/dbs/app"   -H "Authorization: Bearer $SPG99_API_KEY"   -H "Content-Type: application/json"   | jq -r '.connection_string'
Cold start path
# Compute lifecycle
# 1) Создать БД один раз
curl -sS -X POST "$SPG99_CP_URL/tenants/acme/dbs"   -H "Authorization: Bearer $SPG99_API_KEY"   -H "Content-Type: application/json"   -d '{"name":"app"}' | jq .

# 2) Первое подключение триггерит auto-start compute
psql 'postgres://<pg_user>:<pg_password>@<gateway-host>:5432/app?sslmode=require'

# 3) Проверить текущий статус
curl -sS "$SPG99_CP_URL/tenants/acme/dbs/app"   -H "Authorization: Bearer $SPG99_API_KEY" | jq .
Инвариант: DSN остаётся тем же; остановка compute не означает потерю данных; новый compute поднимается поверх того же timeline.
DSN для приложения
postgres://<pg_user>:<pg_password>@<gateway-host>:5432/<db-name>?sslmode=requirePostgreSQL over TLS