Update README.md

This commit is contained in:
2026-07-21 18:46:22 +00:00
parent 76b4207707
commit affdd2b50e

253
README.md
View File

@@ -1340,9 +1340,260 @@ P_reject = 0.70 × 0.886 × 0.181 = 0.112 = 11.2%
<p align="right">(<a href="#readme-top">К началу</a>)</p> <p align="right">(<a href="#readme-top">К началу</a>)</p>
## Геораспределённая миграция ## Геораспределенная миграция
**Механизм кросс-датацентровой миграции**
Кросс-датацентровая миграция данных позволяет переносить данные между географически распределенными кластерами futriix без остановки работы системы. Миграция основана на асинхронной репликации с использованием CDC (Change Data Capture) и устойчивой очереди изменений.
Миграция данных между датацентрами реализована на основе асинхронной репликации с **CDC (Change Data Capture)** и включает следующие ключевые компоненты:
1. Change Queue — устойчивая очередь изменений (до 100 000 записей), сохраняемая на диск. Каждое изменение получает уникальный LSN (Log Sequence Number) для отслеживания прогресса.
2. Checkpoint System — система чекпоинтов, позволяющая возобновить миграцию с места остановки. Чекпоинты сохраняются каждые 30 секунд и содержат информацию о последнем LSN и обработанных документах.
3. Delta Sync — после основной миграции система продолжает синхронизировать изменения, произошедшие во время миграции, обеспечивая консистентность данных.
4. Валидация — после завершения миграции выполняется выборочная проверка данных (по умолчанию 10% документов) с использованием SHA-256 контрольных сумм.
</br>
**Жизненный цикл миграции:**
```sh
Idle → Preparing → Migrating → Delta Sync → Validating → Completed
```
**Режимы работы:**
1. manual — полностью ручное управление
2. semi_auto — основная миграция вручную, дельта-синхронизация автоматическая
3. auto — полностью автоматическая непрерывная миграция
</br>
**Команды управления:**
* migration start <source_dc> <target_dc> [db] [collection] — запуск миграции
* migration status [task_id] — статус миграции
* migration list — список всех задач
* migration pause/resume/cancel <task_id> — управление задачей
* migration stats — статистика
* migration config — конфигурация
* migration queue — состояние очереди изменений
</br>
**Компоненты системы**
| Компонент | Описание | Настройки |
|-----------|----------|-----------|
| **Source DC** | Исходный датацентр с данными для миграции | `migration.source.*` |
| **Target DC** | Целевой датацентр для приема данных | `migration.target.*` |
| **Change Queue** | Устойчивая очередь изменений (CDC) | `100k записей, LSN` |
| **Data Transfer** | Параллельная передача данных с сжатием | `workers, compression` |
| **Checkpoint & Resume** | Чекпоинты для возобновления миграции | `checkpoint_interval_sec` |
| **Delta Sync** | Синхронизация изменений после основной миграции | `interval_sec, max_lag_sec` |
| **Validation** | Проверка целостности данных | `sample_percent, max_errors` |
**Графическое изображение жизненного цикла миграции**
### Жизненный цикл миграции
| Этап | Описание | Переход к следующему этапу | Действия пользователя |
|------|----------|---------------------------|----------------------|
| **IDLE** | Начальное состояние, миграция не запущена | `migration start` | Запуск новой миграции |
| **PREPARING** | Сбор метаданных, анализ структуры данных, подсчёт документов | Автоматически после завершения подготовки | Мониторинг прогресса |
| **MIGRATING** | Основная передача данных из источника в приёмник | Автоматически после завершения передачи | `migration pause`, `migration status` |
| **DELTA_SYNC** | Синхронизация изменений, произошедших во время миграции | Автоматически после синхронизации | `migration pause`, `migration status` |
| **VALIDATING** | Проверка целостности данных (контрольные суммы) | Автоматически после валидации | `migration status` |
| **COMPLETED** | Миграция успешно завершена | — | `migration validate`, `migration list` |
### Обработка исключительных состояний
| Текущий этап | Исключительное состояние | Переход | Описание |
|--------------|--------------------------|---------|----------|
| **MIGRATING** | Приостановка пользователем | → **PAUSED** | Пользователь выполнил `migration pause` |
| **DELTA_SYNC** | Приостановка пользователем | → **PAUSED** | Пользователь выполнил `migration pause` |
| **PAUSED** | Возобновление пользователем | → **MIGRATING** | Пользователь выполнил `migration resume` |
| **PAUSED** | Отмена пользователем | → **FAILED** | Пользователь выполнил `migration cancel` |
| **MIGRATING** | Критическая ошибка | → **FAILED** | Сетевой сбой, отказ узла, таймаут |
| **DELTA_SYNC** | Критическая ошибка | → **FAILED** | Сетевой сбой, отказ узла, таймаут |
| **PREPARING** | Критическая ошибка | → **FAILED** | Недоступность источника или цели |
| **VALIDATING** | Ошибка валидации | → **COMPLETED** | Ошибки логируются, миграция завершается |
### Таблица переходов состояний
| Из состояния | Событие | В состояние |
|--------------|---------|-------------|
| IDLE | `migration start` | PREPARING |
| PREPARING | Подготовка завершена | MIGRATING |
| PREPARING | Ошибка | FAILED |
| MIGRATING | Передача завершена | DELTA_SYNC |
| MIGRATING | `migration pause` | PAUSED |
| MIGRATING | Ошибка | FAILED |
| DELTA_SYNC | Синхронизация завершена | VALIDATING |
| DELTA_SYNC | `migration pause` | PAUSED |
| DELTA_SYNC | Ошибка | FAILED |
| VALIDATING | Валидация завершена | COMPLETED |
| VALIDATING | Ошибка валидации | COMPLETED |
| PAUSED | `migration resume` | MIGRATING |
| PAUSED | `migration cancel` | FAILED |
| COMPLETED | — | — |
| FAILED | `migration resume` (после исправления) | MIGRATING |
| FAILED | `migration cancel` | FAILED |
### Временные метрики этапов
| Этап | Типичная длительность | Факторы влияния |
|------|----------------------|-----------------|
| **PREPARING** | 1-10 секунд | Количество баз данных и коллекций |
| **MIGRATING** | Зависит от объёма данных | Размер документов, пропускная способность сети, `batch_size`, `workers` |
| **DELTA_SYNC** | Зависит от количества изменений | Интенсивность записи во время миграции, `interval_sec` |
| **VALIDATING** | 5-30% от времени миграции | `sample_percent`, размер документов |
| **PAUSED** | Неограниченно | Время до возобновления пользователем |
### Поток данных
| Этап | Действие | Данные |
|------|----------|--------|
| 1 | Сбор метаданных | Список БД, коллекций, индексов |
| 2 | Подготовка данных | Сериализация документов |
| 3 | Сжатие | Snappy/LZ4/Zstd |
| 4 | Передача | HTTP с повторными попытками |
| 5 | Применение | Вставка/обновление в target DC |
| 6 | Дельта-синхронизация | CDC изменения |
| 7 | Валидация | SHA-256 контрольные суммы |
| 8 | Завершение | Обновление статуса |
**Режимы работы**
| Режим | Описание | Автоматизация |
|-------|----------|---------------|
| **manual** | Полностью ручное управление | Нет |
| **semi_auto** | Основная миграция вручную, дельта автоматическая | Частичная |
| **auto** | Полностью автоматическая непрерывная миграция | Полная |
**Пример конфигурации**
```toml
[migration]
enabled = true
mode = "semi_auto" # manual, semi_auto, auto
[migration.source]
name = "dc-primary"
endpoint = "https://dc1.futriix.local:8080"
timeout_sec = 30
[migration.target]
name = "dc-secondary"
endpoint = "https://dc2.futriix.local:8080"
timeout_sec = 30
[migration.settings]
batch_size = 1000
workers = 4
compression = "snappy" # snappy, lz4, zstd
resume_enabled = true
checkpoint_interval_sec = 30
max_retries = 3
retry_backoff_sec = 5
collections = []
exclude_collections = ["temp", "logs"]
[migration.delta]
enabled = true
interval_sec = 60
max_lag_sec = 300
[migration.validation]
enabled = true
sample_percent = 10
max_errors = 100
```
</br>
### Команды управления миграцией
| Команда | Описание | Пример использования |
|---------|----------|---------------------|
| `migration start` | Запуск новой миграции из исходного датацентра в целевой | `migration start dc-primary dc-secondary` |
| `migration start <db>` | Запуск миграции только для указанной базы данных | `migration start dc-primary dc-secondary mydb` |
| `migration start <db> <collection>` | Запуск миграции для конкретной коллекции | `migration start dc-primary dc-secondary mydb users` |
| `migration status` | Отображение статуса текущей активной миграции | `migration status` |
| `migration status <task_id>` | Отображение статуса конкретной задачи по ID | `migration status mig_1734567890_dc-primary` |
| `migration list` | Вывод списка всех задач миграции (включая завершённые) | `migration list` |
| `migration pause <task_id>` | Приостановка выполняющейся миграции | `migration pause mig_1734567890_dc-primary` |
| `migration resume <task_id>` | Возобновление ранее приостановленной миграции | `migration resume mig_1734567890_dc-primary` |
| `migration cancel <task_id>` | Отмена миграции с переходом в статус "failed" | `migration cancel mig_1734567890_dc-primary` |
| `migration stats` | Отображение агрегированной статистики миграций | `migration stats` |
| `migration config` | Вывод текущей конфигурации мигратора из config.toml | `migration config` |
| `migration queue` | Отображение состояния очереди изменений (размер, LSN) | `migration queue` |
| `migration validate <task_id>` | Запуск валидации данных для завершённой миграции | `migration validate mig_1734567890_dc-primary` |
---
### Статусы миграции
| Статус | Описание | Индикатор | Возможные действия |
|--------|----------|-----------|-------------------|
| `idle` | Нет активной миграции, система ожидает команды | Белый | `migration start` |
| `preparing` | Сбор метаданных: подсчёт документов, проверка коллекций | 🔵 Синий | Ожидание автоматического перехода |
| `migrating` | Основная фаза передачи данных из источника в приёмник | 🟡 Жёлтый | `migration pause`, `migration status` |
| `delta_sync` | Синхронизация изменений, произошедших во время миграции | 🟡 Жёлтый | `migration pause`, `migration status` |
| `validating` | Проверка целостности данных (контрольные суммы) | 🔵 Синий | `migration status` |
| `completed` | Миграция успешно завершена, все данные перенесены | 🟢 Зелёный | `migration validate`, `migration list` |
| `failed` | Миграция завершилась с ошибкой, требуется вмешательство | 🔴 Красный | `migration status` (просмотр ошибки), `migration resume` (после исправления), `migration cancel` |
| `paused` | Миграция приостановлена пользователем | 🟠 Оранжевый | `migration resume`, `migration cancel` |
---
### Метрики мониторинга
| Метрика | Описание | Единица измерения | Способ получения |
|---------|----------|-------------------|------------------|
| `total_changes` | Общее количество изменений, зарегистрированных в очереди | количество | `migration stats` |
| `applied_changes` | Количество изменений, успешно применённых в целевом датацентре | количество | `migration stats` |
| `failed_changes` | Количество изменений, которые не удалось применить | количество | `migration stats` |
| `skipped_changes` | Количество изменений, пропущенных по различным причинам | количество | `migration stats` |
| `latency_avg` | Среднее время передачи одного документа | миллисекунды | `migration stats` |
| `latency_max` | Максимальное время передачи одного документа | миллисекунды | `migration stats` |
| `throughput` | Пропускная способность миграции | документов в секунду | `migration stats` |
| `queue_size` | Текущий размер очереди изменений | количество | `migration queue` |
| `last_lsn` | Последний обработанный LSN (Log Sequence Number) | номер | `migration queue` |
| `progress_percent` | Процент выполнения текущей миграции | проценты (0-100) | `migration status` |
| `total_documents` | Общее количество документов для миграции | количество | `migration status` |
| `migrated_docs` | Количество успешно мигрированных документов | количество | `migration status` |
| `failed_docs` | Количество документов с ошибкой миграции | количество | `migration status` |
| `elapsed_time` | Время, прошедшее с начала миграции | секунды | `migration status` |
| `validation_errors` | Количество ошибок валидации | количество | `migration status` |
---
### Обработка ошибок
| Тип ошибки | Описание | Механизм восстановления | Действие администратора |
|------------|----------|-------------------------|------------------------|
| **Сетевой сбой** | Потеря соединения между датацентрами | Автоматический повтор до `max_retries` раз с задержкой `retry_backoff_sec` | Проверить сетевые соединения, межсетевые экраны |
| **Таймаут** | Превышение времени ожидания ответа | Увеличение таймаута (`timeout_sec`), повтор запроса | Настроить `timeout_sec` в конфигурации, проверить загрузку целевого датацентра |
| **Невалидные данные** | Документ не соответствует схеме или ограничениям коллекции | Логирование ошибки, пропуск документа | Проверить схему документа, исправить источник данных |
| **Краш узла** | Аварийное завершение работы узла futriix | Восстановление из последнего чекпоинта при перезапуске | Перезапустить узел, убедиться в наличии чекпоинта |
| **Конфликт версий** | Документ был изменён во время миграции | Повторная попытка с новой версией документа | Проверить конкурентные изменения, при необходимости остановить запись на время миграции |
| **Отказ целевого датацентра** | Целевой датацентр недоступен | Отложить до восстановления, автоматический повтор | Проверить состояние целевого датацентра, перезапустить при необходимости |
| **Недостаточно места** | Закончилось место на диске в целевом датацентре | Приостановка миграции до освобождения места | Освободить место на диске или расширить хранилище |
| **Ошибка валидации** | Контрольная сумма документа не совпадает | Логирование ошибки, продолжение миграции | Проверить целостность данных, при необходимости перезапустить миграцию |
| **Прерывание пользователем** | Пользователь выполнил `migration cancel` | Немедленная остановка, переход в статус `failed` | |
| **Таймаут дельта-синхронизации** | Задержка превысила `max_lag_sec` | Увеличение интервала или ручная синхронизация | Настроить `interval_sec` и `max_lag_sec`, проверить пропускную способность канала |
**Гарантии целостности**
* Идемпотентность: Каждая операция может быть повторена без побочных эффектов
* Контрольные суммы: SHA-256 для каждого документа
* Валидация: Выборочная проверка после миграции
* Чекпоинты: Возможность возобновления с места остановки
* Транзакционность: Атомарное применение изменений
<p align="right">(<a href="#readme-top">К началу</a>)</p> <p align="right">(<a href="#readme-top">К началу</a>)</p>