Что такое шаблоны развертывания?
Шаблон развертывания — это автоматизированный способ плавного развертывания новых функций приложений для пользователей. Соответствующий шаблон развертывания помогает свести к минимуму время простоя. Некоторые шаблоны также позволяют постепенно развертывать новые функции. Таким образом, вы можете проверить новые функции с помощью выбора пользователей, прежде чем сделать эти функции доступными для всех.
В этом разделе вы узнаете о некоторых распространенных шаблонах развертывания. Вы также узнаете, как служба приложений Azure поможет реализовать шаблон, который выбирает команда Tailspin.
Утреннее собрание
Команда Tailspin чувствует себя хорошо. Их конвейер ускорил их процесс. Команда имеет среду разработки, в которой они могут интегрировать веб-приложение с базой данных. Тим и Амита рады иметь автоматизированные тесты, которые упрощают их работу. Как правило, они видят меньше задержек и меньше ошибок.
Но есть, как всегда, проблема. Давайте попадем на собрание команды, где Тим говорит.
Тим: Это так трудно держать всех счастливыми. Ирвин считает, что для выпуска новых функций требуется слишком много времени. Я не могу ничего сделать, пока руководство не утвердит выпуск и, на данный момент, нет плавного способа развернуть функции после того, как они дадут одобрение. Процесс не только длинный, но грязный. Работа выполняется вручную, из-за чего возникает время простоя. Весь процесс может занять пять дней. Я знаю, что это слишком долго, но что я должен сделать? Может быть, если я просто выпью больше кофе, решение придет ко мне.
Энди: Кофе является важным для эффективного решения проблем, без сомнения.
Я думаю, что необходимое решение является хорошим шаблоном развертывания. Модель развертывания — это автоматизированный способ выполнения перехода. Это то, как мы перемещаем программное обеспечение с этапа предфинальной подготовки в производство.
Выбор правильного шаблона определенно поможет вам, например, сведя к минимуму время простоя. Еще одним преимуществом шаблона развертывания является то, что это дает нам возможность выполнять тесты, которые действительно должны произойти в рабочей среде.
Энди начинает писать на доске.
Ниже приведены возможности, которые мы должны рассмотреть:
- Сине-зеленое развертывание
- Канареарные выпуски
- Переключатели функций
- Темные запуски
- Тестирование A/B
- Развертывание прогрессивной экспозиции
Давайте кратко обсудим каждый шаблон.
Развертывания с сине-зеленым цветом
сине-зеленое развертывание снижает риск и время простоя, используя две идентичные среды. Эти среды называются синей и зелеными. В любое время только одна из сред находится в режиме реального времени. Развертывание сине-зеленого цвета обычно включает маршрутизатор или подсистему балансировки нагрузки, которая помогает управлять потоком трафика.
Предположим, синий — это прямой эфир. При подготовке нового выпуска мы делаем последние тесты в зеленой среде. После работы программного обеспечения в зеленой среде мы просто переключим маршрутизатор, чтобы все входящие запросы пошли в зеленую среду.
Развертывание по схеме "blue-green" также дает нам быстрый способ выполнить откат изменений. Если что-то идет не так в зеленой среде, то мы просто переключим маршрутизатор обратно в синюю среду.
Канареарные выпуски
канарьевой версии — это способ выявления потенциальных проблем на раннем этапе, не подвергая всех пользователей воздействию проблем. Идея заключается в том, что мы предоставляем новую функцию только небольшому подмножествам пользователей, прежде чем сделать его доступным для всех.
В канарной версии мы отслеживаем, что происходит при выпуске функции. Если в выпуске есть проблемы, мы внедряем исправление. После того, как выпуск канарной версии, как известно, будет стабильным, мы переместим его в фактическую рабочую среду.
Переключатели функций
Используйте функцию для переключения, чтобы "перевернуть переключатель" во время выполнения. Мы можем развертывать новое программное обеспечение без предоставления других новых или измененных функциональных возможностей нашим пользователям.
В этом шаблоне развертывания Мара и я создаю новые функции за переключателем. При выпуске новой версии функция выключена, чтобы она не влияла на продукт. В зависимости от того, как мы настраиваем переключатель, можно переключить переключатель на "вкл." и предоставить функцию, которую мы хотим.
Например, мы можем сначала предоставить функцию нескольким пользователям, чтобы узнать, как они реагируют. Случайный выбор пользователей видит этот функционал. Или мы могли бы просто дать функции возможность стать доступной для всех.
Но этот шаблон развертывания может принести больше пользы Маре и мне, чем кому-либо другому. Большое преимущество паттерна фичи переключателей заключается в том, что он помогает нам избежать слишком большого количества ветвлений. Слияние ветвей может быть болезненным.
Темные запуски
темный запуск аналогичен канареечному релизу или переключению флажка функции. Вместо предоставления новой функции всем пользователям в темном запуске мы выпускаем эту функцию для небольшого набора пользователей.
Эти пользователи не знают, что они тестируют функцию для нас. Мы даже не подчеркиваем новую функцию для них. Вот почему это называется темным запуском. Программное обеспечение постепенно или ненавязчиво выпущено пользователям, чтобы мы могли получать отзывы и тестировать производительность.
A/B-тестирование
A/B тестирование сравнивает две версии веб-страницы или приложения, чтобы определить, какая из них лучше. Тестирование A/B похоже на классический эксперимент.
В тестировании A/B мы случайным образом показываем пользователям две или более версии страницы. Затем мы используем статистический анализ, чтобы решить, какой вариант лучше подходит для наших целей.
Развертывание прогрессивной экспозиции
Прогрессивное развертывание иногда называется развертыванием на основе кольца. Это еще один способ ограничить влияние изменений на пользователей, убедившись, что эти изменения действительны в рабочей среде.
Кольца в основном являются расширением канарной стадии. Канарный выпуск осуществляется на этапе для оценки эффекта. Добавление еще одного кольца — это по сути та же самая идея.
В кольцевой модели развертывания сначала мы развертываем изменения у клиентов, терпимых к рискам. Затем мы постепенно расширяем охват на более широкую группу клиентов.
Реализация сине-зеленого развертывания
Энди смотрит на Тима
Энди: Это много, я знаю. Вы хотите занять некоторое время, чтобы подумать об этом? Или ты и я могли...
Тим: сине-зелёный.
Все в комнате смеются.
Мара: Это кофе так влияет?
Тим: Переключатели функций изменяют ваш с Энди способ работы. Давайте сделаем одну вещь за раз. Методы, которые постепенно предоставляют функцию, требуют статистического анализа или переключения функций.
Сине-зеленое развертывание — это то, что я могу контролировать. Переключение маршрутизатора просто. Это легко и звучит безопасно. А в сине-зеленом развертывании менеджмент имеет среду для оценки. Когда они дают ОК, мы можем легко переключиться. Начнем с этого.
Таким образом, вопрос заключается в том, как мы реализуем сине-зеленое развертывание в нашем конвейере?
Что такое слоты развертывания?
Энди: Так как мы используем службу приложений Azure, мы можем воспользоваться слотами развертывания. Слоты развертывания запускают приложения с их собственными именами узлов.
Я знаю, что мы еще не готовы развернуть веб-сайт Space Game в рабочей среде в рамках автоматизированного конвейера. Но, в качестве теста, мы можем добавить слот для развертывания в нашей среде стадии.
Вместо настройки балансировщика нагрузки или маршрутизатора можно просто добавить второй слот в экземпляр App Service, который мы используем в существующей Staging среде. Мы можем вызвать основной слот синий и дополнительный слот зеленый.
Таким образом, мы можем развертывать новые функции без простоя. Мы переключим приложение и его конфигурацию между двумя слотами развертывания. В основном мы переключим IP-адреса двух слотов.
Тим: мне нравится! Этот вариант можно назвать вариацией развертывания blue-green, развертывание без простоев.
Энди: Отлично! Тим и я буду работать над реализацией этого шаблона развертывания. Мы все можем встретиться позже, чтобы увидеть результаты.
Рекомендации по использованию флагов компонентов
Флаги возможностей были одним из методов управления частотой выпусков, которые рассматривала команда. Команда решила не использовать флаги функций, но многие люди нашли их полезными. В этом разделе содержатся дополнительные сведения о флагах функций.
Флаги функций, иногда называемые переключателями функций, позволяют изменять работу системы без изменения кода. Эти флаги позволяют отправлять новый код в центральную ветвь разработки и развертывать код, но не обязательно функциональный. Флаги обычно реализуются в качестве значения переменных, управляющих условной логикой.
Представьте, что ваша команда работает в централизованной ветви развития банковского приложения. Вы решили выполнить всю работу в главной ветви, чтобы избежать сложных операций слияния позже. Но вы сталкиваетесь с проблемой. Вы существенно изменяете расчеты процентов, и люди полагаются на этот код каждый день. Что еще хуже, изменения займут у вас несколько недель. Вы не можете оставить основной код неисправным настолько долго.
В этом сценарии флаг функции может быть хорошим решением. Вы можете изменить код, чтобы пользователи, у которых флаг функции не установлен, могли продолжать использовать исходный код вычисления процентов. Между тем у вашей команды действительно установлен флаг функции, что позволяет им видеть код, который они изменяют.
Другим типом фича-флага является флаг выпуска . Представьте, что после завершения работы с кодом вычисления процентов вы хотите попробовать его, прежде чем выпустите его публично. У вас есть группа пользователей, которые хорошо знакомы с новым кодом и любыми возможными проблемами. Сначала вы позволите им попробовать эту функцию. Вы изменяете конфигурацию таким образом, чтобы они также имели набор флагов компонентов и могли протестировать новый код. При возникновении проблем можно быстро отключить флаг.