855 lines
27 KiB
Markdown
855 lines
27 KiB
Markdown
# FinTech GitOps CI/CD - Архитектура решения
|
||
|
||
**Версия:** 1.0
|
||
**Дата:** Январь 2026
|
||
**Целевая аудитория:** Архитекторы, DevOps, Инфраструктура, Безопасность
|
||
|
||
---
|
||
|
||
## Содержание
|
||
|
||
1. [Общая архитектура](#1-общая-архитектура)
|
||
2. [Сетевая архитектура](#2-сетевая-архитектура)
|
||
3. [Зоны и их назначение](#3-зоны-и-их-назначение)
|
||
4. [Потоки данных](#4-потоки-данных)
|
||
5. [High Availability и масштабирование](#5-high-availability-и-масштабирование)
|
||
6. [Disaster Recovery](#6-disaster-recovery)
|
||
|
||
---
|
||
|
||
## 1. Общая архитектура
|
||
|
||
### 1.1 Принципы проектирования
|
||
|
||
**Defense in Depth:**
|
||
Многоуровневая защита с изоляцией на каждом уровне:
|
||
- Сетевая сегментация через VLAN
|
||
- Firewall между всеми зонами
|
||
- Application-level authentication и authorization
|
||
- Encryption at rest и in transit
|
||
- Audit logging на всех уровнях
|
||
|
||
**Least Privilege:**
|
||
Минимальные необходимые права для каждого компонента:
|
||
- Service accounts с ограниченными permissions
|
||
- Network access только к необходимым endpoints
|
||
- Time-bound credentials где возможно
|
||
- Регулярная ротация secrets
|
||
|
||
**Immutable Infrastructure:**
|
||
Инфраструктура как код, изменения только через Git:
|
||
- Нет ручных изменений на серверах
|
||
- Все изменения version controlled
|
||
- Reproducible deployments
|
||
- Easy rollback через Git history
|
||
|
||
**Observability:**
|
||
Полная видимость всех процессов:
|
||
- Централизованное логирование
|
||
- Метрики со всех компонентов
|
||
- Distributed tracing для запросов
|
||
- Audit trail для compliance
|
||
|
||
### 1.2 Логические слои
|
||
|
||
**Presentation Layer (User Interface):**
|
||
- Portainer UI для визуального управления Swarm
|
||
- Grafana для дашбордов и метрик
|
||
- Jenkins Blue Ocean для CI/CD визуализации
|
||
- Ollama web interface для AI взаимодействия
|
||
- Gitea web UI для repository management
|
||
|
||
**API Layer:**
|
||
- Docker Swarm API для управления кластером
|
||
- Harbor API для registry операций
|
||
- Gitea API для Git operations
|
||
- Jenkins API для trigger builds
|
||
- Prometheus API для метрик
|
||
- MCP Server API для AI интеграции
|
||
|
||
**Service Layer (Business Logic):**
|
||
- GitOps Operator - автоматическая синхронизация
|
||
- Jenkins pipelines - CI/CD логика
|
||
- Harbor webhooks - уведомления о новых образах
|
||
- AlertManager - правила для алертов
|
||
- AI models - обработка запросов
|
||
|
||
**Data Layer:**
|
||
- PostgreSQL - реляционные данные
|
||
- Git repositories - код и конфигурации
|
||
- Harbor storage - Docker образы
|
||
- Prometheus TSDB - временные ряды метрик
|
||
- Loki - логи
|
||
- Vector DB - embeddings для AI
|
||
|
||
**Infrastructure Layer:**
|
||
- Docker Swarm - orchestration platform
|
||
- Overlay networks - service communication
|
||
- Shared storage - persistent data
|
||
- Backup systems - disaster recovery
|
||
|
||
---
|
||
|
||
## 2. Сетевая архитектура
|
||
|
||
### 2.1 VLAN сегментация
|
||
|
||
**VLAN 10 - Management & CI/CD Zone:**
|
||
- Subnet: 10.10.10.0/24
|
||
- Gateway: 10.10.10.1
|
||
- Компоненты: Gitea, Jenkins, Harbor, GitOps Operator, Portainer
|
||
- Доступ: Только через VPN с MFA
|
||
- Изоляция: Строгий firewall на границе
|
||
|
||
**VLAN 20 - Docker Swarm Cluster Zone:**
|
||
- Subnet: 10.20.0.0/16 (для большого количества containers)
|
||
- Manager subnet: 10.20.1.0/24
|
||
- Worker subnet: 10.20.2.0/23
|
||
- Gateway: 10.20.0.1
|
||
- Компоненты: Swarm managers, workers, overlay networks
|
||
- Доступ: Только из Management zone и Monitoring zone
|
||
- Изоляция: Encrypted overlay network внутри
|
||
|
||
**VLAN 30 - AI & Analytics Zone:**
|
||
- Subnet: 10.30.10.0/24
|
||
- Gateway: 10.30.10.1
|
||
- Компоненты: Ollama, MCP Server, Vector Database
|
||
- Доступ: Read-only к источникам данных
|
||
- Изоляция: Не может инициировать изменения в других зонах
|
||
|
||
**VLAN 40 - Monitoring & Logging Zone:**
|
||
- Subnet: 10.40.10.0/24
|
||
- Gateway: 10.40.10.1
|
||
- Компоненты: Prometheus, Grafana, Loki, AlertManager
|
||
- Доступ: Read-only metrics collection
|
||
- Изоляция: Не может управлять компонентами
|
||
|
||
**VLAN 50 - Data & Database Zone:**
|
||
- Subnet: 10.50.0.0/16
|
||
- Infrastructure DB subnet: 10.50.10.0/24
|
||
- Application DB subnet: 10.50.20.0/23
|
||
- Storage subnet: 10.50.30.0/24
|
||
- Gateway: 10.50.0.1
|
||
- Компоненты: PostgreSQL, Application databases, Shared storage
|
||
- Доступ: Строго контролируемый, encrypted connections
|
||
- Изоляция: Самая строгая, audit всех подключений
|
||
|
||
**VLAN 60 - Backup & DR Zone:**
|
||
- Subnet: 10.60.10.0/24
|
||
- Gateway: 10.60.10.1
|
||
- Компоненты: Backup server, long-term storage
|
||
- Доступ: Write-only для backup agents, read для recovery
|
||
- Изоляция: Offline storage, air-gapped где возможно
|
||
|
||
### 2.2 Firewall правила
|
||
|
||
**Принцип:** Deny all, allow explicitly needed
|
||
|
||
**Management VLAN → Swarm VLAN:**
|
||
```
|
||
Source: 10.10.10.40 (GitOps Operator)
|
||
Destination: 10.20.1.0/24 (Swarm Managers)
|
||
Ports: 2377/tcp (cluster management)
|
||
Action: ALLOW
|
||
Logging: YES
|
||
|
||
Source: 10.10.10.50 (Portainer)
|
||
Destination: 10.20.1.0/24 (Swarm Managers)
|
||
Ports: 2375/tcp (Docker API over TLS)
|
||
Action: ALLOW
|
||
Logging: YES
|
||
|
||
All other traffic: DENY
|
||
```
|
||
|
||
**Swarm VLAN → Harbor (Management VLAN):**
|
||
```
|
||
Source: 10.20.0.0/16 (All Swarm nodes)
|
||
Destination: 10.10.10.30 (Harbor)
|
||
Ports: 443/tcp, 5000/tcp (HTTPS, Docker registry)
|
||
Protocol: TLS 1.3 with mutual authentication
|
||
Action: ALLOW
|
||
Logging: YES
|
||
|
||
All other traffic: DENY
|
||
```
|
||
|
||
**AI VLAN → Data Sources:**
|
||
```
|
||
Source: 10.30.10.20 (MCP Server)
|
||
Destination: Multiple (через MCP connectors)
|
||
Ports: Varies (SSH 22, HTTPS 443, PostgreSQL 5432, etc.)
|
||
Access: READ-ONLY
|
||
Authentication: Service account per destination
|
||
Logging: ALL QUERIES LOGGED
|
||
Action: ALLOW with rate limiting
|
||
|
||
Write operations: DENY
|
||
```
|
||
|
||
**Monitoring VLAN → All Zones:**
|
||
```
|
||
Source: 10.40.10.10 (Prometheus)
|
||
Destination: ALL VLANs
|
||
Ports: Metrics endpoints (обычно 9090-9999)
|
||
Access: READ-ONLY metrics scraping
|
||
Action: ALLOW
|
||
Logging: NO (too verbose, metrics only)
|
||
|
||
Any non-metrics ports: DENY
|
||
```
|
||
|
||
**Data VLAN → Backup VLAN:**
|
||
```
|
||
Source: 10.50.0.0/16 (All databases)
|
||
Destination: 10.60.10.10 (Backup server)
|
||
Ports: Backup protocol specific
|
||
Direction: ONE-WAY (source → backup only)
|
||
Action: ALLOW
|
||
Logging: YES
|
||
Encryption: MANDATORY
|
||
|
||
Reverse direction: DENY (except for restore procedures)
|
||
```
|
||
|
||
### 2.3 Внешнее подключение
|
||
|
||
**VPN Gateway:**
|
||
- Публичный IP для VPN подключений
|
||
- Multi-factor authentication обязательна
|
||
- Certificate-based authentication + one-time password
|
||
- Split-tunnel запрещен (все через VPN)
|
||
- Session timeout: 8 часов
|
||
- Idle timeout: 30 минут
|
||
- Disconnect после 3 неудачных MFA попыток
|
||
|
||
**Jump Host/Bastion:**
|
||
- Единая точка входа после VPN
|
||
- Session recording для аудита
|
||
- No direct access to production systems, только через jump host
|
||
- Authorized keys management централизованно
|
||
- Automatic logout после 15 минут idle
|
||
- Audit log всех команд
|
||
|
||
**Разрешенные пользователи:**
|
||
- Developers: Доступ к Gitea, Jenkins, Portainer (read-only для production)
|
||
- DevOps: Полный доступ ко всем системам управления
|
||
- Security team: Read-only audit доступ ко всему
|
||
- Managers: Grafana и reporting dashboards только
|
||
|
||
---
|
||
|
||
## 3. Зоны и их назначение
|
||
|
||
### 3.1 Management & CI/CD Zone
|
||
|
||
**Назначение:**
|
||
Централизованное управление кодом, CI/CD процессами и container registry.
|
||
|
||
**Критичность:** HIGH - простой влияет на возможность деплоя новых версий
|
||
|
||
**Компоненты:**
|
||
|
||
**Gitea (10.10.10.10):**
|
||
- Роль: Single source of truth для всего кода и конфигураций
|
||
- Взаимодействие: Принимает push от developers, отправляет webhooks в Jenkins
|
||
- Зависимости: PostgreSQL (VLAN 50), Shared storage для Git LFS
|
||
- SLA: 99.9% uptime
|
||
|
||
**Jenkins (10.10.10.20):**
|
||
- Роль: CI automation, build и test applications
|
||
- Взаимодействие: Получает webhooks от Gitea, push образов в Harbor, update Git
|
||
- Зависимости: Gitea, Harbor, Docker build agents
|
||
- SLA: 99.5% uptime (может работать в degraded mode)
|
||
|
||
**Harbor (10.10.10.30):**
|
||
- Роль: Enterprise container registry с security scanning
|
||
- Взаимодействие: Принимает push от Jenkins, pull от Swarm nodes
|
||
- Зависимости: PostgreSQL, Object storage для images
|
||
- SLA: 99.9% uptime (критичен для pull образов)
|
||
|
||
**GitOps Operator (10.10.10.40):**
|
||
- Роль: Автоматическая синхронизация Git → Swarm
|
||
- Взаимодействие: Мониторит Gitea, применяет изменения в Swarm через API
|
||
- Зависимости: Gitea, Docker Swarm API
|
||
- SLA: 99.9% uptime
|
||
|
||
**Portainer (10.10.10.50):**
|
||
- Роль: Web UI для управления и мониторинга Swarm
|
||
- Взаимодействие: Подключается к Swarm managers через Docker API
|
||
- Зависимости: Docker Swarm API, PostgreSQL для своей базы
|
||
- SLA: 99% uptime (не критичен, есть CLI альтернатива)
|
||
|
||
**Резервирование:**
|
||
- Gitea: Master-slave replication, automated failover
|
||
- Jenkins: Standby instance в warm mode
|
||
- Harbor: Geo-replication на secondary site
|
||
- GitOps Operator: Active-passive pair
|
||
- Portainer: Standby instance
|
||
|
||
### 3.2 Docker Swarm Cluster Zone
|
||
|
||
**Назначение:**
|
||
Выполнение production workloads с high availability и load balancing.
|
||
|
||
**Критичность:** CRITICAL - прямое влияние на бизнес сервисы
|
||
|
||
**Swarm Manager Nodes (10.20.1.1-3):**
|
||
- Количество: 3 для кворума (рекомендуется нечетное число)
|
||
- Роль: Cluster orchestration, scheduling, API endpoint
|
||
- Raft consensus: Нужно минимум 2 alive из 3 для работы кластера
|
||
- Workload: НЕ запускают application containers (только infrastructure)
|
||
- CPU: 4 vCPU каждый
|
||
- RAM: 8 GB каждый
|
||
- Disk: 200 GB SSD каждый
|
||
- Network: 10 Gbps для Raft communication
|
||
|
||
**Swarm Worker Nodes (10.20.2.1-N):**
|
||
- Количество: Зависит от workload, минимум 3 для redundancy
|
||
- Роль: Выполнение application containers
|
||
- Constraints: Можно маркировать ноды для specific workloads
|
||
- CPU: 8-16 vCPU каждый
|
||
- RAM: 32-64 GB каждый
|
||
- Disk: 500 GB SSD каждый
|
||
- Network: 10 Gbps для overlay network performance
|
||
|
||
**Overlay Networks:**
|
||
- Automatic encryption (IPSec)
|
||
- Service discovery через DNS
|
||
- Load balancing через routing mesh
|
||
- Изоляция между разными стеками
|
||
|
||
**Secrets Management:**
|
||
- Docker Swarm secrets encrypted at rest
|
||
- Rotation через stack update
|
||
- Mount как files в containers
|
||
- Audit log доступа к secrets
|
||
|
||
**Резервирование:**
|
||
- Manager nodes: N-1 failure tolerance (3 ноды = 1 failure ok)
|
||
- Worker nodes: Application replicas распределены по разным нодам
|
||
- Persistent data: Replicated storage (GlusterFS или NFS с HA)
|
||
- Network: Bonded interfaces для redundancy
|
||
|
||
### 3.3 AI & Analytics Zone
|
||
|
||
**Назначение:**
|
||
Предоставление AI-powered помощи через анализ internal data sources.
|
||
|
||
**Критичность:** MEDIUM - удобство, но не критично для операций
|
||
|
||
**Ollama Server (10.30.10.10):**
|
||
- Роль: Запуск AI моделей локально на собственном железе
|
||
- Модели: Llama 3.3 70B, Qwen 2.5 Coder, DeepSeek, и другие
|
||
- Взаимодействие: Получает запросы от пользователей, context от MCP Server
|
||
- Требования: GPU highly recommended для производительности
|
||
- CPU: 16 vCPU (или меньше если есть GPU)
|
||
- RAM: 64 GB (модели требуют много памяти)
|
||
- GPU: NVIDIA A100 40GB или 2x RTX 4090 24GB (опционально но рекомендуется)
|
||
- Disk: 2 TB NVMe SSD (модели весят 10-100 GB каждая)
|
||
- Network: 10 Gbps для быстрого ответа
|
||
|
||
**MCP Server (10.30.10.20):**
|
||
- Роль: Интеграция AI с источниками данных (Gitea, Swarm, DBs, logs)
|
||
- Connectors: Модульные плагины для каждого источника
|
||
- Взаимодействие: Read-only запросы к data sources, передача context в Ollama
|
||
- Security: Service accounts для каждого connector, audit всех запросов
|
||
- CPU: 8 vCPU
|
||
- RAM: 16 GB
|
||
- Disk: 100 GB SSD
|
||
- Network: 1 Gbps
|
||
|
||
**Vector Database (10.30.10.30):**
|
||
- Роль: Хранение embeddings документации для semantic search
|
||
- Технология: Qdrant или Milvus
|
||
- Размер: Зависит от количества документации
|
||
- CPU: 4 vCPU
|
||
- RAM: 16 GB (зависит от размера index)
|
||
- Disk: 500 GB SSD
|
||
- Network: 1 Gbps
|
||
|
||
**Data Flow:**
|
||
Пользователь → Ollama → MCP Server → (параллельно):
|
||
- Gitea MCP Connector → Gitea (документация, код)
|
||
- Swarm MCP Connector → Docker API (статус, логи)
|
||
- Database MCP Connector → PostgreSQL (метаданные)
|
||
- Prometheus MCP Connector → Metrics
|
||
- Loki MCP Connector → Logs
|
||
→ Агрегированный context → Ollama → Ответ пользователю
|
||
|
||
**Резервирование:**
|
||
- Ollama: Standby instance (warm standby)
|
||
- MCP Server: Active-passive pair
|
||
- Vector DB: Replicated для HA
|
||
|
||
### 3.4 Monitoring & Logging Zone
|
||
|
||
**Назначение:**
|
||
Observability инфраструктуры для проактивного мониторинга и troubleshooting.
|
||
|
||
**Критичность:** HIGH - необходим для detection проблем
|
||
|
||
**Prometheus (10.40.10.10):**
|
||
- Роль: Сбор и хранение метрик временных рядов
|
||
- Scrape targets: Все компоненты инфраструктуры
|
||
- Retention: 30 дней в Prometheus, long-term в Thanos/VictoriaMetrics
|
||
- CPU: 8 vCPU
|
||
- RAM: 32 GB
|
||
- Disk: 2 TB HDD (time-series data)
|
||
- Network: 1 Gbps
|
||
|
||
**Grafana (10.40.10.20):**
|
||
- Роль: Визуализация метрик и логов
|
||
- Dashboards: Преднастроенные для каждого компонента
|
||
- Alerting: Визуальный редактор алертов
|
||
- CPU: 4 vCPU
|
||
- RAM: 8 GB
|
||
- Disk: 100 GB SSD
|
||
- Network: 1 Gbps
|
||
|
||
**Loki (10.40.10.30):**
|
||
- Роль: Централизованное хранение логов
|
||
- Agents: Promtail на каждой ноде
|
||
- Retention: 90 дней
|
||
- CPU: 8 vCPU
|
||
- RAM: 16 GB
|
||
- Disk: 5 TB HDD (logs)
|
||
- Network: 1 Gbps
|
||
|
||
**AlertManager (10.40.10.40):**
|
||
- Роль: Обработка и роутинг алертов
|
||
- Интеграции: Slack, Email, PagerDuty, Telegram
|
||
- Deduplication: Группировка похожих алертов
|
||
- CPU: 2 vCPU
|
||
- RAM: 4 GB
|
||
- Disk: 50 GB SSD
|
||
- Network: 1 Gbps
|
||
|
||
**Резервирование:**
|
||
- Prometheus: Federated setup, multiple instances
|
||
- Grafana: Load balanced instances
|
||
- Loki: Distributed deployment
|
||
- AlertManager: Clustered для HA
|
||
|
||
### 3.5 Data & Database Zone
|
||
|
||
**Назначение:**
|
||
Хранение persistent data для инфраструктуры и приложений.
|
||
|
||
**Критичность:** CRITICAL - потеря данных недопустима
|
||
|
||
**Infrastructure PostgreSQL Cluster (10.50.10.10-11):**
|
||
- Роль: Базы данных для Gitea, Harbor, Portainer
|
||
- Топология: Master-slave с automatic failover
|
||
- Backup: Continuous WAL archiving + daily full backup
|
||
- Encryption: At rest (LUKS) и in transit (TLS)
|
||
- CPU: 8 vCPU per instance
|
||
- RAM: 16 GB per instance
|
||
- Disk: 500 GB SSD per instance
|
||
- Network: 10 Gbps
|
||
|
||
**Application Databases (10.50.20.x):**
|
||
- Роль: Базы данных бизнес-приложений
|
||
- Технологии: Зависит от приложений (PostgreSQL, MySQL, MongoDB)
|
||
- Isolation: Каждое приложение в своей database/schema
|
||
- Backup: Application-specific strategy
|
||
- Resources: Зависит от workload
|
||
|
||
**Shared Storage (10.50.30.1-3):**
|
||
- Роль: Persistent volumes для Swarm services
|
||
- Технология: GlusterFS (replicated) или NFS с HA
|
||
- Replication: 3x для fault tolerance
|
||
- Snapshots: Каждый час, retention 7 дней
|
||
- Capacity: 10 TB (grows as needed)
|
||
- Network: 10 Gbps для I/O performance
|
||
|
||
**Резервирование:**
|
||
- PostgreSQL: Synchronous replication, automatic failover
|
||
- Shared Storage: Distributed replication (GlusterFS 3-way)
|
||
- Backups: Multiple copies в разных locations
|
||
|
||
### 3.6 Backup & DR Zone
|
||
|
||
**Назначение:**
|
||
Защита от data loss и быстрое восстановление при катастрофах.
|
||
|
||
**Критичность:** CRITICAL для долгосрочной устойчивости бизнеса
|
||
|
||
**Backup Server (10.60.10.10):**
|
||
- Роль: Прием и хранение backups
|
||
- Technology: Bacula или Bareos (enterprise backup solution)
|
||
- Scheduling: Automated по расписанию + on-demand
|
||
- Encryption: All backups encrypted at rest
|
||
- CPU: 4 vCPU
|
||
- RAM: 8 GB
|
||
- Disk: 20 TB HDD (RAID 10)
|
||
- Network: 10 Gbps для fast backups
|
||
|
||
**Backup Strategy:**
|
||
|
||
**Hourly Incremental:**
|
||
- Git repositories (только изменения)
|
||
- Retention: 48 hours
|
||
|
||
**Daily Full:**
|
||
- Databases (full dump)
|
||
- Docker Swarm configs
|
||
- Важные логи
|
||
- Retention: 30 days
|
||
|
||
**Weekly Full:**
|
||
- Полный snapshot всей инфраструктуры
|
||
- VM images, configs, data
|
||
- Retention: 12 weeks
|
||
|
||
**Monthly Archives:**
|
||
- Long-term compliance storage
|
||
- Retention: 7 years (regulatory requirement)
|
||
|
||
**DR Site (опционально, в другом ЦОД):**
|
||
- Роль: Geographic redundancy
|
||
- Replication: Asynchronous из primary site
|
||
- RTO (Recovery Time Objective): 4 hours
|
||
- RPO (Recovery Point Objective): 15 minutes
|
||
- Testing: Quarterly DR drills
|
||
|
||
---
|
||
|
||
## 4. Потоки данных
|
||
|
||
### 4.1 Development Workflow
|
||
|
||
**Developer commits code:**
|
||
```
|
||
Developer Workstation
|
||
↓ (SSH через VPN)
|
||
Gitea (VLAN 10)
|
||
↓ (Webhook HTTPS + signature verification)
|
||
Jenkins (VLAN 10)
|
||
↓ (git clone through SSH)
|
||
Gitea
|
||
```
|
||
|
||
**CI Pipeline execution:**
|
||
```
|
||
Jenkins
|
||
↓ (build application)
|
||
Build Agent (ephemeral container/VM)
|
||
↓ (run tests)
|
||
Test results → Archived in Jenkins
|
||
↓ (build Docker image)
|
||
Docker build agent
|
||
↓ (security scan with Trivy)
|
||
Vulnerability report
|
||
↓ (docker push через TLS + creds)
|
||
Harbor (VLAN 10)
|
||
```
|
||
|
||
**Update GitOps repo:**
|
||
```
|
||
Jenkins
|
||
↓ (update image tag в compose file)
|
||
Gitea GitOps repository
|
||
↓ (commit + push)
|
||
Gitea
|
||
```
|
||
|
||
### 4.2 CD Workflow
|
||
|
||
**GitOps sync:**
|
||
```
|
||
GitOps Operator (VLAN 10)
|
||
↓ (poll Git repository каждые 30 sec)
|
||
Gitea
|
||
↓ (detect changes)
|
||
GitOps Operator
|
||
↓ (docker stack deploy через Swarm API)
|
||
Swarm Managers (VLAN 20)
|
||
```
|
||
|
||
**Swarm orchestration:**
|
||
```
|
||
Swarm Manager
|
||
↓ (schedule tasks на workers)
|
||
Swarm Scheduler
|
||
↓ (pull image from Harbor)
|
||
Worker Nodes ↔ Harbor (VLAN 10)
|
||
↓ (start containers)
|
||
Application Running
|
||
```
|
||
|
||
**Service update (rolling):**
|
||
```
|
||
Swarm Manager
|
||
↓ (stop 1 task из N)
|
||
Worker Node A
|
||
↓ (start new task с новым image)
|
||
Worker Node B
|
||
↓ (verify health check)
|
||
Health Check (5 consecutive passes required)
|
||
↓ (proceed to next task)
|
||
Repeat until all tasks updated
|
||
```
|
||
|
||
### 4.3 AI Interaction Flow
|
||
|
||
**User query:**
|
||
```
|
||
User (через Web UI или API)
|
||
↓ (HTTPS request)
|
||
Ollama Server (VLAN 30)
|
||
↓ (request context через MCP protocol)
|
||
MCP Server (VLAN 30)
|
||
```
|
||
|
||
**MCP gathers context (parallel):**
|
||
```
|
||
MCP Server
|
||
├→ Gitea MCP Connector → Gitea API (docs, code)
|
||
├→ Swarm MCP Connector → Docker API (logs, metrics)
|
||
├→ Database MCP Connector → PostgreSQL (metadata)
|
||
├→ Prometheus MCP Connector → Prometheus API (metrics)
|
||
└→ Loki MCP Connector → Loki API (logs)
|
||
↓ (all responses aggregated)
|
||
MCP Server
|
||
↓ (full context sent to AI)
|
||
Ollama Server
|
||
↓ (generate response)
|
||
User
|
||
```
|
||
|
||
**AI response with action:**
|
||
```
|
||
AI determines action needed
|
||
↓ (if requires change)
|
||
AI suggests change to user
|
||
↓ (user approves)
|
||
Change committed to Git
|
||
↓ (normal GitOps flow)
|
||
Applied to infrastructure
|
||
```
|
||
|
||
### 4.4 Monitoring Data Flow
|
||
|
||
**Metrics collection:**
|
||
```
|
||
All Infrastructure Components
|
||
↓ (expose metrics endpoints)
|
||
Prometheus Exporters
|
||
↓ (scrape every 15 seconds)
|
||
Prometheus (VLAN 40)
|
||
↓ (evaluate alert rules)
|
||
AlertManager (VLAN 40)
|
||
↓ (route notifications)
|
||
Slack/Email/PagerDuty
|
||
```
|
||
|
||
**Logs collection:**
|
||
```
|
||
All Containers
|
||
↓ (stdout/stderr)
|
||
Docker logging driver
|
||
↓ (forward)
|
||
Promtail Agent (на каждой ноде)
|
||
↓ (push)
|
||
Loki (VLAN 40)
|
||
↓ (index и store)
|
||
Loki Storage
|
||
↓ (query)
|
||
Grafana или CLI
|
||
```
|
||
|
||
**Audit logs:**
|
||
```
|
||
All Infrastructure Actions
|
||
├→ Gitea (Git operations)
|
||
├→ Docker Swarm (API calls)
|
||
├→ Harbor (image push/pull)
|
||
├→ Jenkins (builds)
|
||
└→ SSH sessions (bastion)
|
||
↓ (forward)
|
||
Centralized Syslog
|
||
↓ (store)
|
||
Long-term Audit Storage (7 years)
|
||
```
|
||
|
||
---
|
||
|
||
## 5. High Availability и масштабирование
|
||
|
||
### 5.1 HA Strategy
|
||
|
||
**Tier 1 - Critical (99.99% uptime):**
|
||
- Docker Swarm (application platform)
|
||
- Harbor (cannot deploy without it)
|
||
- Shared Storage (persistent data)
|
||
- Strategy: Active-Active где возможно, N+1 redundancy
|
||
|
||
**Tier 2 - Important (99.9% uptime):**
|
||
- Gitea (code access)
|
||
- GitOps Operator (CD automation)
|
||
- Databases (infrastructure metadata)
|
||
- Strategy: Active-Passive с automatic failover
|
||
|
||
**Tier 3 - Nice to have (99% uptime):**
|
||
- Jenkins (can wait for restore)
|
||
- Portainer (CLI alternative exists)
|
||
- Monitoring (short downtime acceptable)
|
||
- Strategy: Warm standby, manual failover
|
||
|
||
### 5.2 Scaling Points
|
||
|
||
**Vertical Scaling (увеличение ресурсов):**
|
||
- Databases: Больше RAM для cache
|
||
- Ollama: Добавление GPU для speed
|
||
- Harbor storage: Больше disk для images
|
||
- Limit: Hardware limitations
|
||
|
||
**Horizontal Scaling (добавление instances):**
|
||
- Swarm Workers: Добавить ноды для capacity
|
||
- Jenkins Agents: Dynamic scaling по demand
|
||
- Prometheus: Federation для distributed scraping
|
||
- MCP Connectors: Независимые instances per source
|
||
|
||
**Data Scaling:**
|
||
- PostgreSQL: Read replicas для read-heavy workloads
|
||
- Harbor: Geo-replication для distributed teams
|
||
- Loki: Sharding по времени
|
||
- Git: Repository sharding (не часто нужно)
|
||
|
||
### 5.3 Capacity Planning
|
||
|
||
**Metrics для отслеживания:**
|
||
- CPU utilization (target <70% average)
|
||
- Memory utilization (target <80%)
|
||
- Disk usage (alert при 80%, critical при 90%)
|
||
- Network bandwidth (baseline + trend analysis)
|
||
- IOPS (SSD wear, performance degradation)
|
||
|
||
**Growth projections:**
|
||
- Applications: 20% growth в год
|
||
- Code repositories: 30% growth в год (accumulative)
|
||
- Logs: 50% growth в год (more verbose logging)
|
||
- Metrics retention: Linear с количеством services
|
||
|
||
**Scaling triggers:**
|
||
- Add Swarm worker когда CPU >80% sustained
|
||
- Upgrade database когда query latency >100ms p95
|
||
- Expand storage когда >75% used
|
||
- Add Jenkins agents когда queue >5 builds
|
||
|
||
---
|
||
|
||
## 6. Disaster Recovery
|
||
|
||
### 6.1 RTO и RPO Targets
|
||
|
||
**Recovery Time Objective (RTO):**
|
||
- Tier 1 services: 1 hour
|
||
- Tier 2 services: 4 hours
|
||
- Tier 3 services: 24 hours
|
||
- Full infrastructure: 8 hours
|
||
|
||
**Recovery Point Objective (RPO):**
|
||
- Databases: 15 minutes (via WAL shipping)
|
||
- Git repositories: 1 hour (hourly backup)
|
||
- Docker images: 0 (replicated to DR)
|
||
- Configs: 0 (in Git)
|
||
- Logs: 1 hour (buffered before ingestion)
|
||
|
||
### 6.2 DR Scenarios
|
||
|
||
**Scenario 1: Single server failure**
|
||
- Detection: Automated monitoring
|
||
- Response: Automatic failover to redundant instance
|
||
- Recovery time: <5 minutes
|
||
- Data loss: None (active-active or sync replication)
|
||
|
||
**Scenario 2: Network partition**
|
||
- Detection: Raft consensus loss, monitoring alerts
|
||
- Response: Manual investigation, possible split-brain resolution
|
||
- Recovery time: 30 minutes
|
||
- Data loss: Possible if write to minority partition
|
||
|
||
**Scenario 3: Data center failure**
|
||
- Detection: Total loss of connectivity
|
||
- Response: Failover to DR site
|
||
- Recovery time: 4 hours (RTO)
|
||
- Data loss: Up to 15 minutes (RPO)
|
||
|
||
**Scenario 4: Ransomware/Corruption**
|
||
- Detection: File integrity monitoring, unusual encryption activity
|
||
- Response: Isolate affected systems, restore from clean backup
|
||
- Recovery time: 8 hours (full rebuild)
|
||
- Data loss: Up to last clean backup (potentially hours)
|
||
|
||
**Scenario 5: Human error (accidental delete)**
|
||
- Detection: Git history, audit logs
|
||
- Response: Restore from backup or Git revert
|
||
- Recovery time: 1-2 hours
|
||
- Data loss: None (everything in version control)
|
||
|
||
### 6.3 Recovery Procedures
|
||
|
||
**Database Recovery:**
|
||
- Stop application access
|
||
- Restore base backup
|
||
- Apply WAL logs до point-in-time
|
||
- Verify data integrity
|
||
- Resume application access
|
||
|
||
**Git Repository Recovery:**
|
||
- Clone from DR site или restore backup
|
||
- Verify commit history integrity
|
||
- Restore hooks и configurations
|
||
- Test push/pull operations
|
||
- Notify team of recovery
|
||
|
||
**Docker Swarm Recovery:**
|
||
- Deploy manager nodes from backup configs
|
||
- Join worker nodes
|
||
- Restore network и volume configs
|
||
- Deploy stacks from Git
|
||
- Verify service health
|
||
|
||
**Full Site Recovery:**
|
||
- Deploy infrastructure от Terraform/IaC
|
||
- Restore databases from backup
|
||
- Clone Git repositories
|
||
- Deploy Docker Swarm
|
||
- Apply all stacks from GitOps
|
||
- Verify end-to-end functionality
|
||
- Switch DNS to DR site
|
||
- Notify stakeholders
|
||
|
||
### 6.4 Testing DR
|
||
|
||
**Monthly:**
|
||
- Restore тест на отдельной инфраструктуре
|
||
- Verify backup integrity
|
||
- Test recovery procedures
|
||
|
||
**Quarterly:**
|
||
- Full DR drill с failover на DR site
|
||
- Measure actual RTO/RPO
|
||
- Update procedures based на findings
|
||
|
||
**Annually:**
|
||
- Tabletop exercise с всеми stakeholders
|
||
- Test business continuity plans
|
||
- Update и train на changes
|
||
|
||
---
|
||
|
||
**Следующие документы:**
|
||
- **03-security-compliance.md** - Детальные требования безопасности
|
||
- **04-component-specifications.md** - Технические спецификации компонентов
|
||
- **05-development-environment.md** - Dev окружение для тестирования
|
||
|
||
---
|
||
|
||
**Утверждение:**
|
||
- Enterprise Architect: _______________
|
||
- Security Architect: _______________
|
||
- Infrastructure Lead: _______________
|
||
- Date: _______________ |