Манитон Docs

Архитектура платформы

Общая архитектура, компоненты и взаимодействие

Архитектура платформы

Платформа Манитон построена по микросервисной архитектуре с событийно-ориентированным подходом.

Общая схема

Loading diagram...

Слои архитектуры

1. Presentation Layer

Фронтенд-приложения обеспечивают пользовательский интерфейс.

Web Application (Next.js :3000)

  • Технология: Next.js 14, React 18, TypeScript
  • Стейт-менеджмент: Zustand
  • UI библиотека: shadcn/ui + TailwindCSS
  • Аутентификация: Better Auth
  • Функции:
    • Регистрация и KYC
    • Управление кошельком
    • Просмотр истории операций
    • Управление профилем

Documentation App (Next.js :3001)

  • Технология: Next.js 14, React 18, TypeScript
  • UI библиотека: Nextra + TailwindCSS
  • Функции:
    • API документация
    • Архитектурные гайды
    • Интеграция с Mermaid диаграммами

Mobile App (Запланирован)

  • Технология: React Native, Expo (в планах)
  • Навигация: React Navigation
  • Функции:
    • Мобильный кошелек
    • QR-коды для СБП
    • Push-уведомления
    • Биометрия

2. Connect RPC Gateway Layer

Connect RPC Gateway обеспечивает единую точку входа с type-safe коммуникацией.

Connect RPC (gRPC over HTTP/2)

  • Протокол: gRPC over HTTP/2
  • Сериализация: Protobuf
  • Функции:
    • Type-safe RPC вызовы
    • Streaming поддержка
    • Interceptors (auth, logging, metrics)
    • Автоматическая генерация клиентов

Ingress (Kubernetes)

  • Технология: Nginx Ingress Controller
  • Функции:
    • TLS termination
    • Rate limiting
    • Request routing к сервисам
    • Circuit breaking
    • Request/Response logging

3. Microservices Layer

Auth Service (Порт 3010)

Ответственности:

  • Аутентификация и авторизация (Better Auth)
  • KYC-процессы и верификация
  • Контроль лимитов и проверка санкций
  • Управление пользователями и ролями
  • Connect RPC Gateway для Identity домена

Технологии:

  • NestJS + TypeScript
  • PostgreSQL (auth_db) + Drizzle ORM
  • Redis (сессии и кэш)
  • Better Auth (JWT + 2FA)
  • Kafka события (identity.events)
  • Connect RPC (gRPC over HTTP/2)

Домены:

  • Identity: пользователи, KYC, лимиты, санкции
  • AuthZ: RBAC, проверки разрешений
  • Gateway: прокси в другие сервисы

CFA Core Service (Порт 3020)

Ответственности:

  • Управление жизненным циклом ЦФА
  • Выпуск и погашение токенов
  • Перевод прав требования
  • Интеграция с блокчейном через Besu Connector
  • Проверка целостности операций

Технологии:

  • NestJS + TypeScript
  • PostgreSQL (cfa_db) + Drizzle ORM
  • Kafka события (cfa.events)
  • Viem (Ethereum библиотека)
  • Connect RPC клиенты

Особенности:

  • Event-driven архитектура
  • Взаимодействие с Besu Connector
  • Валидация операций в реальном времени

Ledger Service (Порт 3030)

Ответственности:

  • Двойная бухгалтерия (double entry)
  • Управление счетами и суб-счетами
  • Операционный учет и холды
  • История операций и проводки
  • Connect RPC Gateway для Ledger домена

Технологии:

  • NestJS + TypeScript
  • PostgreSQL (ledger_db) + Drizzle ORM
  • Redis (кэш счетов и операций)
  • Kafka события (ledger.events)
  • Connect RPC (gRPC over HTTP/2)

Особенности:

  • Unit of Work паттерн
  • Атомарные проводки
  • Event sourcing для операций

Besu Connector (Go Service)

Ответственности:

  • Абстракция над блокчейном Hyperledger Besu
  • Управление транзакциями и подписью
  • Мониторинг блоков и событий
  • Проверка хэшей и целостности
  • HTTP API для внешних запросов

Технологии:

  • Go (Golang)
  • Kafka события (besu.events)
  • Web3Signer интеграция
  • HTTP сервер (mux/router)
  • Ethereum JSON-RPC

Особенности:

  • Отдельный Go процесс для блокчейна
  • HSM интеграция через Web3Signer
  • Event-driven обработка блоков
  • Идемпотентные операции

4. Event Layer

Kafka

Топики:

ТопикНазначениеРетеншнСтатус
maniton.identity.events.v1События пользователей7 дней✅ Активен
maniton.ledger.events.v1События бухгалтерии30 дней✅ Активен
maniton.cfa.events.v1События ЦФА30 дней✅ Активен
maniton.besu.events.v1События блокчейна7 дней✅ Активен
maniton.external.events.v1Внешние события7 дней🔄 В разработке
maniton.payments.events.v1События платежей30 дней📋 Запланирован
maniton.market.events.v1События рынка7 дней📋 Запланирован
maniton.dividends.events.v1Дивидендные события30 дней📋 Запланирован
maniton.audit.logs.v1Аудит логи365 дней✅ Активен

Формат событий:

// CloudEvents envelope aligned with the protobuf format specification
message CloudEvent {
  string id = 1;  // UUID
  string source = 2;  // Source service
  string spec_version = 3;  // CloudEvents spec version
  string type = 4;  // Event type
  google.protobuf.Timestamp time = 5;  // Event time
  string subject = 6;  // Subject identifier
  map<string, CloudEventAttributeValue> attributes = 7;  // Extensions
  string data_content_type = 8;  // Content type
  string data_schema = 9;  // Schema URI
  oneof data {
    bytes binary_data = 10;  // Binary protobuf
    string text_data = 11;  // Text data
    google.protobuf.Any proto_data = 12;  // Typed protobuf
  }
}

// Envelope for internal event transport with correlation context
message EventEnvelope {
  CloudEvent event = 1;  // CloudEvent payload
  maniton.common.v1.RequestContext context = 2;  // Request context
  maniton.events.v1.KafkaTopic topic = 3;  // Topic enum
  string topic_name = 4;  // Topic string
  string schema_subject = 5;  // Schema registry subject
}

5. Data Layer

PostgreSQL

Базы данных:

СервисБаза данныхНазначение
Authauth_dbПользователи, KYC, лимиты
CFA Corecfa_dbОперации, инструменты
Ledgerledger_dbСчета, проводки, холды
Paymentspayments_dbПлатежи, выплаты

Схемы:

-- Auth Service
CREATE TABLE users (
  id UUID PRIMARY KEY,
  email VARCHAR(255) UNIQUE,
  phone VARCHAR(32) UNIQUE,
  kyc_status VARCHAR(32),
  risk_level VARCHAR(32),
  created_at TIMESTAMP,
  updated_at TIMESTAMP
);

-- CFA Core Service
CREATE TABLE operations (
  id UUID PRIMARY KEY,
  type VARCHAR(32),
  status VARCHAR(32),
  user_id UUID,
  amount DECIMAL(20, 8),
  created_at TIMESTAMP
);

-- Ledger Service
CREATE TABLE accounts (
  id UUID PRIMARY KEY,
  user_id UUID,
  type VARCHAR(32),
  created_at TIMESTAMP
);

CREATE TABLE sub_accounts (
  id UUID PRIMARY KEY,
  account_id UUID,
  instrument_id VARCHAR(64),
  balance DECIMAL(20, 8),
  status VARCHAR(32)
);

CREATE TABLE postings (
  id UUID PRIMARY KEY,
  operation_id UUID,
  debit_subaccount_id UUID,
  credit_subaccount_id UUID,
  amount DECIMAL(20, 8),
  created_at TIMESTAMP
);

Redis

Использование:

  • Сессии пользователей
  • Кэш запросов
  • Rate limiting
  • Order book (Market Service)
  • Distributed locks

MinIO

Использование:

  • Хранение документов (паспорт, селфи)
  • Бэкапы базы данных
  • Логи и метрики

6. Blockchain Layer

Hyperledger Besu

Конфигурация:

  • Консенсус: QBFT
  • Валидаторы: 4
  • Блок: 2 секунды
  • Газ: Free (private network)
  • Приватные транзакции: Privacy Groups

Смарт-контракты:

// ERC-20 Token
contract CfaToken is ERC20 {
    constructor() ERC20("CFA-RUB", "CFA-RUB") {}

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function burn(address from, uint256 amount) public onlyOwner {
        _burn(from, amount);
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override returns (bool) {
        // DLT-слоя логика
        _transfer(from, to, amount);
        return true;
    }
}

7. External Integrations Layer

СБП (Система быстрых платежей)

Функции:

  • QR-коды для оплаты
  • Вебхуки о статусах
  • Сверка транзакций

API:

interface SbpClient {
  createQR(amount: number): Promise<{ qrPayload: string }>;
  getPaymentStatus(paymentId: string): Promise<PaymentStatus>;
  reconcile(date: Date): Promise<ReconciliationReport>;
}

СМЭВ (Система межведомственного электронного взаимодействия)

Функции:

  • Проверка паспортных данных
  • Проверка ИНН
  • Проверка СНИЛС

API:

interface SmevClient {
  verifyPassport(passportNumber: string): Promise<PassportInfo>;
  verifyInn(inn: string): Promise<InnInfo>;
  verifySnils(snils: string): Promise<SnilsInfo>;
}

External Partners

Функции:

  • Вывод за рубеж
  • Конвертация валют
  • Крипто-выводы

API:

interface ExternalPartnerClient {
  createOutboundPayment(details: PaymentDetails): Promise<PaymentTask>;
  getPaymentStatus(taskId: string): Promise<PaymentStatus>;
  getExchangeRate(from: string, to: string): Promise<Rate>;
}

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

Пример: Пополнение баланса

Loading diagram...

Безопасность

Аутентификация

  • JWT токены: Access (15 мин), Refresh (30 дней)
  • Алгоритм: RS256
  • Хранение ключей: HSM
  • 2FA: TOTP / SMS / Biometrics

Авторизация

  • RBAC: Роли и разрешения
  • ABAC: Атрибутный доступ
  • Policy-Based: Политики доступа

Шифрование

  • TLS 1.3: Весь трафик
  • AES-256-GCM: Данные в покое
  • RSA-4096: Асимметричное шифрование
  • HMAC-SHA256: Подписи событий

Аудит

  • WORM хранилище: Неизменяемые логи
  • Цепочка хэшей: Проверка целостности
  • ГОСТ Р 34.11-2012: Хэширование

Масштабируемость

Горизонтальное масштабирование

  • Stateless сервисы: Auth, CFA Core, Ledger
  • Stateful сервисы: Kafka, PostgreSQL (read replicas)
  • Балансировка: Kubernetes Service / Ingress

Вертикальное масштабирование

  • CPU/Memory: Pod limits
  • Storage: PVC expansion
  • Network: CNI plugins

Кэширование

  • Redis: Горячие данные
  • PostgreSQL: Query cache
  • CDN: Статические ресурсы

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

Redundancy

  • Replicas: 2+ для каждого сервиса
  • Zones: Multi-AZ deployment
  • Regions: Multi-region (DR)

Circuit Breaking

  • Hystrix: Circuit breaker patterns
  • Timeouts: Максимальное время ожидания
  • Retries: Экспоненциальный backoff

Backup & Recovery

  • PostgreSQL: WAL archiving + PITR
  • MinIO: Replication + Versioning
  • Besu: Snapshot + State trie

Мониторинг

Метрики

  • Prometheus: Сбор метрик
  • Grafana: Визуализация
  • Alertmanager: Алерты

Логи

  • Loki: Агрегация логов
  • Grafana: Поиск и анализ
  • ELK Stack: Дополнительная аналитика

Трейсинг

  • OpenTelemetry: Распределенный трейсинг
  • Jaeger: Визуализация трейсов
  • Zipkin: Хранение трейсов

Инфраструктура развертывания

Kubernetes Cluster

Компоненты:

  • Control Plane: Kubernetes API Server, etcd, Scheduler, Controller Manager
  • Worker Nodes: 3+ нод с container runtime
  • CNI: Calico или Flannel для networking
  • CSI: для PVC с PostgreSQL и Redis

Сервисы в кластере:

  • Auth Service: Deployment + Service + Ingress
  • CFA Core Service: Deployment + Service + Ingress
  • Ledger Service: Deployment + Service + Ingress
  • Besu Connector: Deployment + Service + Ingress
  • Frontend Apps: Deployment + Service + Ingress
  • Базы данных: StatefulSet для PostgreSQL, Deployment для Redis
  • Kafka: StatefulSet (KRaft mode)
  • Besu: StatefulSet (4 validator ноды)
  • Monitoring: Prometheus, Grafana, Loki

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

Метрики

  • Prometheus: Сбор метрик с всех сервисов
  • Grafana: Дашборды и алерты
  • Alertmanager: Уведомления о проблемах

Логи

  • Loki: Агрегация логов
  • Promtail: Collection агенты на нодах
  • Grafana: Поиск и анализ логов

Трейсинг

  • OpenTelemetry: Распределенный трейсинг
  • Jaeger: Визуализация трейсов

CI/CD

Pipeline

  1. Commit: Git push
  2. Build: Docker build
  3. Test: Unit + Integration + E2E
  4. Scan: Security + Dependency
  5. Push: Registry push
  6. Deploy: Helm upgrade
  7. Verify: Smoke tests

Environments

  • Development: Локальная разработка
  • Staging: Тестовое окружение
  • Production: Продакшн

Дополнительные ресурсы

On this page