Это часть второй статьи, посвященная моему предыдущему сообщению о нулевом времени простоя с помощью плагина CF Autopilot . Я настоятельно рекомендую вам прочитать первую часть, прежде чем читать этот пост, но если вы ленивы, я остановлюсь здесь на концепциях высокого уровня.
Обзор части 1 (Quick Refresher)
В первой части мы рассмотрели, что такое развертывание с нулевым временем простоя и почему оно важно. Давайте кратко рассмотрим это снова.
Нулевое время простоя — это то, на что они похожи. Вы обновляете производство без простоя. Это не всегда так просто. В контексте этого поста мы поговорим о том, как выполнить развертывание без простоев в Cloud Foundry.
По сути, это небольшая уловка, чтобы воспользоваться преимуществами того, как Cloud Foundry работает под одеялом. Прежде чем мы перейдем к этому, есть несколько предостережений, которые мы должны обсудить в первую очередь. Чтобы успешно использовать развертывания с нулевым временем простоя, вы должны были следовать рекомендациям 12 Factor App . Это обеспечит горизонтальное масштабирование вашего приложения и возможность его развертывания таким образом, что это приведет к нулевому времени простоя. Ниже приведены некоторые основные моменты, которые вы должны соблюдать.
- Не храните сессии на диске или в памяти. Храните их в какой-либо общей базе данных или файловой системе. Это может быть ваша любимая база данных или база данных в памяти.
- Не храните информацию о конфигурации в вашем приложении или на диске. Вы должны хранить информацию о конфигурации вашего приложения в переменных окружения.
- Это, наверное, самое важное, ваше приложение должно быть прямым и обратно совместимым со схемой вашей базы данных… Скажите что? Да, вам нужно доверить своим разработчикам управление схемой базы данных из вашего кода. Если вы используете реляционную базу данных, вам понадобится какая-то платформа для выполнения миграции базы данных за вас. Однако с реляционными базами данных не все так просто … Если у вас большая миграция баз данных, НЕ ИСПОЛЬЗУЙТЕ МИГРАЦИИ, КОТОРЫЕ БУДУТ ПРЕРЫВАТЬ ДВИЖЕНИЕ! Выполняйте их медленно с течением времени, когда миграции не влияют на пользователей и трафик. У Yahoo было серьезное обновление приложений, и им потребовалось 6 месяцев, чтобы выполнить миграцию, чтобы избежать влияния на пользователей и отключения. Помните, что мы не отключаемся … Если вы находитесь на земле NoSQL, ваша жизнь станет проще.Просто пересмотрите свой API и обучите своих разработчиков прямой и обратной совместимости данных.
Важность нулевого простоя развертывания
Так почему же развертывание без простоев так важно? Ответ прост, чтобы ваш сайт / приложение работало, чтобы вы могли зарабатывать деньги! Ну, это может быть немного упрощено, но в основном все сводится к поддержанию вашего приложения, чтобы вы могли продолжать делать то, что вы делаете лучше всего, и, надеюсь, это включает в себя зарабатывание денег. Если вы посмотрите, например, на Facebook, они вводят код в производственные недели и месяцы, прежде чем какая-либо функция будет представлена общественности. Сначала они тщательно тестируют функции на сотрудниках, а затем медленно внедряют эти функции в остальной мир. Это ключевой момент — узнавать о новостях перед вашими клиентами и получать отзывы от них. Если это работает, это замечательно, но если это не так, по крайней мере, вы знаете об этом за короткий промежуток времени, так что вы можете удалить его и повернуть, чтобы пойти в другом направлении. Текущий ландшафт настолько быстрый, что, если вы не получите какую-то функцию,ваше соревнование может победить вас.
Как это работает?
Итак, давайте рассмотрим, что должно произойти для развертывания без простоев в Cloud Foundry. Для использования пошагового руководства приложение в настоящее время принимает трафик myapp.mybluemix.net
.
- Разверните свое приложение или используйте текущее приложение. В настоящее время ваше приложение принимает трафик
myapp.mybluemix.net
. - Разверните новую версию своего приложения в
myapp-temp.mybluemix.net
. В настоящее время запущено две версии вашего приложения.myapp.mybluemix.net
все еще принимает производственный трафик. Новое приложениеmyapp-temp.mybluemix.net
является отдельным, его можно указать на ваши производственные ключи API и базы данных на данный момент. - Выполните тесты дыма на новой версии приложения. Некоторые люди говорят, что этот шаг не является обязательным, но для меня это не так. Это ключ, чтобы убедиться, что не было никаких странных регрессий или проблем слияния, они МОГУТ произойти …
- Сопоставьте производственный трафик с новой версией вашего приложения. На этом этапе старая версия вашего приложения и новая версия получают производственный трафик.
- Отключите производственный трафик от старой версии приложения. Вы также можете при желании удалить старую версию. На этом этапе новая версия становится рабочей, и ТОЛЬКО она получает трафик. Новая версия все еще имеет два URL-адреса,
myapp.mybluemix.net
иmyapp-temp.mybluemix.net
. - Удалите временный маршрут
myapp-temp.mybluemix.net
из новой версии вашего приложения.
Хотя это можно записать в сценарии, на самом деле в этом нет необходимости, для этого есть плагин Cloud Foundry CLI.
Автопилот Плагин
Недавно CLI Cloud Foundry начал поддерживать плагины. Это Святой Грааль для CF, и вы можете начать делать забавные вещи. В этом случае самое интересное — автоматизировать сложные, возможно, подверженные ошибкам, шаги выше. Как разработчик, если я смогу что-то автоматизировать и снизить вероятность того, что что-то пойдет не так, я в полном восторге. Если вы сделаете это, ваш ИТ-отдел будет любить вас.
Плагин выполняет описанные выше шаги для вас, чтобы выполнить развертывание с нулевым временем простоя.
В первой части мы развернули наше приложение вручную в Bluemix с использованием плагина автопилота локально, в этом уроке мы собираемся использовать Codeship для автоматизации нашего конвейера непрерывной доставки, чтобы использовать плагин для развертывания с нулевым временем простоя.
Настройка Codeship
Сначала убедитесь, что вы зарегистрировали учетную запись Codeship, чтобы сделать это здесь . Когда я зарегистрировался, я нажал «Зарегистрироваться с помощью github», убедитесь, что вы делаете это, чтобы Codeship мог проходить аутентификацию с вашей учетной записью Github.
После того, как вы вошли в систему, нажмите «Настроить новый проект», появится экран, подобный приведенному ниже.
Нажмите на кнопку слева. Если вы зарегистрировались под своей учетной записью Github, она будет аутентифицировать вас с помощью Github, если у вас ее нет, вам потребуется подключить свою учетную запись к Github.
Как только вы это сделаете, вы получите экран, как показано ниже. Codeship покажет вам все проекты, к которым у вас есть доступ.
Нажмите на репо, который вы хотели бы использовать.
Затем вы попадете на экран, который попросит вас настроить конвейер.
Для начала нам нужно удалить тестовый конвейер, для этого нажмите «Удалить». Если у вас были модульные тесты, вы можете запустить их здесь, например grunt
.
Далее, так как этот пример — проект Node.Js, мы хотим убедиться, что модули узлов верны, мы хотим запустить npm install
здесь. Нам нужно очистить начальные команды настройки стартера, которые были выделены ниже.
Теперь это должно выглядеть следующим образом.
Обратите внимание, что если вы используете другой язык, вам нужно запустить соответствующий установщик зависимостей, например, для Java mvn install
.
Наконец, нажмите «Сохранить и перейти к панели инструментов».
Нажмите «Настройки проекта» в правом верхнем углу, затем нажмите «Переменные среды». Вы попадете на экран, как показано ниже.
Вам нужно настроить пару переменных среды, чтобы это работало.
- CF_API
- CF_SPACE
- CF_ORG
- CF_USERNAME
- CF_PASSWORD
Ниже приведен снимок экрана с настройками.
Далее, нажмите развертывание слева и введите «master» без кавычек для имени ветви и нажмите «Сохранить настройки конвейера».
Нажмите «Пользовательский скрипт».
Вставьте следующий код, замените myapp
его именем вашего приложения.
Примечание. Для этого необходимо, чтобы приложение имело manifest.yml
go get github.com/concourse/autopilot
cf install-plugin $GOPATH/bin/autopilot
cf login -a ${CF_API} -u ${CF_USERNAME} -p ${CF_PASSWORD} -o ${CF_ORG} -s ${CF_SPACE}
cf zero-downtime-push myapp -f manifest.yml
Это должно выглядеть следующим образом.
Нажмите «Создать».
У вас все настроено. В следующий раз, когда вы сделаете git push на Github, ваше приложение будет автоматически развернуто в Bluemix!
Я хотел бы услышать ваши отзывы и любые ваши предложения, пожалуйста, свяжитесь со мной в Twitter @jsloyer