Перейти к основному содержимому

Архитектура

Трёхуровневая архитектура Crawbl разделяет зоны ответственности и позволяет независимо масштабировать каждый слой. Эта страница — единый справочник по тому, как устроена платформа, как через неё проходят запросы и какие технологии лежат в основе каждого уровня.

Как работает Crawbl​

Simplified overview of how Crawbl works
Click diagram to zoom
1
Step 1

Пользователь задаёт вопрос

Пользователь отправляет запрос через любой клиент: мобильное приложение, REST API или WebSocket-соединение.

2
Step 2

Crawbl координирует работу

Уровень оркестрации получает запрос и определяет, что нужно сделать: маршрутизация, проверка разрешений, управление доступом к провайдерам.

3
Step 3

Агенты работают изолированно

AI-задачи выполняются в изолированных runtime-контейнерах. У каждого пользователя есть свой Agent Runtime — не общий процесс на всех.

Изоляция обеспечивает масштабируемость и контроль.

4
Step 4

Результаты возвращаются чётко

Результаты приходят в виде ответов, предложений или запросов на подтверждение. Пользователь видит итог, а не детали реализации.

Почему это важно
  • Обычный чат-бот отвечает один раз. Crawbl продолжает работать после первого ответа.
  • Один запрос может превратиться в цепочку действий, проверок подтверждений, сохранённого контекста и фоновой работы.
  • Это разница между инструментом, который говорит, и инструментом, который помогает довести дело до конца.

Обзор трёх уровней​

Three-layer view of the Crawbl platform
Click diagram to zoom

Уровень 1: Клиентский интерфейс​

Пользовательский уровень предоставляет несколько точек доступа:

ИнтерфейсНазначение
Мобильное приложениеОсновной пользовательский интерфейс (Flutter)
REST APIСинхронные операции, CRUD-действия
WebSocketСобытия в реальном времени, потоковые ответы

Все клиенты работают с одним бэкендом — нет отдельного бэкенда для мобильного приложения и отдельного для API. Когда ты добавляешь возможность в оркестратор, её получают все клиенты. У платформы единая граница безопасности на уровне API.

Весь клиентский трафик проходит через уровень оркестрации. Runtime-среды никогда не доступны напрямую снаружи.

Уровень 2: Уровень оркестрации​

Control Plane Layer Detail
Click diagram to zoom

Средний уровень — это Go-сервис, называемый оркестратором. Если в документации встречается термин "control plane" — это именно он: центральный бэкенд, координирующий всю остальную систему.

Аутентификация и авторизация

  • Проверка JWT-идентификации для пользователей мобильного приложения
  • Программный доступ через API-ключи
  • Разрешения в рамках рабочего пространства

Маршрутизация запросов

  • Направляет запросы к нужному Agent Runtime
  • Балансирует нагрузку между runtime-средами
  • Обрабатывает отказы и восстановление

LLM-медиация

  • Выбор провайдера (Anthropic, OpenAI, Google и др.)
  • Контроль затрат и отслеживание использования
  • Rate limiting и управление квотами

Integration Hub

  • Управление OAuth-токенами для внешних сервисов
  • Учётные данные хранятся в сервисе управляемых секретов
  • Обработка webhook-ов для внешних событий

Аудит и соответствие требованиям

  • Полное логирование запросов
  • Проверка прав доступа
  • Возможности формирования отчётов о соответствии

Оркестратор взаимодействует с Agent Runtime через внутренний HTTP и никогда не открывает их в публичный интернет. Публичный трафик заканчивается на уровне ingress, а оркестратор находит нужный runtime через внутреннюю сеть кластера.

Уровень 3: Runtime-уровень​

Runtime Layer Detail
Click diagram to zoom

Нижний уровень — это место, где реально работают AI-агенты. Каждый пользователь получает изолированный контейнер Agent Runtime — один небольшой runtime на пользователя с собственной памятью и хранилищем, а не один огромный общий процесс для всех.

СвойствоРеализация
ИзоляцияОбщее runtime-пространство с ClusterIP-сервисами для каждого swarm, изолированными через backend-медиацию
БезопасностьНет прямого доступа в интернет, всё через оркестратор
СостояниеПостоянные тома для данных рабочего пространства
МасштабированиеГоризонтальное автомасштабирование подов по запросу
ВосстановлениеАвтоматический перезапуск при сбое, состояние сохраняется

Вспомогательная инфраструктура:

  • PostgreSQL для данных всей платформы (пользователи, рабочие пространства, беседы)
  • Redis для fan-out событий в реальном времени (Socket.IO pub/sub, индикаторы набора текста, новые сообщения)

Runtime-уровень масштабируется независимо от уровня оркестрации. Всплеск активных агентов не требует расширения ресурсов оркестратора, и каждый runtime-под достаточно мал, чтобы сотни из них поместились на скромном кластере.

Паттерны взаимодействия​

Поток запросов​

Client requests entering the orchestrator and moving through the platform
Click diagram to zoom

Вызов инструментов​

Когда агенту нужно использовать внешний инструмент:

  1. Agent Runtime отправляет запрос на инструмент оркестратору через MCP
  2. Оркестратор проверяет разрешения и выполняет инструмент против внешнего сервиса
  3. Результат возвращается в Agent Runtime для контекста

Такая медиация гарантирует, что все внешние вызовы логируются и доступны для аудита, разрешения пользователей применяются в единой точке, а секреты никогда не покидают control plane.

Почему это разделение важно​

1
Step 1

Изоляция безопасности

Поды агентов никогда не обращаются в интернет напрямую. Оркестратор опосредует всё, поэтому ты можешь проверять и контролировать весь внешний доступ в одном месте.

2
Step 2

Независимое масштабирование

Control plane и runtime-уровень масштабируются по отдельности. Всплеск активных агентов не требует расширения ресурсов оркестратора.

3
Step 3

Гибкость клиентов

Новые интерфейсы — Slack-бот, расширение VS Code, CLI — должны лишь обращаться к API оркестратора. Изменения на уровне runtime не нужны.

4
Step 4

Переносимость между облаками

Runtime-уровень — это чистый Kubernetes. Смена облачного провайдера означает изменение конфигурации кластера, а не переписывание логики агентов.

Почему важно это разделение
  • Приложению нужно только собрать запрос и показать результат.
  • Платформа берёт на себя сложные части: маршрутизацию работы, проверку подтверждений и хранение состояния.
  • Это упрощает продукт и делает платформу проще в развитии со временем.

Технологический стек​

Уровень оркестрации (Control Plane)​

КомпонентТехнологияНазначение
ЯзыкGo 1.25+Высокая производительность, строгая типизация, отличная работа с конкурентностью
ФреймворкКастомный движок оркестрацииПлагинная архитектура для расширяемости
APIREST + WebSocketПолноценная аутентификация, события в реальном времени
ИнфраструктураKubernetes + Infrastructure as CodeОблачно-независимые провизионирование и оркестрация
GitOpsНепрерывное развёртывание через GitOpsДекларативное управление, автоматические обновления

Runtime-уровень (Data Plane)​

КомпонентТехнологияНазначение
Agent RuntimeCrawbl Agent Runtime (Go + ADK-Go)Мультиагентное выполнение, gRPC-сервер на порту 42618
ИзоляцияОбщее runtime-пространство, ClusterIP-сервисы для каждого swarmГраницы безопасности на уровне пода через backend-медиацию
МасштабированиеHPAГоризонтальное автомасштабирование подов по нагрузке
ХранилищеПостоянные томаСостояние runtime и персистентность рабочего пространства

Вспомогательная инфраструктура​

СервисТехнологияНазначение
База данныхPostgreSQLМетаданные платформы и пользовательские данные
КешированиеRedisОбработка событий в реальном времени, управление сессиями
Обмен сообщениямиSocket.IOВзаимодействие между компонентами в реальном времени
СекретыСервис управляемых секретовУправление учётными данными с автоматической синхронизацией
НаблюдаемостьЛогирование + мониторингПолноценная трассировка и оповещения

Обоснование технологических решений​

Почему Go для оркестратора?

  • Компилируемый, эффективный, с низкой задержкой
  • Горутины обрабатывают тысячи одновременных соединений
  • Строгая типизация выявляет ошибки на этапе компиляции
  • Развёртывание одним бинарником, быстрый старт

Почему Go для Agent Runtime?

  • Distroless-образ ~26 МБ; сотни подов умещаются на скромном кластере
  • ADK-Go предоставляет мультиагентный граф и модель делегирования SubAgent
  • gRPC bidirectional streaming между оркестратором и runtime со строгой типизацией
  • Один бинарник, быстрый старт, никакого интерпретатора или VM

Почему Kubernetes?

  • Namespace-ы обеспечивают границы безопасности для каждого тенанта
  • Встроенное автомасштабирование и балансировка нагрузки
  • Работает в любом облаке или on-premises
  • Зрелый инструментарий для GitOps, управления секретами и наблюдаемости