Blue-green розгортання - це стратегія управління релізом, яка знижує час і ризик, що працює двома ідентичними виробничими середовищами - в даний час обслуговує трафік (синій) і одну свічку (зелений). Коли нова версія програми готова, вона розгортається в неактивному середовищі, ретельно протестується, а потім переключається трафік. Цей підхід усуває необхідність у обслуговуванні вікон, дозволяє миттєвий зворотний відключення і забезпечує чистий поділ між старішим і новим кодом. Спочатку популярний Мартін Фоулер і Джез Хмлі, синьо-зелене розгортання стала кутовимстоном сучасних DevOps практики, особливо коли парі з надійними трубопроводами CI / CD.

Чому синьо-зелені розгортання матриць

Традиційні методи розгортання — як прокат оновлень або канарних релізів — натягувати користувачів до часткової дальності або деградації під час переходу. Синьо-зелене розгортання адрес, що зберігає старе середовище, повністю оперативно до моменту підтвердження нового. Це дає командам впевненість у поширенні, навіть до місіонерських систем. Ключові переваги включають:

  • Zero-downtime розгортання: Без вікна часу, коли додаток недоступний.
  • Instant rollback: Зворотний трафік до старого середовища за секундами, якщо виникають проблеми.
  • Використовувати тестування у виробництві: Важко внести нову версію в умовах реального світу без впливу користувачів.
  • Спрощені міграції баз: може бути оброблений з обережним перетворенням схеми та сумісністю задньої частини.
  • Improved team Speed: Розробники можуть звільнити частіше з меншою побоюванням.

Інтеграція з CI / CD трубопроводами

CI/CD трубопроводи автоматизують будівництво, випробування та фази розгортання. При поєднанні з синьо-зеленим трубопроводом стає оркестратором перемикання навколишнього середовища. Типовий потік виглядає так:

  1. Будівельно-тестовий: Код-комісія запускає будівництво. Контрольні тести, тести інтеграції та сканування безпеки, що працюють в трубопроводі.
  2. Deploy to Inactive Environment: трубопровод розгортає артефакт для навколишнього середовища, що не обслуговує трафік (наприклад, зелений, якщо синій активний).
  3. Smoke and Acceptance Tests: Автоматизовані тести, що працюють на новому середовищі для перевірки функціональності, продуктивності та консистенції даних.
  4. Switch Traffic: Оновлення балансу навантаження або запису DNS для маршруту всіх користувачів до нового середовища.
  5. Пост-Отримання: Перевірка здоров'я та моніторинг продовжуються на період охолодження.
  6. Cleanup (Optional):] Старе середовище зберігається як кінцева мета зворотного зв'язку або знищується після закінчення періоду охолодження.

Налаштування двох дентичних середовищ

Партільність навколишнього середовища є вирішальним. Сині та зелені середовища повинні бути ідентичні в апаратних, конфігураційних, мережевих топології та даних, з винятком версії програми. Використовуйте інфраструктуру як код (IaC) інструменти, такі як Terraform, CloudFormation або Pulumi для забезпечення обох середовищ з одного шаблону. Переробка бази даних повинна бути встановлена таким чином, щоб обидва середовища поділяють однакові дані (або мають стратегію міграції, яка дозволяє безпечні зміни схемі.

Розгляд бази даних

Державні послуги — особливо бази даних — складні синьо-зелені розгортання. До умовних підходів відносяться:

  • Backward-сумісні міграції: Застосовувати зміни, які працюють як з старим, так і новим кодом (наприклад, додати стовпці, але не скидати їх).
  • Релікація та читання реплікацій: Точка обох середовищ до тієї ж бази даних, але забезпечити записи тільки від активного середовища.
  • Schema-per-environment: Isolate бази даних для кожного середовища та синхронізації ручок з інструментом міграції.

Інструменти, як Flyway або Liquibase, можуть керувати незрівнянними міграції, які безпечні для синього-зеленого потоку.

Автоматизування трафіку

Перемикач трафіку може бути реалізований на балансі навантаження (Layer 7), DNS (Layer 4/7), або рівня маршрутизатора. Для хмарних розгортання, послуг, таких як AWS ALB, Google Cloud Load Balancer або Kubernetes Service+Ingress роблять це прямоперед. CI/CD-провідник повинен викликати перемикач через API-телефони або оновлення конфігурації. Ключові висновки:

  • Охорона здоров'я перевірить:. Баланс завантаження повинен перевірити нове середовище, до прийняття трафіку.
  • Грацефф: Старе середовище повинно закінчитися в-світні запити перед виходом з обертання.
  • Session persistence: Якщо ваш додаток використовує липкі сеанси, переконайтеся, що перемикач не розбиває контекст користувача. Розглянемо зовнішні магазини сеансу (Redis, Memcached).

Інструменти, які спрощують синій-зелений з CI / CD

Різноманітність платформ CI/CD та інструментів розгортання мають рідну підтримку для синьо-зелених стратегій. Нижче наведено деякі з найпопулярніших:

Дженкіни з ansible або Spinnaker

Jenkins є дуже гнучким. Ви можете визначити кроки трубопроводу, які називаються нездатними відтвореннями для оновлення конфігурації балансу навантаження або використання вбудованої червоної / чорної стратегії. Spinnaker навіть забезпечує візуальну UI для ручного затвердження до перемикача.

GitLab CI з авто DevOps

GitLab Auto DevOps включає в себе вбудовану «зелену розгортання» етапу, коли розгорнуто до Кубернете. Він створює два розгортання (синій і зелений) і послуги, що закрили етикетки `activeSelector. GitLab документації] забезпечує покроковий посібник.

GitHub Дії з AWS CodeDeploy

AWS CodeDeploy підтримує синьо-зелені розгортання на рідному місці. Робочий потік GitHub Actions може відштовхувати код до S3 відро, а потім викликати ревізію програми CodeDeploy. Група розгортання автоматично визначає нові екземпляри, перевіряє здоров'я та зсув трафіку. AWS документація пояснює налаштування.

Арго Роли на Кубернеті

Argo Rollouts надає розширені стратегії розгортання, включаючи синьо-зелені. Він інтегрується з контролерами Ingress та сервісними сітками для автоматизації переміщення трафіку. Rollbacks є декларативними і може бути викликаний автоматично на основі метрики. Learn more about Argo Rollouts.

Кращі практики для розгортання виробничих підприємств

Реалізація синьо-зелених – це більше, ніж просто переключення серверів. Щоб уникнути поширених підводних каменів, слідуйте цими кращими практиками:

Автоматизувати все

Надання помилок. Весь трубопровод — від побудови для перемикання трафіку — це автоматизована. Використовуйте визначення регульованих трубопроводів (наприклад, `Jenkinsfile`, `.gitlab-ci.yml`, робоче покриття YAMLs) і забезпечують проведення випробувань автоматично на кожному розгортанні.

Використання прапорів функції

Комбінувати синьо-зелений з функціями прапорів для декупе розгортання з релізу. Ви можете розгортати код з новими функціями прихованих і дозволяють їм поступово через інструменти управління прапорами (LaunchDarkly, PostHog, Unleash). Це дозволяє відкочувати всю навколишнє середовище, якщо одна функція не зникає.

Впровадження комплексного тестування

Тести диму повинні перевірити основні відповіді на HTTP, підключення бази даних та критичні подорожі користувачів. Використовуйте синтетичні інструменти моніторингу (наприклад, перевірте, Синтетика Datadog) для запуску тестів на веб-переглядачі на неактивне середовище перед перемиканням. У тому числі тестування навантаження для зловживання регресивами продуктивності.

Моніторинг безперервно

Після перемикача, контроль за даними метрики, коефіцієнти помилок, затримки та бізнес КПІ. Використовуйте сповіщення (PagerDuty, Opsgenie) для запуску автоматизованого зворотного відключення, якщо порушення аномально пороги. Наприклад, якщо 5xxx збільшилися помилки на 50%, перевернути трафік до старого середовища.

Планування державних компонентів

Файли, завантаження користувачів, і робочі місця, необхідні для обережного поводження. Використовуйте зовнішні спільні сховища (S3, EFS) і розподілені кеши (Redis, Memcached), які можуть отримати доступ до обох середовищ. Для черги, забезпечення повідомлень не втратиться під час перемикача.

Визначення періоду охолодження

Після перемикання трафіку, тримайте старе середовище, яке працює за встановленим часом (наприклад, 30 хвилин) для швидкого зворотного відключення, якщо відкривається тонкий клоп. Після цього можна вимкнути його для економії витрат.

Виклики та як перезапустити Them

База даних Schema Міграції

Найбільший виклик - це зміна бази даних, які перебають сумісність. До послуг користувачів відносяться:

  • Використовуйте додаткові міграції тільки (податкові стовпчики, не скидаються їх).
  • Видаліть старі стовпчики в окрему, післяперемикання міграції.
  • Розгортання бази даних до нової версії програми, забезпечення старого коду може бути ще запущений.

Вартість

Запуск двох однакових виробничих середовищ, що подвійна інфраструктура, вартість. Міграції: використовувати менші екземпляри для неактивного середовища під час тестування або використовувати контейнеризація для обміну основними ресурсами. Хмарне автозакриття також може зменшити відходи.

Сесія та кеш-пам'яті

При переключенні трафіку, кеши холодні. Передвоєння нового середовища, об'ємуючи типові запити користувачів перед перемиканням. Інструменти, такі як Gatling або k6, можуть генерувати реалістичне навантаження.

Налаштування мережі

Правила брандмауера, записи DNS та SSL сертифікати повинні бути ідентичними по всьому середовищах. Використовуйте IaC для забезпечення консистенції. Якщо використовувати комутацію на основі DNS, обліковий запис для пропагації часу (TTL).

Приклад реального світу: Платформа електронної комерції

Для розгортання нових функцій щодня з’явилися нові можливості, які щодня знижуються. Вони прийняли синьо-зелене розгортання з наступним налаштуванням:

  • Дві групи автокалькуляційних станцій AWS (синій, зелений) за ALB.
  • Тераформа надання ідентичної інфраструктури.
  • GitLab CI-провід: будівництво, випробування, розгортання до зеленого, запуску ігрових випробувань диму, потім тригер ALB цільового групового перемикача.
  • Redis для сеансів, що поділяться на навколишнє середовище.
  • Переміщення бази даних: пересувна сумісна з Flyway.
  • Автоматичний зворотний дзвінок, якщо швидкість помилки > 1% за перші 5 хвилин.

Результат: частота розгортання зросла з щомісячної до тижневика, з нульовим випаданням в режимі реального часу протягом півроку.

Висновок

Синьо-зелене розгортання, коли інтегроване з сучасним CI / CD-провідником, пропонує потужний спосіб звільнити програмне забезпечення безпечно і часто. Він виключає час, дозволяє миттєвий зворотний відключення, і дає інженерам впевненість у швидкому відштовхуванні змін. Хоча проблеми, як міграції баз даних і інфраструктура, вони можуть бути керовані з обережним плануванням і правильним інструментом. Автоматично змонтувавши весь процес - від навколишнього середовища, що забезпечує перемикання трафіку, може досягти безперервної доставки з мінімальним ризиком. Починати невеликий, реалізувати доказ поняття з однією службою, і масштабувати звідти. Інвестиції в синьо-зеленому розгортанні окупається дивіденди при зниженому часі реагування інциденту і поліпшений досвід користувача.