Для меня база данных — это самая нервная часть любого развертывания. Развертывающий код гораздо менее стрессовой. Если что-то не вправо, код может быть откатывается назад. К тому времени, когда он достигает продукции, должны быть нулевые сюрпризы, если это тот же код, который был протестирован в разработке DEV, QA и до добычи.
Базы данных не такие гибкие. Представьте себе, что есть ошибка в сценарии базы данных, и имена всех пользователей удаляются. Там нет хорошего способа бросить это обратно. Резервное копирование может быть восстановлено, но когда это было сделано резервное копирование, и у каких-либо пользователей в системе с момента этой резервной копии? Какие данные будут потеряны, если резервное копирование восстановлено?
Проблемы с развертыванием ручной базы данных
Перед тем, как работать на развертывании осьминога, я был ведущим разработчиком о системе возникновения кредита для крупного финансового учреждения в Соединенных Штатах. В любой момент, когда в полете были сотни миллионов долларов кредитов. Это были большие кредиты, которые требовали многих людей работать над ними. Каждый человек может потратить где угодно от пятнадцати минут до часа на кредит. Финансовый директор мог потратить полчаса ввода финансовых результатов клиента, и андеррайтер может провести час исследования клиентов и размещения заметки и условий на кредит. Само собой разумеется, восстановление резервной копии базы данных было последним средством. Говорят людям, которые они должны повторно ввести информацию, может произойти только так много раз, прежде чем они захотят охотиться за мной.
Мы имели автоматическое развертывание кода, но сценарии Delta базы данных были вручную созданы разработчиком базы данных до развертывания. Для них было распространено провести один или два полных рабочих дня, надевая сценарии вместе. Это ручное создание также означало, что может произойти очень мало тестирования. Когда скрипт бежал в производстве, это было, скорее всего, впервые он когда-либо бегил. Мы также использовали инструменты, такие как SQL Redgate SQL и протестированы на восстановленных резервных копиях, когда это возможно, но это может сделать так много.
Благодаря риску развертывания могут произойти только после нескольких часов, что означало вечера или выходные, но это означало, что мы могли бы взять резервные копии для отката. В дополнение к Dev Team выполняет развертывание, у нас также было DBA и Operations Online Online. Оперативные лица должны были дождаться, пока DBA запускает все скрипты, что может занять секунду или двадцать минут, чтобы закончить.
Риски и трудности вокруг планирования означали, что мы могли только развернуть основные выпуски один раз в квартал, с незначительными исправлениями ошибок, выполняемых между ними. После крупного выпуска мы обычно имели несколько релизов исправлений ошибок, как правило, потому что некоторая смена схемы была пропущена. Развертывание раз в квартале означало много изменений, были введены во все одновременно. Проверка изменений заняла много времени, и для каждого выпуска была обыкновенная за два или три часа.
Изменения схемы базы данных были пропущены, потому что не было источника правды для базы данных. Индекс может существовать в предварительном добыче, но не QA, поэтому какая среда была права? Когда был добавлен этот индекс? Кто это добавил? Чтобы соединить это, база данных была закрыта до 6000 объектов в нем (в основном Crud хранится процедуры). Разработчик базы данных должен был прибегать к отслеживанию всех изменений вручную. 80% времени разработчик базы данных сделал изменения, а другой 20% разработчик сделал изменение. Если разработчик базы данных был в тот день, мы пытались помнить, чтобы отправить им изменения, но подумайте обо всех изменениях, которые вы сделали в свой код в последнем квартале. Вы помните все их?
В двух словах у нас была вся эта автоматизация, за исключением самой важной части приложения. Точно тот же код был проверен несколько раз, когда он перемещается через среды. Уникальная база данных Delta Script была создана вручную на окружающую среду. Не было никакого источника истины для схемы базы данных, а DBA вытащил свои волосы, пытаясь сохранить все, что работает.
Подвести итоги наших вызовов:
- Среда были разными.
- Пользовательские сценарии были созданы на окружающую среду.
- Объекты базы данных существовали в одной среде, а не другой.
- Развертывание заняло часы.
- Большой взрыв Ежеквартальные релизы с несколькими релизами исправлений ошибок.
- Изменение отслеживания вручную.
Управление изменением базы данных было диким задом.
Автоматизация развертывания базы данных
Что-то должно было дать. Изменения базы данных должны были перейти в исходный элемент управления, и эти скрипты должны быть упакованы и автоматически запускаться во время развертывания. После большого обсуждения, исследования и тестирования мы приземлились на инструменте. Сам инструмент не важен. Что важно, это то, что мы автоматизировали развертывание базы данных.
Воздействие было заметно почти немедленно.
Наличие базы данных в контроле источника позволило нам увидеть, когда кто-то сделал изменения. Мы могли бы связать его в истории, мы знали, почему изменение было сделано, и мы устанавливаем его, чтобы изменения, которые не были в контроле источника, были удалены. Если индекс был в QA, но не в исходном управлении, мы удалили его. Это было немного резко, но он гарантировал, что схема базы данных соответствует тому, что было в контроле источника.
Аварийные исправления, которые были связаны с случайным представлением или хранимой процедурой, пропущенной почти до нуля. Мы устанавливаем шаг ручного вмешательства в развертывании осьминога, что позволило нам просмотреть и утверждать сценарии Delta базы данных до развертывания. То, что все действительно понравилось в шаге ручного вмешательства, была возможность отменить развертывание в случае неожиданной смены базы данных, появляющихся в Delta Script. Наличие того, на месте помогло всем, разработчикам, QA и DBAS доверяют процессу.
Уверенность в развертывании началось увеличиваться. Вскоре мы делали развертывание один раз в месяц. Затем один раз в неделю. Особенности могут быть доставлены пользователю, как только они передали проверку на QA и владельцу бизнеса. Ошибка может быть сообщена, и исправление может быть в руках пользователя, как только она прошла проверку. Мы были выпущены так часто число изменений в соответствии с выпуском значительно сократилось, а развертывание прошло от двух до трех часов до пяти до двадцати минут.
Помещая все это в развертывании осьминога, имело большую выгоду от предоставления DBAS и операционной команды своих ночей и выходных назад. Теперь они могли запланировать развертывание, и им пришлось только пойти в интернет, если что-то пошло не так.
Этот пост был изначально опубликован в Octopus.com Отказ
Оригинал: «https://dev.to/octopus/why-consider-database-deployment-automation-4fmn»