Архитектура платформы
Общая архитектура, компоненты и взаимодействие
Архитектура платформы
Платформа Манитон построена по микросервисной архитектуре с событийно-ориентированным подходом.
Общая схема
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
Базы данных:
| Сервис | База данных | Назначение |
|---|---|---|
| Auth | auth_db | Пользователи, KYC, лимиты |
| CFA Core | cfa_db | Операции, инструменты |
| Ledger | ledger_db | Счета, проводки, холды |
| Payments | payments_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
- Commit: Git push
- Build: Docker build
- Test: Unit + Integration + E2E
- Scan: Security + Dependency
- Push: Registry push
- Deploy: Helm upgrade
- Verify: Smoke tests
Environments
- Development: Локальная разработка
- Staging: Тестовое окружение
- Production: Продакшн