Aurora Serverless Blue / Green развертывание

В настоящее время я изучаю стратегии для реализации синего / зеленого развертывания с использованием RDS Aurora Serverless для Mysql.

2 метода, о которых я думаю являются:

А. Создайте дубликат базы данных и перенесите дубликат в новую схему. По сути, я бы поддерживал две версии БД до завершения развертывания, а затем удалял бы оригинал.

B. Всегда сохраняйте одну и ту же базу данных и более или менее поддерживайте две схемы одновременно. Это означает, что я бы делал такие вещи, как сохранение повторяющихся столбцов, если бы я хотел изменить имя столбца, чтобы мои старые запросы продолжали работать как для старой, так и для новой версии моего приложения.

У меня есть несколько вопросов по поводу осуществимости из них обоих:

  1. Для метода A , есть ли разумный способ дублировать базу данных с помощью Aurora Serverless? Насколько я понимаю, моментальные снимки нельзя использовать для создания дублирующей базы данных.
  2. Для метода A , какие существуют варианты для сохранения синхронизации обеих баз данных. (Я думал, что использование Kinesis может сработать)
  3. Для метода B , какие существуют варианты для синхронизации повторяющихся столбцов / таблиц. Было бы довольно просто обновить оба столбца для пользователей в новой версии API, но я не уверен, как поступить со старой версией API, не зная, что новый столбец существует.

Я также открыт к предложениям о различных стратегиях.

1
задан 28 December 2018 в 18:02
1 ответ

Создание копии базы данных для каждого развертывания ( Метод A ) - довольно сложный подход .

Это работает, только если ваша база данных: довольно мала (копирование занимает время, хранение двух больших БД [синий и зеленый] стоит в 2 раза дороже и т. Д.), довольно статична с мало пишет (синхронизация этих двух данных может быть проблемой для загруженных БД) и когда вы не ожидаете отката (перенос обновлений из занятой новой зеленой БД обратно в старая синяя БД может быть сложной).

Это можно сделать, но это сложно. Такие инструменты, как AWS Database Migration Service (DMS) , которые могут выполнять как первоначальное копирование, так и впоследствии синхронизировать DBS, могут помочь с некоторыми из них.


Использование одной и той же БД для синего и зеленого ] (ваш Метод B ) обычно предпочтительнее , и с ним гораздо проще работать. Также на самом деле большую часть времени поля базы данных добавляются между выпусками кода, реже они удаляются или переименовываются . Но даже это можно сделать.

Допустим, вы хотите переименовать поле username в user_name по любой причине, например чтобы привести его в соответствие с новыми соглашениями об именах. Вот что вы можете сделать:

  1. Версия кода 1 ожидает имя пользователя , а в схеме базы данных есть поле имя пользователя .

  2. Добавить столбец имя_пользователя по умолчанию NULL

  3. Развернуть код версии 2 - он пытается аутентифицироваться по user_name , и если обнаруживает, что user_name имеет значение NULL он возвращается к имени пользователя и обновляет имя_пользователя . Если создается новый пользователь, он сохраняется в имя_пользователя и на отдельном шаге в имя пользователя .

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

  4. После того, как версия 2 полностью развернута и протестирована, запустите сценарий, который обновляет все оставшиеся имя_пользователя строки из имя пользователя .

  5. Развернуть версию 3 , которая работает только с имя_пользователя .

  6. Один раз версия 3 Развернут удалить старый столбец имя пользователя , потому что и текущий (v3), и предыдущий (v2) могут работать без него.

Это может показаться сложным, но не так уж плохо.

Этот подход имеет ряд преимуществ:

  • это всего лишь проблема разработки программного обеспечения , ваш конвейер CI / CD не должен поддерживать копирование и синхронизацию баз данных и их откат.

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

  • вы можете использовать тот же подход, если решите использовать ] скользящее развертывание или канареечное развертывание вместо синего / зеленого в будущем.

Надеюсь, что это поможет :)

1
ответ дан 3 December 2019 в 23:09

Теги

Похожие вопросы