Рекомендуемые способы решения проблемы миграции базы данных при выполнении подкачки с использованием слотов развертывания

Я пытаюсь понять использование слотов развертывания для размещения моего веб-приложения с помощью службы приложений Azure. Меня особенно смущают идеальные способы работы с базой данных во время выполнения свопа. Хотя поддержка двух версий базы данных кажется решением, это добавляет сложности в обслуживании данных в нескольких базах данных, чтобы сделать их согласованными. Каковы рекомендуемые способы работы со схемой базы данных и миграцией при использовании сине-зеленых развертываний и, в частности, слотов развертывания?


person harika t    schedule 20.08.2020    source источник


Ответы (3)


В идеале вы должны использовать одну и ту же базу данных для сцены / производства, поэтому это не будет проблемой.

Но если у вас больше слотов, вам лучше также работать с другими базами данных и выполнять миграции на этапе выпуска.

person Thiago Custodio    schedule 20.08.2020

Мы прорабатывали различные решения этой проблемы в течение нескольких лет. Не существует набора инструментов, который дает волшебную палочку на все случаи жизни. Есть несколько решений:

Меньшие базы данных / незначительные изменения

Если возможно выполнить сценарий миграции в базе данных, который завершится за секунду или две, и у вас может быть простой резервный сценарий, вы можете выполнить сценарий одновременно с подкачкой. Это также можно автоматизировать. Но это более высокая стрессовая ситуация, и я бы не рекомендовал ее. Это можно сделать даже с помощью EF Migrations.

Внимательно следите за совместимостью базы данных между версиями

Поскольку мы имеем дело с несколькими сотнями ГБ данных, которые не могут исчезнуть, мы просто взяли за правило, что база данных должна работать с обеими версиями нашего приложения. Это не так ужасно или невозможно, как кажется. Например, чистые новые таблицы и поля часто могут быть добавлены еще до того, как вы выполните замену. Мы тестируем откат между версиями в рамках нашего QA. Если некоторые поля необходимо отбросить, мы ждем, пока новая версия будет развернута и записана, а затем запускаем другой скрипт для выполнения отбрасывания после того, как мы уверены, что откат нам не понадобится. Мы будем создавать новые хранимые процедуры, когда нужно обновить одну, чтобы у новой версии была своя собственная. Пример: sp_foo и sp_foo2.

Мы добились большого успеха с этой стратегией.

person Rob Reagan    schedule 20.08.2020

Слоты - это функция, специально предназначенная для служб приложений, а не для баз данных, если вы хотите использовать конкретную базу данных с определенным слотом, вы настраиваете слот следующим образом: https://docs.microsoft.com/en-us/azure/app-service/deploy-staging-slots

Теперь, когда вы используете слоты и меняете местами, он также меняет местами Конфигурации приложения \ Настройки, а в настройках приложения вы можете иметь две строки подключения к БД, но каждая со своим собственным именем слота и включенными настройками. Вы можете видеть, что это также было показано в этом примере здесь: https://docs.microsoft.com/en-us/azure/app-service/deploy-staging-slots#swap-two-slots

person Hassan Raza    schedule 20.08.2020