Архитектура: ядро, модули, MCP-шлюз и контуры
Разделение ответственности
Платформа сложена из трёх слоёв, и граница между ними жёсткая.
Ядро — сервис на Go. В нём живёт всё, что нельзя дублировать в каждом модуле: пользователи и организации, аутентификация, RBAC, лицензии, биллинг, реестр модулей и MCP-шлюз. Хранилище — PostgreSQL.
Модули — независимые сервисы. У каждого своя схема базы и свои миграции, своя бизнес-логика и свой набор MCP-инструментов. Модуль не ходит в чужие таблицы напрямую: если ему нужны данные соседа, он вызывает инструмент соседа через шлюз. Благодаря этому модуль можно выпускать, обновлять и лицензировать отдельно от остальных.
Фронтенд — веб-интерфейс на Next.js и мобильный клиент. Он не знает бизнес-логики модулей: страницы строятся из того, что модули сами о себе объявляют.
MCP-шлюз
MCP (Model Context Protocol) — общий язык, на котором разговаривают ядро, модули и ИИ-агенты. Инструмент модуля вызывается по имени вида <модуль>__<инструмент>, а весь трафик идёт через шлюз ядра.
Шлюз — не просто маршрутизатор, а место, где стоят проверки:
- Кто вызывает — пользователь, агент или другой модуль; личность подтверждена ядром, а не заявлена вызывающим.
- Есть ли право — RBAC-проверка по ролям и скоупам; по умолчанию запрет.
- Есть ли лицензия — двойной гейт: лицензия на ядро проверяется в шлюзе, лицензия на модуль — ещё раз самим модулем.
- Что произошло — вызов попадает в аудит-лог.
Обойти шлюз нельзя: модуль не принимает вызов, в котором нет доверенного контекста от ядра. Отсюда важное следствие — ИИ-агент физически не может сделать то, чего не может пользователь, от чьего имени он работает.
Самоописание модулей
Модуль обязан рассказать о себе платформе, и делает это через MCP-инструменты. Он объявляет свои блоки для холстов, свои сущности и поля, свою схему настроек и классы персональных данных, которые обрабатывает. Ядро и фронтенд строят по этим описаниям библиотеку блоков, страницы настроек и правила маскирования — руками ничего дописывать не нужно.
Контуры
Контур — это отдельная установка платформы со своей базой, своими лицензиями и своими данными. Облачный контур обслуживается вендором; коробочный ставится на инфраструктуре клиента и может работать в закрытой сети без выхода наружу. Лицензирование учитывает разницу: в коробке лицензия привязывается к аппаратному отпечатку контура.
Контуры можно связать между собой — см. «Федерацию» и «Развёртывание».
Стек
| Слой | Технологии |
|---|---|
| Ядро и модули | Go, PostgreSQL, Redis |
| Взаимодействие | MCP поверх HTTP, REST API ядра |
| Фронтенд | Next.js, React, Tailwind CSS |
| ИИ | Шлюз к LLM-провайдерам, векторный поиск в MOD-RAG |
| Инфраструктура | Docker, CI/CD, развёртывание в облаке или в контуре клиента |