Миграции данных backend-приложений¶
Требования применяются к изменениям схемы и преобразованиям хранимых данных.
Уровни обязательности определены в корневом README.md.
BE-MIG-001. Совместимость поэтапного развёртывания¶
Уровень: MUST
Применяется к: изменению схемы, используемой несколькими версиями приложения
Миграция должна следовать последовательности expand, migrate, contract. Добавление должно быть совместимо с текущей версией; данные должны быть перенесены и проверены до переключения чтения; удаление старого контракта допускается только после прекращения его использования всеми экземплярами и потребителями.
Обоснование¶
Во время rolling deployment одновременно работают разные версии приложения.
Проверка¶
- integration-тест старой и новой версии на промежуточной схеме;
- проверка порядка pipeline развёртывания;
- запрос на отсутствие использования старого поля перед contract.
Исключения¶
Остановка сервиса на миграцию требует ADR с согласованным окном недоступности.
BE-MIG-002. Безопасное выполнение миграции¶
Уровень: MUST
Применяется к: каждой production-миграции
Миграция должна быть версионирована, иметь однозначный статус применения и защиту от конкурентного запуска. Блокировки, транзакции и размер batch должны иметь пределы, не нарушающие согласованный SLI. Повторный запуск после частичного отказа должен быть безопасным либо явно запрещён с процедурой восстановления.
Обоснование¶
Конкурентная или неограниченная миграция способна остановить production.
Проверка¶
- integration-тест конкурентного и повторного запуска;
- тест прерывания между batch;
- измерение блокировок и времени на production-like объёме.
Исключения¶
Не допускаются для защиты от конкурентного запуска.
BE-MIG-003. Единственное управляемое выполнение¶
Уровень: MUST
Применяется к: выполнению production-миграций
Миграция должна выполняться одним управляемым исполнителем до переключения приложения на новый контракт. Каждый экземпляр приложения не должен самостоятельно и конкурентно запускать migration при старте.
Неуспешная миграция должна останавливать затронутый этап поставки и не должна делать новый экземпляр ready.
Обоснование¶
Единственный управляемый исполнитель исключает гонку экземпляров и делает отказ поставки видимым.
Проверка¶
- review deployment pipeline;
- тест параллельного старта экземпляров;
- тест неуспешной migration job.
Исключения¶
Локальная разработка и изолированный тест могут запускать миграции при старте. Production-запуск MAY инициировать миграцию только при гарантии единственного исполнителя, завершении до readiness и блокировке поставки при ошибке.
BE-MIG-004. Восстановление и проверка данных¶
Уровень: MUST
Применяется к: миграции, изменяющей или удаляющей данные
До запуска должны быть определены проверяемые precondition, postcondition, стратегия восстановления и точка, после которой rollback требует обратного преобразования или восстановления backup. Backup должен быть проверен восстановлением, если он является частью стратегии.
Количество обработанных, пропущенных и ошибочных записей должно сверяться с ожидаемыми инвариантами без вывода чувствительных данных.
Обоснование¶
Успешный код выхода не доказывает полноту данных и возможность восстановления.
Проверка¶
- автоматическая проверка precondition и postcondition;
- rehearsal на production-like данных;
- тест восстановления выбранной стратегией.
Исключения¶
Неизменяющее добавление схемы может не требовать backup, если имеет проверяемый обратный DDL.