Переведено с китайского оригинала. При расхождении приоритет у оригинала.

Confer — архитектура системы

Этот документ описывает целевую архитектуру, а не то, что реализовано. Сейчас gateway — это один процесс, одна инсталляция: таблица WebSocket-соединений, nonce-защита от повторов A2A и счётчики ограничения частоты живут в памяти процесса (ws/handler.ts, lib/nonce-cache.ts, middleware/rate-limit.ts).

Поэтому у gateway не может быть второй реплики. Добавление реплик молча ломает защиту от повторов A2A: повторённый запрос попадает на другую реплику, где таблица nonce пуста, и проходит. Плюс уведомления по WS не доходят до пользователей, подключённых к другой реплике, а порог ограничения частоты умножается на число реплик.

NATS и Redis, упомянутые ниже, — это план на случай горизонтального масштабирования; сегодня они не развёрнуты и ни к чему не подключены (удалены из docker-compose*.yml и env.ts 2026-08-07; до этого они были контейнерами, крутившимися вхолостую, и переменной окружения, которую никто не читал). Чтобы действительно масштабироваться горизонтально, сначала нужно перенести эти три состояния из памяти в общее хранилище — в первую очередь nonce, они критичны для безопасности.

Общая схема

┌────────────────────────────────────────────────────────────┐
│  Clients (Tauri 2.0)                                       │
│  iOS · Android · Windows · macOS · Linux                   │
└──────────────────────────┬─────────────────────────────────┘
                           │ WSS / HTTPS / SSE
                           ▼
┌────────────────────────────────────────────────────────────┐
│  Edge API Gateway  (Bun + Hono)                            │
│  Auth · Rate limit · Routing · WS fan-out                  │
└─────┬─────────────┬─────────────────┬────────────────┬─────┘
      │             │                 │                │
      ▼             ▼                 ▼                ▼
 ┌────────┐  ┌─────────────┐  ┌────────────┐  ┌──────────────┐
 │ Agent  │  │Conversation │  │ Identity & │  │ MCP / Tools  │
 │Runtime │  │     Hub     │  │A2A Gateway │  │  Connector   │
 └───┬────┘  └──────┬──────┘  └─────┬──────┘  └──────┬───────┘
     │              │               │                │
     ▼              ▼               ▼                ▼
┌──────────────────────────────────────────────────────────────┐
│  Data layer: PostgreSQL · Redis · NATS · Vector (Qdrant)·S3 │
└──────────────────────────────────────────────────────────────┘
       │                              │
       ▼                              ▼
 LLM providers              Other instances' Agents
 (Claude / GPT /            (federation via A2A
  DeepSeek / Qwen)           over HTTPS)

Принципы проектирования

Границы сервисов

1. Edge API Gateway

См. docs/05-api.md.

2. Agent Runtime

Каждому пользователю соответствует постоянно живущий экземпляр Агента.

3. Conversation Hub

4. Identity & A2A Gateway

Подробное устройство протокола — в docs/03-protocol.md.

5. MCP / Tools Connector

Слой данных

Компонент Для чего Состояние
PostgreSQL Пользователи, Агенты, разговоры, сообщения, разрешения, связи с пирами (основное хранилище) ✅ используется
Qdrant RAG долговременной памяти Агента, индекс баз знаний пользователя ✅ используется
S3-совместимое (MinIO) Хранение файлов баз знаний ✅ используется
Redis Сессии, присутствие, счётчики ограничения, кеш горячих данных ⬜ не развёрнут, понадобится только при горизонтальном масштабировании
NATS Streams Рассылка сообщений (user.{uid}.events) + очередь задач Agent Runtime ⬜ не развёрнут, понадобится только при горизонтальном масштабировании

Архитектура клиента

Покрытие платформ

Платформа Через
iOS Поддержка iOS в Tauri 2.0
Android Поддержка Android в Tauri 2.0
Windows Tauri 2.0
macOS Tauri 2.0
Linux Tauri 2.0

Одна кодовая база, никаких нативных запасных вариантов.

Плагин Claude Code

См. docs/06-claude-code-plugin.md.

Архитектура развёртывания

Одна инсталляция (личная / небольшая команда)

Реальный docker-compose.prod.yml (agent-runtime и identity — библиотеки внутри gateway, а не отдельные сервисы):

  - gateway   (сервис Bun, одна реплика — см. вводную заметку)
  - client    (фронтенд, раздаваемый nginx)
  - migrate   (разовая задача)
  - postgres
  - qdrant
  - minio

Развёртывание: docker compose -f docker-compose.prod.yml up -d — и всё работает.

Корпоративная инсталляция

Облако (собственное облако Confer)

Предварительное условие: сейчас gateway работает в одну реплику (состояние в процессе). Прежде чем ставить несколько, нужно перенести таблицу WS-соединений, A2A-nonce и счётчики ограничения в общее хранилище, иначе защита от повторов молча перестанет работать.

Федерация (между инсталляциями)

Любая инсталляция Confer — собственная или облачная — может общаться с другими по протоколу A2A.

[acme.com]              [vendor-x.com]            [confer.cloud]
 Agent A    <─── A2A ───> Agent B    <─── A2A ───> Agent C

Идентичность и обнаружение:

Наблюдаемость

Границы безопасности

Ключевые технические решения

Решение Выбор Альтернативы Причина
Язык бэкенда Bun + TypeScript Go SDK для MCP и A2A сделаны в первую очередь под TS; типы общие на всём стеке
Веб-фреймворк Hono Elysia, Fastify Лёгкий, быстрый, стабильная экосистема
Клиент Tauri 2.0 Flutter, Electron Одна кодовая база на пять платформ, безопасность Rust, небольшой размер
Основное хранилище PostgreSQL 18 MySQL Хорошая поддержка JSON, богатая расширяемость, pgvector при желании
Шина сообщений NATS Kafka, Redis Pub/Sub Лёгкая, с персистентностью и точной подпиской
Векторная база Qdrant Pinecone, pgvector Зрелая для собственного хостинга, написана на Rust, стабильная производительность
Идентичность DID:web DID:key, только OAuth Совместима с существующей веб-инфраструктурой, рекомендована NANDA
Протокол A2A + MCP + AgentFacts Собственный протокол Ставим на экосистему открытых протоколов
← Вернуться в Confer A2A · DID:web · RFC 9421 · NANDA