Перейти к содержанию

Миграции данных 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.