Как обрабатывать изменения данных в технике развертывания Blue/Green?

Я изучил эту статью о развертывании Blue/Green, а затем еще один поиск в Google познакомил меня с этой статьей о Canary Release. У меня есть эта двусмысленность: что будет с базами данных? как мы должны сделать их синхронизированными? я имею в виду два возможных сценария:

  • Представьте, что есть две отдельные базы данных, по одной для каждой среды.
    (зеленый и синий), когда синий цвет активен, новые записи будут вставлены в его базу данных, а зеленый не знает об этих изменениях
    если мы не предоставим триггерный механизм (или любой другой механизм) для обновления зеленой базы данных.
  • Второй сценарий предполагает, что мы разделяем обратно совместимую базу данных между двумя средами, но обратная совместимость не так проста
    при работе с базами данных мы должны публиковать изменения базы данных
    перед публикацией приложения.

может быть третий сценарий: внедрить развертывание Blue/Green для баз данных внутри основного развертывания Blue/Green.

Как вы думаете, что является лучшим решением и почему? Вы предлагаете какую-либо другую практику или хорошо известную модель?

благодарю вас

2 ответа

Лично я работал только с подходом обратно совместимых баз данных. Основным преимуществом является то, что он хорошо понят и работает для широкого спектра типов развертывания, включая канареечный и сине-зеленый; Я использовал этот подход даже без преимущества сине-зеленой стратегии развертывания (обычное развертывание на всех серверах, которое по сути является быстрым канарским развертыванием). Необходимость развертывания изменений базы данных перед выпуском приложений является общей для нескольких стратегий развертывания, не столь обременительной по сравнению с необходимостью сложных механизмов запуска или зеркалирования между различными версиями базы данных.

Ваш третий сценарий также попадает в ловушку необходимости запуска или зеркального отображения между кусками базы данных. В терминах RDBMS это обычно не поддерживается или полностью невозможно, потому что существует только основная база данных, а все другие экземпляры не принимают операции записи. Общий эффект этого состоит в том, что версия главного экземпляра является де-факто версией всей базы данных.

Некоторые базы данных No-SQL не попадают в эту ловушку. Например, MongoDB с удовольствием разрешит несколько разных версий схем документов в одной коллекции. Это позволяет вашему приложению получать информацию о версии данных и обрабатывать документы по-разному. Однако MongoDB подходит не для всех приложений (так же как RDBS не является подходящим хранилищем данных для определенных типов данных).

Я никогда не видел приложение, которое на 100% сине-зеленое или канареечное. Причиной этого является фактический слой «данных». Мы не можем делать сине-зеленые развертывания на уровне базы данных, поскольку у каждого типа базы данных будут свои нюансы. Обычно это используется только для уровня приложения (кода).

Если вы хотите иметь сине-зеленое развертывание с базой данных, тогда требуется миграция данных или, по крайней мере, восстановление на уровне БД, что является сложным и громоздким для реализации большинства команд. Это займет много времени, и откат будет беспорядочным. Просто используйте обратно совместимые БД и удаляйте изменения БД при откате.

Другие вопросы по тегам