хочу в 2021 развивать у себя в компании тему с отказоустойчивостью, в том числе откатов деплойментов. но не понимаю пока даже концептуального решения для этого: либо при откате теряются пользовательские данные, либо запускаются скрипты отката на предыдущую версию схемы, которые по сути могут так же с легкостью крэшнуться
Мы реализуем это примерно так:
1) В коде вместе с остальным MR-м хранятся миграции наката/отката. Сами миграции накатываем стандартными для языка/фреймворка способом. Видел команды/компании где использует отдельный мигратор.
2) Эти миграции тестируются в CI в рамках тестов
3) Эти миграции не 1 раз тестируются командой QA в рамках выкатов на RC stage
4) Если есть сложные кейсы, с возможной потеряй данных и т.д. То обычно используем многоступенчатый выкат (кратко - создали новую колонку, залили данными, приложение пишет параллельно в обе, читает из старой, потом переключаем на новую колонку, потом дропаем старую)
Все это не избавляет нас от случаев что что-то может пойти не так (особенно если это миграции на каких-то больших таблицах) и иногда приходится все стопать и руками что-то докручивать (тьфу-тьфу, давно так не делали)