Skip to content
PaffinPublic

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Latest commit

 

History

97 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Infra Architect — проектируйте инфраструктуру, которая переживёт отказ

Архитектура, которую можно сломать — и посмотреть, что будет

Опишите систему словами или соберите руками. ИИ предложит схему, а детерминированный движок на Rust проверит её по правилам, проиграет отказы — узла, стойки, ЦОДа, региона, обрыв канала, — посчитает RTO, RPO, ёмкость, доступность и стоимость и выдаст настоящий IaC.

Лицензия Последний коммит Звёзды Rust Vue 3 PostgreSQL Docker

Быстрый старт · Что умеет · Эталонные архитектуры · Проверка в CI · Документация · English

Редактор: схема из трёх площадок, справа — проверки движка и то, что улучшить в первую очередь
Демо-проект с заведомыми дефектами: движок нашёл два риска и один вопрос без данных, а справа — какое исправление даст больше всего, с эффектом, измеренным на копии схемы.

956
продуктов в каталоге
578
вариантов развёртывания
60
правил проверки
20
эталонных архитектур
129
настроек без пересборки
1150+
автотестов без моков

Зачем

«Три ЦОДа, кворум, репликация, бэкапы» на доске выглядит убедительно. Вопросы начинаются потом. Что будет, если ЦОД-1 пропадёт целиком? Сколько данных потеряем? Выдержат ли оставшиеся площадки нагрузку? Уложимся ли в SLO 99.95 %? И чем то, что мы развернём, отличается от того, что нарисовано?

Infra Architect превращает схему в проверяемую модель и отвечает на эти вопросы числами, а не ощущениями:

  • ИИ предлагает — движок доказывает. Модель не решает, выживет ли схема. Каждый факт об архитектуре — находка, время восстановления, доступность — считает детерминированный Rust-движок: без сети, без случайности, одинаково в редакторе, в API и в CI. Правки от ИИ применяются только после просмотра diff.
  • Отказ можно проиграть. Выключите ЦОД, стойку, узел или канал — и вы увидите, как переключается primary, держится ли кворум, куда уходит трафик, сколько запросов теряется и сколько данных.
  • «Зелёного» без проверенных предпосылок не бывает. Если движку не хватает данных (замера задержки, бюджета, уровня площадки), он не рисует «ок», а говорит, что именно заполнить.
  • От схемы — к коду. Манифесты Kubernetes, Helm, Terraform/OpenTofu без заглушек; ADR, Runbook, Mermaid, SVG, JSON.
  • Свой и открытый. Лицензия Apache-2.0, docker compose up, PostgreSQL. Данные уходят только туда, куда вы сами направили их: в OpenRouter, если включили ИИ, и на endoflife.date, если обновляете таблицы версий.

Инструмент для архитекторов и SRE, которые защищают схему перед командой, и для техлидов, которым в ревью нужен ответ «а переживёт ли?», подтверждённый расчётом.

Как это работает

flowchart LR
    you(["Вы<br/>словами или на холсте"]) --> ai["ИИ<br/>только предлагает"]
    ai --> diff["Diff «до / после»"]
    diff -- "вы применяете" --> model["Модель архитектуры<br/>единый источник правды"]
    you --> model
    model --> engine{{"Движок на Rust<br/>детерминированный"}}
    engine --> verdict["Правила · отказы · ёмкость<br/>доступность · стоимость"]
    model --> export["Экспорт<br/>IaC · ADR · Runbook · SVG"]
    model --> ci["CLI в конвейере<br/>infra-architect check"]
    classDef core fill:#2e5bec,stroke:#2e5bec,color:#fff
    class engine core
Loading

Единая типизированная модель — зоны отказа (ЦОД, AZ, регион, стойка), компоненты, связи с семантикой (зависимость, репликация, кворум, резервная копия) и требования (пик RPS, RTO, RPO, бюджет, SLO). Холст, ИИ, проверки, симуляция и экспорт — лишь её представления, поэтому они не могут разойтись друг с другом.

Что умеет

Проверяет, а не рисует

Единые точки отказа, кворум и арбитры, split-brain, RPO и RTO, катастрофа региона, потеря нескольких площадок, ёмкость при отказе, бэкапы, сеть, безопасность, стоимость, сроки поддержки версий. Каждая находка — «критично», «риск» или «нет данных». Рядом — «Что улучшить в первую очередь»: движок пробует каждое исправление на копии схемы, проверяет её заново и ставит исправления в порядок по измеренному эффекту — сколько критичных закрыто, насколько выросла оценка, сколько это стоит.

Карточки и зоны вблизи: значок вида, продукт и версия, точка состояния, роль и Tier площадки

Схема читается как продукт, а не как набор прямоугольников: цветной значок вида, продукт и версия, метка «управляемый сервис», точка состояния, стопка слоёв там, где экземпляров несколько; у зоны — роль (active / standby / witness), уровень Tier и число узлов. Кнопка «Обозначения» объясняет линии, карточки и частицы отказа.

Для больших схем — фокус на выбранном компоненте, семантический зум и карта площадок с вердиктом симулятора на потерю каждой.

Ломает по-настоящему

Экземпляр, узел, кластер, стойка, площадка, канал между площадками, изоляция группы площадок, гео-домен — и несколько отказов сразу. Симулятор считает переключение primary, кворум, fencing, восстановление из бэкапа, масштабирование pilot-light и перераспределение нагрузки; панель отказа показывает время восстановления, потерю данных, ёмкость и число затронутых узлов, а шаги восстановления можно проиграть.

Отказ рассказывает историю: сначала — как идёт трафик без отказа, затем — где запросы теряются, какими объездами нагрузка идёт там, где связи на схеме нет, и какая доля запросов в итоге обслуживается.

Отказ ЦОД-1: трафик идёт в обход, обслуживается 96 % запросов, в панели — что потеряно и кого затронуло

Ещё кадры: до отказа, момент отказа, панель в окне, несколько отказов сразу

Первый кадр: так идёт трафик без отказа — запросы бегут по связям, справа доля обслуживаемых и сколько это в rps

Момент отказа: запросы теряются у базы, пока реплику не повысили; карточки, которые ждут зависимость, подписаны

Панель отказа: четыре показателя, трафик, список затронутых и шаги по времени

Панель в окне над схемой: её можно двигать, сворачивать до заголовка и вернуть в правую колонку

Несколько отказов сразу: площадки, узлы и каналы вместе — отдельный сценарий

Считает девятки и деньги

Ожидаемая доступность: движок берёт каждый отказ (экземпляр, весь сервис, стойку, площадку, канал, катастрофу, инцидент провайдера), умножает его частоту на простой из симулятора и сравнивает сумму с вашим SLO — и показывает, из чего складывается простой. План ёмкости: нагрузка и запас каждого сервиса, худший отказ, «а если нагрузка ×2». Стоимость — по моделям площадок (свой ЦОД, облако).

Ожидаемая доступность 99.97 % при цели 99.95 %: из чего складывается простой План ёмкости: запас каждого сервиса, худший отказ, что если нагрузка вырастет

Частоты отказов и SLA провайдеров — допущения, и они настраиваются; «достоверность оценки» честно говорит, сколько вопросов осталось без данных (docs/AVAILABILITY.md).

ИИ — в своей роли

Генерация схемы, правка, «исправь замечание», чат. Ответ модели проходит проверку схемы, валидацию, ремонт и проверку движком; на выходе — предложение с diff и оценкой «до / после». Оно применяется только явно, а прежнее состояние до этого сохраняется как версия: любую правку можно откатить. Ключ OpenRouter задаётся в админ-панели; без ключа всё остальное работает полностью.

ИИ-проектирование: настоящий ответ модели проверен движком — предложение с diff и оценкой, применяется только явно

Каталог, который знает, как продукты падают

Сотни продуктов — базы данных, очереди, балансировщики, кэши, хранилища секретов, SIEM, ИТ-сервисы, ERP, платформы ИИ — сгруппированы по функции. У продукта есть варианты развёртывания, которые меняют поведение при отказе, кворум и цену (Patroni и Amazon RDS, Redis Sentinel и Cluster, Kafka на KRaft и MSK), и версии с датами конца поддержки из endoflife.date: таблицы обновляются кнопкой, по расписанию и из CI. Мастер размещения собирает полную схему для 1, 2, 3, 5, 10 и более площадок — со стойками, регионами, арбитрами и резервной площадкой.

Библиотека: продукты по категориям и функциям, «обычный выбор» сверху и «Ещё N» под ним Продукт, вариант и версия узла: срок поддержки версии берётся из таблицы выпусков

Мастер размещения: пять площадок, что схема переживает, карта площадок по стойкам и ролям

Настоящий IaC и документы

Манифесты Kubernetes (kustomize), Helm (helmfile) и Terraform/OpenTofu генерируются из шаблонов, которые правятся в админ-панели, и проверяются по схемам Kubernetes, CRD операторов и провайдеров. «Без заглушек» — принцип: то, что сгенерировать честно нельзя, перечислено в отчёте с причиной; секреты не генерируются никогда. Кроме кода — ADR, Runbook действий при отказах, диаграмма Mermaid, схема в SVG и JSON.

Экспорт: манифесты Kubernetes, Helm, Terraform, ADR, Runbook, Mermaid, SVG и JSON; отчёт о том, что сгенерировано и что нет

Всё настраивается

Админ-панель управляет всем без пересборки: OpenRouter и модели, лимиты, правила (включить, изменить серьёзность и вес), каталог продуктов и таблицы версий, схемы размещения, шаблоны архитектур и IaC, промпты, параметры движка, пользователи, журнал аудита, резервная копия конфигурации. В коде нет захардкоженных чисел и текстов: тайминги, пороги, лимиты, правила и каталог — данные.

Админ-панель: правила проверки с включением, важностью и весом

Ощущается как продукт

Анимации в трёх режимах (все, сокращённые, выключены; по умолчанию как в системе), палитра команд Ctrl/⌘+K, мультивыделение и массовые действия, «Отменить» после удаления, тур по интерфейсу, панели, которые двигаются, сворачиваются и запоминают положение, русский и английский языки, доступность, которую проверяет axe-core.

Полный перечень — docs/FEATURES.md.

Эталонные архитектуры

Не с чистого листа: в диалоге «Новый проект» — галерея проверенных схем. Поиск идёт по названию, описанию и тегам, кнопки-фильтры сужают выбор, а карточка сразу говорит о размере и целях: SLO, RPO, RTO. Каждая схема проходит все правила без критичных находок, держит заявленную доступность и собственный шлюз infra-architect check, а её IaC проверяется по схемам — это проверяют тесты и make iac-check (docs/TEMPLATES.md).

Новый проект: галерея эталонных архитектур с поиском, фильтрами по тегам и целями на каждой карточке

Все эталонные архитектуры · 20
Архитектура Теги SLO RPO RTO Переживает
1 ЦОД · 3 стойки Свой ЦОД · Стойки · HA 99.9 % 5 мин 4 ч отказ стойки
2 ЦОД + witness DR · Свой ЦОД · Kubernetes · Kafka · HA 99.95 % 0 15 мин отказ площадки
3 AZ в одном регионе Облако · Kubernetes · Kafka · HA 99.95 % 0 5 мин отказ площадки
Multi-region, pilot light DR · Несколько регионов · Облако · Pilot light 99.9 % 5 мин 1 ч катастрофа: потеря региона/города
Event-driven на Kafka Kafka · Kubernetes · Облако · HA 99.95 % 0 5 мин отказ площадки
3 площадки, кворум большинством Свой ЦОД · Кворум · Много площадок 99.95 % 0 5 мин отказ площадки
5 площадок, переживаем 2 одновременно Много площадок · Кворум · DR · Свой ЦОД 99.95 % 0 5 мин отказ площадки
10 площадок в 3 регионах Много площадок · Несколько регионов · Кворум 99.95 % 5 мин 1 ч катастрофа: потеря региона/города
AWS: веб-сервис в трёх зонах Облако · AWS · HA · Kubernetes · Управляемые сервисы 99.7 % 0 5 мин отказ площадки
Azure: веб-сервис в трёх зонах Облако · Azure · HA · Kubernetes · Управляемые сервисы 99.7 % 0 5 мин отказ площадки
Google Cloud: веб-сервис в трёх зонах Облако · Google Cloud · HA · Kubernetes · Управляемые сервисы 99.7 % 0 5 мин отказ площадки
Yandex Cloud: веб-сервис в трёх зонах Облако · Yandex Cloud · HA · Kubernetes · Управляемые сервисы · РФ 99.7 % 0 5 мин отказ площадки
Kubernetes-платформа: GitOps и наблюдаемость Kubernetes · Платформа · GitOps · Наблюдаемость · Свой ЦОД · HA 99.95 % 0 10 мин отказ площадки
Платёжная система: 2 ЦОД, HSM, SIEM Финансы · Безопасность · DR · Свой ЦОД · HSM · Регуляторика 99.95 % 0 5 мин отказ площадки
Платформа данных: Kafka, Flink, ClickHouse Данные · Аналитика · Kafka · ClickHouse · HA 99.9 % 5 с 15 мин отказ площадки
RAG-ассистент: LLM на GPU и векторная БД ИИ · LLM · RAG · Векторная БД · GPU · HA 99.9 % 1 мин 10 мин отказ площадки
Serverless на AWS: API, функции, DynamoDB Облако · AWS · Serverless · Управляемые сервисы · Быстрый старт 99.5 % 1 мин 15 мин отказ площадки
Микросервисы: интернет-магазин на Kubernetes Микросервисы · Kubernetes · E-commerce · Service mesh · HA 99.9 % 0 5 мин отказ площадки
Гибрид: свой ЦОД и резерв в облаке DR · Гибрид · Свой ЦОД · Облако · Pilot light · Экономия 99.9 % 1 мин 4 ч отказ площадки
IoT-телеметрия: MQTT, EMQX и TimescaleDB IoT · MQTT · Временные ряды · HA 99.9 % 5 с 5 мин отказ площадки

Быстрый старт

Нужен только Docker (Linux, macOS, Windows через WSL):

git clone https://github.com/Paffin/infraAI.git && cd infraAI
make try    # готовый образ ghcr.io/paffin/infra-architect + PostgreSQL, ничего не собирается
# или
make up     # то же, но образ собирается из исходников

Затем откройте http://localhost:8080 в браузере. Файл .env с секретами (APP_SECRET, POSTGRES_PASSWORD, пароль первого администратора) команда пишет сама, случайными, с доступом только вам (deploy/init-env.sh; существующий .env она не трогает). Без make: sh deploy/init-env.sh && docker compose up -d --build. Копировать .env.example руками не нужно и не получится: секреты в нём пустые, и docker compose откажется стартовать.

Первый администратор создаётся из ADMIN_EMAIL / ADMIN_PASSWORD в .env (admin@example.com и сгенерированный пароль; он нужен один раз, при первом запуске). Если пароль не задан, он генерируется и печатается один раз в журнал (docker compose logs app | grep -A3 "administrator") — при первом входе его нужно сменить. Ключ OpenRouter задаётся в Администрирование → OpenRouter (или переменной OPENROUTER_API_KEY). Без ключа редактор, проверки, симуляция и экспорт работают полностью — недоступен только ИИ.

Демо-проект shop-prod создаётся автоматически и содержит заведомые дефекты (Redis без реплики, асинхронная репликация очередей, канал без замера RTT) — на нём видно, как работают проверки.

Всё, включая тесты и линтеры, запускается в контейнерах — на хост ничего ставить не нужно:

make test        # cargo test (движок и сервер на настоящем PostgreSQL), typecheck, vitest и сборка фронта
make ha          # две реплики за nginx
make smoke       # сквозная проверка запущенного стека
make iac-check   # IaC эталонных архитектур против схем Kubernetes/CRD, Helm и Terraform

Проверка схем в CI

Схема архитектуры — такой же артефакт, как код: она лежит в репозитории и меняется вместе с ним. infra-architect check — тот же движок как линтер для конвейера: код выхода, пороги, база «только новое», принятые риски со сроком, отчёты в виде сводки задания, аннотаций GitHub и SARIF для code scanning. Ни базы данных, ни сети, ни запущенного сервера не нужно.

$ infra-architect check architecture/shop.json --recommend
shop-prod — architecture/shop.json
Оценка 91/100 · достоверность 98% · критично 0 · риск 3 · нет данных 1 · Доступность ≈ 99.97% (цель 99.95%) · Стоимость 736 810 ₽ в месяц

РИСК  Кэш «Redis» не реплицирован между площадками: при потере площадки он потеряется, сессии и корзины пропадут.
    HA-CACHE-01 · Кэш реплицирован между площадками
    Где: architecture/shop.json:257  redis-dc1 «Redis»
    Исправление: Добавить реплику «Redis» на площадку Площадка 3 · облако

Что улучшить в первую очередь
  1. Перевести «Kafka» → «Kafka» в синхронную репликацию  [DR-KFK-01]
     рисков 3 → 2 · оценка 91 → 95

Вывод сокращён: в полном — ещё два риска и вопрос без данных, с указанием, что заполнить.

# .github/workflows/architecture.yml: вердикт в сводке, аннотации на файле, находки во вкладке code scanning
- name: Проверить схемы
  run: |
    docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/work" -v "$GITHUB_STEP_SUMMARY:/summary" -w /work \
      ghcr.io/paffin/infra-architect:latest check architecture/*.json \
      --recommend --format github --report sarif=architecture.sarif --report markdown=/summary
- uses: github/codeql-action/upload-sarif@v3
  if: always() && hashFiles('architecture.sarif') != ''
  with: { sarif_file: architecture.sarif }

Образ публикует CI проекта из ветки main; пока его нет, соберите свой: docker build -t infra-architect .. Параметры, коды выхода, форматы отчётов и примеры для GitLab CI — в docs/CLI.md.

Под капотом

  • Движок (backend/crates/engine) — Rust без ввода-вывода: модель, каталог, правила, симулятор, ёмкость, доступность, стоимость, экспорт. Один и тот же код работает в сервере и в CLI.
  • Сервер (backend/crates/server) — axum, sqlx, tokio: HTTP API, аутентификация, проекты и версии, конвейер ИИ с задачами в базе, метрики Prometheus, CLI infra-architect check.
  • Интерфейс (frontend) — Vue 3, TypeScript, Vue Flow, Pinia: редактор, админ-панель, тесты (vitest, Playwright, axe-core).
  • Данные — PostgreSQL: проекты, версии, конфигурация (config_items), задачи ИИ, аудит. Правила, каталог, шаблоны, промпты и настройки — данные в базе, которые редактирует админ-панель.
  • Тесты без моков — настоящий PostgreSQL, настоящий движок, настоящий браузер; ответы моделей — записанные живые прогоны.
  • Надёжность самого сервиса — stateless-реплики, graceful shutdown, манифесты Kubernetes с PDB, HPA и spread по зонам (docs/DEPLOYMENT.md).

Границы и статус

  • Это не мониторинг и не управление живой инфраструктурой: движок работает с той моделью, которую вы описали или приняли от ИИ.
  • Оценки — это модель, а не измерения. Частоты отказов и SLA провайдеров — допущения (настройки движка); «достоверность оценки» показывает, на какую долю вопросов ответ опирается на ваши данные.
  • Каталог описывает типичное поведение продуктов. Если ваша установка отличается — поправьте в админ-панели; ошибку в каталоге можно исправить через issue или pull request: неверное утверждение об отказоустойчивости хуже отсутствующего продукта.
  • Версия 0.x: ядро работает, формат данных может меняться между минорными версиями; миграции выполняются при запуске (CHANGELOG.md).

Документация

Документ О чём
docs/FEATURES.md все возможности: что умеет каждая часть продукта
docs/ARCHITECTURE.md устройство системы, модель данных, потоки, масштабирование и отказоустойчивость
docs/CATALOG.md каталог продуктов: функции, варианты, версии и жизненный цикл, кворум и арбитры, обновление таблиц выпусков
docs/TEMPLATES.md эталонные архитектуры: что обещает каждая, как устроены, как добавить свою
docs/PLACEMENT.md размещение по площадкам: схемы, платформы, генератор для 1/2/3/5/10+ ЦОД, API, настройка
docs/RULES.md движок проверок: статусы, оценка, принятие рисков, исправления, список правил
docs/SIMULATION.md как симулятор считает отказы, RTO, RPO, кворум, ёмкость, трафик
docs/AVAILABILITY.md ожидаемая доступность: как считается, что настраивается, чего оценка не говорит
docs/RECOMMENDATIONS.md что улучшить в первую очередь: как исправления пробуются и ранжируются, настройки, API
docs/CLI.md проверка схем в конвейере: infra-architect check, коды выхода, форматы отчётов, примеры для GitHub Actions и GitLab CI
docs/IAC.md экспорт в Kubernetes, Helm и Terraform: как схема становится кодом, что генерируется и что нет
docs/LLM.md интеграция с OpenRouter, конвейер ИИ, приватность и контроль расходов
docs/CONFIGURATION.md переменные окружения, реестр настроек, конфигурационные элементы, бэкап конфигурации
docs/ADMIN.md руководство по админ-панели
docs/API.md HTTP API
docs/DEPLOYMENT.md Docker, Kubernetes, HA/DR самого сервиса, обновления, наблюдаемость
docs/PITFALLS.md подводные камни и как каждый из них решён
docs/DEVELOPMENT.md разработка, тесты, как добавить правило, компонент, архитектуру, настройку
docs/adr архитектурные решения

Документация поддерживается вместе с кодом: таблицы правил, настроек, каталога, версий и эталонных архитектур, а также цифры в этом файле генерируются из JSON-реестров (python3 deploy/gen-docs.py), и CI падает, если они разошлись с кодом.

Участие

Баг, неверный факт о продукте, идея или pull request — всё приветствуется. С чего начать, правила кодовой базы и что проверяется до слияния — в CONTRIBUTING.md; об уязвимостях — в SECURITY.md; участвуя, вы соглашаетесь с кодексом поведения.

Лицензия

Infra Architect — открытый проект под лицензией Apache License 2.0: код можно свободно использовать, в том числе в коммерческих целях, изменять и распространять. Лицензия содержит явное разрешение на использование патентов авторов и требует сохранять уведомления об авторстве (NOTICE). Вклад принимается на тех же условиях (раздел 5 лицензии).

Лицензии сторонних компонентов, которые входят в сборку, перечислены в THIRD_PARTY_LICENSES.md: файл генерируется (python3 deploy/licenses.py), а CI не пропустит зависимость с лицензией вне списка принятых (deploy/licenses.json). Названия продуктов в каталоге принадлежат их владельцам и приведены только для обозначения; сроки поддержки версий — данные endoflife.date.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages