Перейти к содержанию

01. Архитектура

1. Принципы

  • Enterprise-first, микросервисы с первого дня. Монолит как промежуточный этап не рассматриваем (обоснование отклонения — ниже).
  • Разделение Control Plane / Data Plane. Управление и рантайм масштабируются и защищаются независимо.
  • Bounded contexts. Границы сервисов проводятся по смысловым областям домена.
  • Асинхронность по умолчанию. Взаимодействие через шину событий; синхронные вызовы — через контрактные API.
  • Сага вместо распределённых транзакций. Согласованность между сервисами — через компенсации.
  • IaC + Kubernetes + GitOps. Вся инфраструктура декларативна и воспроизводима.
  • Observability и HA — базовые требования.

Почему не модульный монолит (отклонённая альтернатива)

Монолит дешевле и быстрее на старте, но требование бизнеса — «сразу под enterprise и масштаб». Переход монолит → микросервисы позже несёт риск и объём работы по декомпозиции, которых мы избегаем, начиная сразу с микросервисов. Компромисс (более сложный и дорогой старт) принят осознанно.

2. Верхнеуровневая структура (C4: контейнеры)

flowchart TB
    subgraph edge [Периметр]
        widget[Web-виджет / SDK]
        api[API Gateway + Auth]
    end

    subgraph cp [Control Plane - управление]
        admin[Admin / Конструктор агентов]
        tenantsvc[Tenant & Identity Service]
        billing[Billing & Quotas]
        config[Agent Config Service]
        analytics[Analytics & Metrics]
    end

    subgraph dp [Data Plane - рантайм]
        channels[Channel Service]
        orch[Agent Orchestrator]
        llmgw[LLM Gateway]
        rag[RAG / Knowledge Service]
        integ[Integration Service]
        sched[Scheduling Service]
    end

    subgraph infra [Инфраструктура]
        bus[(Event Bus - Kafka/NATS)]
        pg[(PostgreSQL per-tenant)]
        vec[(Qdrant - вектор-БД)]
        redis[(Redis)]
        obj[(S3 object storage)]
        gpu[GPU-пулы: Qwen на vLLM]
        cloudllm[Облачный Qwen API - фолбэк]
    end

    widget --> api
    api --> channels
    api --> admin
    admin --> config
    config --> orch
    billing --> orch
    channels --> orch
    orch --> llmgw
    llmgw --> gpu
    llmgw --> cloudllm
    orch --> rag
    rag --> vec
    orch --> integ
    orch --> sched
    integ --> extcrm[Внешние CRM / системы]
    orch -. события .-> bus
    bus -. события .-> analytics
    orch --> pg
    orch --> redis
    rag --> obj

3. Сервисы и их зоны ответственности (bounded contexts)

Control Plane

  • Tenant & Identity Service — тенанты, пользователи, роли (RBAC), API-ключи, OAuth/OIDC. Провижининг ресурсов тенанта на онбординге.
  • Agent Config Service — хранение, валидация и версионирование конфигов агентов; blueprints; hot-reload в рантайм.
  • Billing & Quotas — тарифы, учёт потребления (токены, диалоги, показы), лимиты и rate-limiting.
  • Admin / Конструктор агентов — UI и API для создания/настройки агентов в пару кликов.
  • Analytics & Metrics — бизнес-метрики (конверсия лид→показ, no-show, время ответа, стоимость показа) на основе событий из шины.

Data Plane

  • Channel Service — приём/отправка сообщений через адаптеры каналов (web, WhatsApp, Telegram, email, телефония). Нормализация в единый формат сообщения. Единый профиль контакта (identity resolution) для склейки каналов.
  • Agent Orchestrator — ядро: конечный автомат диалога, планирование, вызов инструментов (function calling), управление состоянием разговора, политика эскалации на человека.
  • LLM Gateway — маршрутизация запросов по ярусам моделей, батчинг, лимиты, фолбэк на облако (см. 05).
  • RAG / Knowledge Service — ингест и индексация базы знаний тенанта, семантический поиск, актуализация (TTL/переиндексация).
  • Integration Service — коннекторы к внешним системам (CRM и т.д.), вебхуки, маппинг полей (см. 04).
  • Scheduling Service — слоты, доступность менеджеров/объектов, назначение показа, напоминания, обработка неявок.

4. Поток обработки лида (runtime)

flowchart LR
    in[Входящее сообщение] --> ch[Channel Service]
    ch --> orch[Orchestrator]
    orch --> guard{Guardrails и антиспам}
    guard -->|мусор| drop[Отклонить / пометить]
    guard -->|ок| route[LLM Gateway: роутинг]
    route -->|простое| small[Малая модель]
    route -->|сложное| brain[Основной мозг 27-35B]
    brain --> ragq[(RAG)]
    small --> decide[Решение / действие]
    brain --> decide
    decide -->|нужен показ| sched[Scheduling]
    decide -->|данные в CRM| integ[Integration Service]
    decide -->|нужен человек| esc[Эскалация менеджеру]
    sched --> reply[Ответ в канал]
    integ --> reply
    esc --> reply

5. Взаимодействие сервисов

  • Синхронно (gRPC/REST через API Gateway): пользовательские запросы, где нужен немедленный ответ (сообщение → ответ агента).
  • Асинхронно (шина событий Kafka/NATS): доменные события (lead.created, showing.scheduled, handoff.completed) — для аналитики, биллинга, интеграций, уведомлений. Развязывает сервисы и повышает устойчивость.
  • Саги: многошаговые бизнес-операции (обработка лида → сделка в CRM → показ → подтверждение) с компенсациями при сбое шага.

6. Отказоустойчивость

  • HA: минимум 2 реплики каждого сервиса, кластер PostgreSQL с репликами, реплицированные топики шины.
  • Circuit breaker + retry на всех внешних вызовах (CRM, каналы, облачный LLM).
  • Graceful degradation: недоступен RAG → агент отвечает без него; недоступна аналитика → диалоги продолжаются.
  • Фолбэк инференса: локальный GPU недоступен/перегружен → LLM Gateway переключает на облачный Qwen API.

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

  • Языки/рантайм: Python (агент/ML-часть, оркестрация, RAG), Go/TypeScript (высоконагруженные сервисы каналов/шлюзов) — по контексту.
  • Оркестрация LLM-логики: LangGraph-подобный подход или собственный конечный автомат.
  • Serving LLM: vLLM / SGLang.
  • Данные: PostgreSQL (per-tenant), Qdrant (вектор-БД), Redis (кэш/состояние), S3-совместимое объектное хранилище.
  • Шина: Kafka или NATS JetStream.
  • Инфраструктура: Kubernetes, Terraform (IaC), GitOps (ArgoCD/Flux).
  • Observability: OpenTelemetry + Prometheus + Grafana + централизованные логи.
  • API Gateway / Auth: OAuth2/OIDC, per-tenant API keys, rate-limiting.