syncops init
Создаёт кластер и генерирует конфиг. Флаги: --region, --nodes, --wal-dir. По умолчанию WAL пишется на NVMe-том.
Docs / syncops-docs · v3.4.2
Техническая документация
Всё, что нужно, чтобы поднять кластер, написать первый пайплайн и начать гонять данные. CLI, REST, GraphQL, готовые сниппеты на Go и Python — без «прочитайте в вики».
Быстрый старт
Один бинарник, один конфиг, один порт. Никаких оркестраторов и ручных миграций — кластер поднимается сам.
Шаг 1 — установка. Скачайте бинарник для вашей платформы и проверьте целостность контрольной суммой SHA-256 из релиза v3.4.2:
curl -fsSL https://get.syncops.dev | sh
syncops --version # syncops 3.4.2 (build 2025-03-14)
Шаг 2 — инициализация кластера. Создайте конфиг и запустите мастер инициализации. Мастер сгенерирует ключи, настроит WAL-журнал и поднимет контроллеры:
syncops init --region ru-central --nodes 3
syncops up --config syncops.yaml
Шаг 3 — первый пайплайн. Опишите источник и цель, укажите гарантию доставки. После syncops apply данные пойдут, а метрики появятся в :9090/metrics.
Справка по CLI
CLI покрывает весь жизненный цикл: от инициализации до инспекции чекпоинтов и диагностики lag. Каждая команда идемпотентна и безопасна для повторного запуска.
Создаёт кластер и генерирует конфиг. Флаги: --region, --nodes, --wal-dir. По умолчанию WAL пишется на NVMe-том.
Применяет декларативный манифест пайплайнов. Дифф-мод: показывает, что изменится, до реального применения. Флаг --dry-run не трогает данные.
Снимок состояния: lag по каждому пайплайну, возраст чекпоинтов, размер бэклога. Форматы вывода: таблица, JSON, Prometheus-экспорт.
Управление точками восстановления: список, принудительный снимок, восстановление из чекпоинта. Критично для отката после инцидента без потери данных.
Диагностика конкретного сообщения или ключа: путь через ноды, время обработки, применённые трансформации, разрешение конфликтов.
Горизонтальное масштабирование нод без простоя. Система перераспределяет шарды WAL и обновляет маршрутизацию автоматически.
REST API Reference
Полный CRUD по пайплайнам, метрикам и чекпоинтам. Аутентификация — bearer-токен, лимиты — 600 req/min на кластер.
Базовый URL: https://api.syncops.dev/v3 · Auth: Authorization: Bearer <token>
GET /pipelines — список пайплайнов с текущим lag и статусом. Query-параметры: ?region=ru-central&status=lagging. Ответ содержит total, page и items[].
POST /pipelines — создание пайплайна из JSON-манифеста. Валидация схемы до применения; при ошибке возвращается 422 с полем errors[].
GET /pipelines/{id}/metrics — метрики конкретного пайплайна за период. Форматы: JSON, CSV, Prometheus exposition format.
POST /checkpoints — принудительный снимок. Тело: {"pipeline":"pg-ch-01","label":"pre-deploy"}. Возвращает 201 с идентификатором чекпоинта.
DELETE /pipelines/{id} — удаление с опциональным ?purge=true для полного стирания WAL-записей. Без purge — мягкое удаление с 30-дневным окном.
GraphQL Endpoints
Для сложных дашбордов и кастомных интеграций. Одна точка, все данные: ноды, пайплайны, конфликты, метрики. Поддержка подписок на изменения в реальном времени.
Типы: Cluster, Pipeline, Node, Conflict, Checkpoint. Каждая с полями id, createdAt, status и вложенными связями.
Мутации: createPipeline, updateConfig, takeCheckpoint, resolveConflict. Все атомарные и идемпотентные — повторный вызов не создаст дублей.
Подписки: onLagExceeded, onConflictDetected, onPipelineStatus. Транспорт — WebSocket, payload в формате GraphQL-ответа. Авто-реконнект с backoff.
{
cluster(id: "prod-ru-central") {
pipelines(status: LAGGING) {
id
name
lag(ms)
checkpoint { age(seconds) }
}
}
}
Примеры кода
Минимальные рабочие примеры: подключение, создание пайплайна и чтение метрик. SDK-ы обёртывают REST и обрабатывают ретраи с экспоненциальным backoff.
Клиент с нативной поддержкой контекста и канселейшена. Подключение, манифест, применение — три вызова. Ретраи и таймауты из коробки.
Асинхронный клиент на httpx. Контекст-менеджеры, dataclass-модели, логирование. Совместим с Python 3.10+.
Оба SDK поддерживают: кастомные HTTP-клиенты, интерцепторы для логирования, стриминг больших датасетов и graceful shutdown по SIGTERM.
Go:
client := syncops.New("https://api.syncops.dev/v3", token)
manifest := syncops.Pipeline{
Name: "pg-to-ch",
Source: "postgres://prod-ru-central",
Target: "clickhouse://analytics",
Guarantee: syncops.ExactlyOnce,
}
if err := client.Apply(ctx, manifest); err != nil { log.Fatal(err) }
Python:
from syncops import Client, Pipeline
async with Client("https://api.syncops.dev/v3", token) as c:
pipe = await c.pipelines.create(
name="pg-to-ch",
source="postgres://prod-ru-central",
target="clickhouse://analytics",
guarantee="exactly-once",
)
print(await pipe.metrics.lag())
FAQ
Готовы к старту
Установите SyncOps, опишите первый пайплайн и получите данные в целевой системе. Без карты, без звонков, без «мы вам перезвоним».