Abordările tradiționale „big bang” ale dezvoltării software sunt incompatibile cu flexibilitatea ridicată, agilitatea și cerințele de implementare continuă ale platformelor software cloud și DevOps de astăzi.
Pur și simplu nu este suficient să pregătiți o listă de verificare cu pașii manuali de executat în timpul implementării versiunii de producție. Dacă faci asta, nu ești cu adevărat agil și nici nu ești un DevOps adecvat.
Cuprins
Implementarea albastru-verde: o prezentare generală
Implementarea Blue-Green este o abordare a implementării software care reduce timpul de nefuncționare și riscul noilor versiuni de software prin crearea a două medii identice: activ (albastru) și inactiv (verde).
Mediul activ este locul în care rulează versiunea curentă a software-ului, iar utilizatorii generează trafic de producție. Mediul inactiv este locul în care noua versiune a software-ului este implementată și testată.
Odată ce noua versiune este testată și gata, traficul este comutat din mediul activ în mediul inactiv, transformându-l în noul mediu activ. Puteți repeta acest proces după cum este necesar.
Sursă: docs.aws.amazon.com
Contextul DevOps
Implementarea Blue-Green se potrivește bine mentalității și proceselor DevOps, deoarece acceptă livrarea și implementarea continuă a software-ului, minimizând în același timp timpul de nefuncționare pentru utilizatorii de producție și eliminând riscul unei eșecuri a lansării în producție.
Averea a două medii identice face posibilă testarea și implementarea de noi versiuni de software fără a afecta mediul de producție actual. Aceasta înseamnă lansări mai rapide și mai frecvente, care este un aspect cheie al DevOps.
În plus, capacitatea de a comuta rapid traficul între medii este o condiție prealabilă principală pentru derularea rapidă în caz de probleme, ceea ce este, de asemenea, important într-un mediu DevOps.
Principiile cheie ale implementării albastru-verde
#1. Două medii identice
Implementarea albastru-verde necesită crearea a două medii identice. Asta înseamnă identic din punct de vedere al datelor și al proceselor. Unul este activ (albastru), iar celălalt este inactiv (verde).
Mediul albastru este locul în care utilizatorii de producție își desfășoară procesele de zi cu zi. Mediul verde este întotdeauna sincronizat cu cel albastru, dar testerii își rulează cazurile de testare acolo. Chiar dacă acest mediu nu este producția, rulați testele în condiții reale, deoarece este un mediu asemănător producției.
#2. Comutator de trafic
Odată ce noua versiune a software-ului este testată și gata, traficul este comutat din mediul activ în mediul inactiv, transformându-l în noul mediu activ.
Comutarea este instantanee. Toată implementarea este acum un lucru din trecut. Nu există o fereastră de oprire. Utilizatorii nu trebuie să facă nimic pentru a ajunge în noul mediu. Sunt redirecționate automat și toate în același timp.
Sursă: aws.amazon.com
#3. Rollback rapid
Abilitatea de a comuta rapid traficul între medii înseamnă, de asemenea, o revenire rapidă în caz de probleme. Acest lucru asigură un timp de nefuncționare minim, iar aplicația rămâne foarte disponibilă.
Dacă ceva nu merge bine cu mediul verde, toți utilizatorii vor reveni instantaneu la mediul albastru inițial stabil, fără niciun fel de fuzz.
#4. Testare automată
Testarea automată este un aspect cheie al implementării Blue-Green. Se asigură că noua versiune a software-ului este testată temeinic înainte de a fi implementată în mediul activ.
Dacă nu aveți o cantitate semnificativă de teste automatizate în sistemele dvs. (inclusiv teste unitare, teste funcționale și teste de regresie cel puțin), atunci probabil că nici măcar nu are sens să vă gândiți la implementarea implementării Blue-Green.
Lipsa testelor automate vă va încetini dramatic. Timpul necesar pentru a testa noul mediu (verde) va fi atât de lung, încât până când veți putea trece la mediul verde, acesta va fi deja „prea vechi” din perspectiva ciclului de viață al dezvoltării software.
#5. Livrare continuă
Implementarea Blue-Green face parte dintr-o conductă de livrare continuă, ceea ce înseamnă în cele din urmă lansări mai rapide și mai frecvente de software în producție.
Puteți face schimbarea de îndată ce sunteți gata să testați noua versiune de software în mediul verde. Deoarece implementarea a fost deja făcută și trebuie să faceți doar schimbarea traficului în sine, este atât de rapid încât puteți face acest lucru în fiecare zi. Presupunând că sunteți rapid și în activitățile de testare, evident.
Ciclul de viață tipic
Platforma care rulează implementarea Blue-Green are propriul ciclu de viață specific de pași și procese de rulat. Din asta constă de obicei:
Implementarea conductelor CI/CD
Implementarea implementării Blue-Green într-o conductă DevOps CI/CD va fi un proces natural.
O condiție prealabilă puternică este să aveți deja acele două medii identice. Deoarece acesta va fi un proces automatizat, puteți utiliza infrastructura ca instrument de cod, cum ar fi AWS CloudFormation sau chiar agnostic de nor Terraform scripturi pentru a crea/recrea/actualiza mediile pentru tine în conductele automate.
Odată ce aveți acest lucru, este un pas relativ ușor către crearea unui proces de implementare complet automatizat. Pur și simplu reutilizați conductele deja existente pentru crearea mediului albastru și verde. Cu toate acestea, de data aceasta trebuie să includeți și procesele de testare.
Procesul de comutare a traficului pe care îl puteți automatiza cu instrumente precum AWS Elastic Load Balancer sau NGINX. Aceasta implică actualizarea echilibrului de încărcare sau a setărilor DNS pentru a direcționa traficul către mediul verde odată ce noua versiune a software-ului este testată și gata.
Următoarea piesă a puzzle-ului este monitorizarea. Pentru asta, folosiți instrumente precum AWS CloudWatch, New Relicsau Datadog.
În cele din urmă, reutilizați conductele existente chiar și pentru dezafectarea vechiului mediu albastru. Depinde de dvs. dacă executați mai întâi distrugerea pentru toate serviciile și componentele înainte de a le recrea de la zero sau, alternativ, puteți doar să actualizați scripturile pentru fiecare serviciu din lanț. De obicei, distrugerea și recrearea este o opțiune mai sigură, deoarece cu actualizarea aveți mult mai multe cazuri de colț de luat în considerare.
Cele mai bune practici de implementare Blue-Green
Sunteți curios despre cum să utilizați cât mai bine implementarea Blue-Green? Iată câteva dintre sfaturile care vin din practică.
Aveți o strategie solidă de migrare a bazelor de date
Când implementați o nouă versiune a software-ului, este important să vă asigurați că schema bazei de date este actualizată corect. Utilizați o strategie de migrare a bazei de date, cum ar fi Calea de zbor sau Liquibase pentru a gestiona modificările schemei bazei de date.
Utilizați un instrument de analiză Canary
Chiar dacă implementarea Canary este o abordare alternativă, puteți utiliza totuși unele dintre tehnicile sale pentru a vă perfecționa implementarea Blue-Green.
Utilizați un instrument de analiză canar, cum ar fi Kayenta sau Spinnaker pentru a analiza performanța noii versiuni a software-ului într-un mediu real. Aceasta implică compararea performanței noii versiuni a software-ului cu performanța versiunii vechi a software-ului.
Utilizați un cadru de comutare a funcțiilor, cum ar fi Togglz pentru a activa sau dezactiva funcțiile din noua versiune a software-ului. Acest lucru permite o lansare treptată a noilor funcții și permite derularea rapidă, dacă este necesar.
Utilizați un Load Balancer cu verificări de sănătate
Utilizați un echilibrator de încărcare, cum ar fi AWS Elastic Load Balancer sau NGINX cu verificări de sănătate pentru a vă asigura că traficul este direcționat numai către instanțe sănătoase. Acest lucru asigură că aplicația rămâne foarte disponibilă și că timpul de nefuncționare este minimizat.
Folosiți un plan de rollback cu Rollback automat
Aveți un plan de rollback în vigoare în caz de probleme și automatizați procesul de rollback folosind un instrument precum AWS CodeDeploy sau Octopus Deploy. Acest lucru asigură că timpul de nefuncționare este minimizat și că aplicația rămâne foarte disponibilă.
Acest lucru se aplică mai ales mediului verde ori de câte ori descoperiți o problemă semnificativă cu noua versiune.
Nu aveți nevoie de un plan de rollback pentru mediul albastru, deoarece acesta rămâne neatins de comutator și vă puteți întoarce la acest mediu stabil oricând este necesar și instantaneu.
Provocări cu implementarea albastru-verde
Implementarea implementării Blue-Green poate prezenta unele provocări pentru echipele de dezvoltare. Iată câteva provocări tipice:
Diferența dintre desfășurarea albastru-verde și Canary
În timp ce diferența față de procesele tradiționale de implementare este destul de evidentă (nu există două medii paralele care rulează cu versiuni diferite de software în procesele tradiționale de implementare), diferența față de implementarea Canary ar putea fi puțin mai interesantă.
Implementarea albastru-verde înseamnă două medii (albastru și verde). Dar, în același timp, cele două medii sunt în mod constant sincronizate în ceea ce privește datele. Odată ce noua versiune este testată și considerată gata, traficul este comutat din mediul activ în mediul inactiv, transformându-l în noul mediu activ. Nu petreceți timp implementând cod nou și nu este implicat niciun timp de întrerupere a producției. Toți utilizatorii de producție lucrează tot timpul în mediul activ în prezent și nici măcar nu observă schimbarea.
Implementarea Canary implică implementarea unei noi versiuni a software-ului unui subset mic de utilizatori, în timp ce majoritatea utilizatorilor sau serverelor continuă să utilizeze versiunea actuală. Aceasta este o implementare graduală, mai degrabă decât o schimbare completă. Testerii sunt, în acest caz, utilizatori direcți de producție, chiar dacă doar un subset definit dintre ei. Acest grup testează în mod activ noua versiune cu procesele de producție, iar când va fi stabilă, noua versiune se va răspândi la restul utilizatorilor.
Deci, care este mai bun?
Răspunsul unui consultant „depinde” se potrivește cel mai mult aici, pe cât de rău ar putea suna.
Dacă prioritatea sistemului dvs. este disponibilitatea ridicată mai presus de toate, atunci implementarea Blue-Green va fi alegerea dvs.
Dacă preferința dvs. puternică este un feedback mai rapid și o lansare mai controlată (deși mai lentă) a noii versiuni de sistem, atunci implementarea Canary are avantaje față de Blue-Green.
Important este că amândoi sunt suficient de agile pentru a se considera suficient de buni pentru crearea serioasă a sistemului DevOps.
Studii de caz
Netflix folosește implementarea Blue-Green pentru a implementa noi versiuni ale serviciului său de streaming. Utilizând implementarea Blue-Green, Netflix poate implementa versiuni noi ale serviciului său fără a afecta experiența utilizatorului. De fapt, Netflix folosește și implementarea Canary în paralel pentru alte cazuri, așa că nu este nerealist să combinați abordări diferite ale implementării DevOps sub același acoperiș.
De asemenea, Amazon și Etsy folosesc implementarea Blue-Green pentru a implementa versiuni noi ale platformei lor de comerț electronic.
Un alt caz este LinkedIn, care folosește implementarea Blue-Green pentru a implementa versiuni noi ale platformei sale de rețele sociale.
Nu în ultimul rând, IBM folosește implementarea Blue-Green pentru a implementa noi versiuni ale platformei sale cloud.
Aceste companii au implementat cu succes implementarea Blue-Green în infrastructurile platformei lor și servesc ca un bun exemplu pentru alții.
Cuvinte finale
La fel ca și Canary, implementarea Blue-Green se străduiește pentru cea mai bună optimizare a proceselor și metodologiilor agile deja existente pentru a oferi software nou fără probleme, astfel încât nimeni să nu-l observe deloc. Acesta este scopul final al unor astfel de abordări. Livrezi în mod constant și foarte des, dar nimeni nu știe despre asta, nimeni nu o observă și, până la urmă, nimănui nu-i pasă.
Ar putea fi puțin frustrant pentru echipa de dezvoltare faptul că nu există bârfe în jurul companiei despre ultimele lor lansări. Dar dacă mă întrebați pe mine, acesta este exact cel mai bun serviciu pe care îl puteți oferi. Nimeni nu vorbește despre asta, dar toată lumea o folosește zi de zi.
Apoi, consultați întrebările și răspunsurile frecvente la interviul DevOps.