Metoda de implementare Canary este o strategie de dezvoltare software care constă în lansarea progresivă a funcționalităților noi sau a actualizărilor. Această lansare se face mai întâi către un grup restrâns de utilizatori, înainte de a fi extinsă la întreaga bază de utilizatori.
Acest procedeu presupune crearea unei versiuni noi a software-ului, urmată de distribuirea acesteia către un grup select de utilizatori. În același timp, versiunea anterioară continuă să funcționeze pentru restul utilizatorilor. Echipa de dezvoltare va monitoriza cu atenție noua versiune, pentru a se asigura de stabilitatea și funcționalitatea acesteia conform specificațiilor.
În cazul în care totul funcționează corect, noua versiune este distribuită treptat unui număr mai mare de utilizatori, până când aceasta ajunge la întreaga audiență. Astfel, echipa proiectului reduce la minimum riscul introducerii de erori sau alte probleme care ar putea afecta simultan toți utilizatorii.
Obiectivul implementării Canary este reducerea riscului asociat introducerii unor funcționalități noi unui număr mare de utilizatori. Prin distribuirea graduală a schimbărilor către utilizatori, dezvoltatorii au posibilitatea de a observa performanța și stabilitatea noii versiuni. Ei pot realiza ajustările necesare înainte ca aceasta să fie lansată la toți utilizatorii, tranziția la noua versiune fiind astfel mult mai facilă.
Principii esențiale și avantaje
Sursa: martinfowler.com
Principalele elemente cheie ale implementării Canary sunt:
- Lansarea inițială a versiunii noi către un grup restrâns de utilizatori, urmată de distribuirea treptată către tot mai mulți utilizatori.
- Monitorizarea atentă a noii versiuni, pentru a garanta stabilitatea și performanța dorită.
- În cazul apariției unor probleme, revenirea rapidă și simplă la versiunea anterioară.
- Automatizarea procesului de implementare pe cât posibil, în vederea diminuării riscului de eroare umană.
Beneficiile implementării Canary în DevOps includ:
- Reducerea riscului de apariție a erorilor sau problemelor care ar putea afecta toți utilizatorii simultan, prin lansarea graduală a modificărilor.
- Obținerea rapidă a feedback-ului despre noua versiune, permițând dezvoltatorilor să efectueze ajustările necesare înainte de distribuirea la întreaga bază de utilizatori.
- Asigurarea că noua versiune respectă standardele de calitate, prin monitorizarea performanței și stabilității acesteia înainte de implementarea către toți utilizatorii.
- Creșterea încrederii dezvoltatorilor și a părților interesate în procesul de implementare, prin diminuarea riscului de introducere a problemelor care ar putea afecta experiența utilizatorilor.
Implementarea Canary: concept și terminologie
Sursa: cncf.io
Să analizăm succesiunea etapelor procesului.
Totul începe cu grupul Canary, format din primii utilizatori ai noii versiuni a sistemului. În paralel, există grupul de bază, din care fac parte toți ceilalți utilizatori care nu sunt incluși în grupul Canary.
Pe măsură ce utilizatorii Canary continuă să folosească noua versiune, implementarea Canary se extinde la tot mai mulți utilizatori, prin așa-numitul “Traffic Shifting”. Grupul Canary crește, în timp ce grupul de bază se micșorează, sistemul realizând astfel o lansare graduală.
Pe tot parcursul procesului, se înregistrează toate activitățile și rezultatele utilizării, generând date necesare dezvoltatorilor pentru feedback. Aceștia vor interveni și vor remedia problemele, sau vor reveni la versiunea de bază, dacă problemele nu pot fi rezolvate în momentul respectiv.
Automatizarea activităților de monitorizare și implementare permite dezvoltatorilor să se concentreze exclusiv asupra rezolvării problemelor.
Este posibil ca grupul Canary să identifice unele aspecte negative ale noii versiuni, alături de cele pozitive. Astfel, dezvoltatorii pot semnala funcționalitățile problematice, pentru a le dezactiva din procesele de implementare.
Dezvoltatorii monitorizează ambele grupuri simultan – Canary și Baseline. Utilizatorii generează rezultate de tip A/B testing, care compară comportamentul sistemului vechi și al celui nou în aceleași condiții. În plus, se efectuează teste automate constante asupra noii versiuni a sistemului, pentru a asigura stabilitatea grupului Canary.
Diferențe față de strategiile tradiționale de implementare
După analiza ciclului de viață, diferențele față de strategiile tradiționale de implementare sunt evidente:
- Implementare treptată, cu control mai bun, în loc de implementare simultană pentru toți utilizatorii și așteptarea apariției problemelor care ar putea afecta întreaga producție.
- Limitarea riscului de erori ale noii versiuni la grupul Canary, în loc de expunerea tuturor utilizatorilor la probleme simultan.
- Monitorizarea noii versiuni înainte ca aceasta să fie disponibilă pentru utilizatori, în loc de monitorizarea post-implementare, care implică timp și resurse considerabile în faza de „hyper-care” a procesului de lansare.
- Posibilitatea de a decide asupra unei strategii de retragere înainte de implementarea completă a noii versiuni. În schimb, strategiile tradiționale implică programarea unei noi sesiuni de lansare pentru a anula producția imediat după finalizarea acesteia.
- Implementarea Canary încurajează investiția în instrumente și procese automatizate, în timp ce strategiile tradiționale tind să amâne inițiativele de automatizare.
Conducte CI/CD în implementarea Canary
Sursa: aws.amazon.com
Într-o conductă CI/CD, modificările sunt construite, testate și implementate automat într-un mediu de testare, înainte de a fi lansate în producție. Implementarea Canary se integrează perfect în acest proces.
Odată ce modificările au fost implementate în mediul de pregătire și au trecut toate testele necesare, conducta CI/CD va lansa automat versiunea Canary către un grup restrâns de utilizatori din mediul de producție.
În cazul unor probleme, se poate executa rapid o altă conductă pentru a realiza retragerea, sau se pot semnala funcționalitățile problematice, eliminându-le din procesul de implementare. Totul se automatizează, reducând necesitatea intervenției manuale.
Deoarece versiunea Canary include teste automate de verificare a sănătății, acestea sunt integrate în mod natural în funcționalitățile de bază ale conductelor CI/CD, devenind o parte indispensabilă a oricărei conducte CI/CD eficiente.
Fluxul de lucru și fazele implementării Canary
Rezumatul informațiilor de mai sus, fluxul de lucru al unei implementări tipice Canary, poate fi aplicat și în cadrul proiectului dumneavoastră.
#1. Planificare și pregătire
În această etapă, echipa de dezvoltare planifică și se pregătește pentru implementarea Canary. Aceasta include identificarea modificărilor, crearea unei versiuni noi a software-ului și definirea criteriilor de monitorizare a performanței noii versiuni. Echipa stabilește, de asemenea, grupul de utilizatori care vor primi inițial noua versiune, precum și strategia de lansare.
#2. Implementarea rutării și monitorizării traficului
Noua versiune a software-ului este implementată pentru grupul de utilizatori identificat în etapa de planificare. Se configurează rutarea traficului, astfel încât o parte din traficul utilizatorilor să fie direcționat către noua versiune, menținând funcțională versiunea veche pentru restul utilizatorilor. Monitorizarea performanței și stabilității noii versiuni se face cu ajutorul parametrilor și verificărilor de sănătate, pentru a se asigura funcționarea conform specificațiilor.
#3. Analizarea și evaluarea performanței implementării
Performanța noii versiuni este analizată și evaluată pe baza parametrilor stabiliți în etapa de planificare. Dacă noua versiune funcționează corect, lansarea este extinsă treptat către un număr mai mare de utilizatori. În cazul apariției unor probleme, implementarea poate fi retrasă rapid la versiunea anterioară.
#4. Promovarea sau anularea implementării
Echipa de dezvoltare decide dacă noua versiune este distribuită la întreaga bază de utilizatori, sau dacă se revine la versiunea anterioară. Dacă noua versiune funcționează conform așteptărilor și îndeplinește standardele de calitate, aceasta este lansată pentru toți utilizatorii. În cazul apariției unor probleme, implementarea se retrage rapid și ușor la versiunea anterioară.
Sursa: aws.amazon.com
Practici recomandate și strategii
La implementarea Canary Deployment, este important să începeți prin definirea unor obiective clare și a criteriilor de succes. Puteți include elemente precum parametrii de performanță, feedback-ul utilizatorilor și impactul asupra activității.
Începeți cu un grup restrâns de utilizatori pentru testarea noii versiuni a software-ului. Un grup mai mare de la început nu este un avantaj real. Flexibilitatea este esențială, mai ales la început.
Monitorizați performanța și stabilitatea noii versiuni folosind parametrii și verificările de sănătate. Reacționați prompt la orice anomalie. Este preferabil să reacționați exagerat, decât insuficient, într-o lansare treptată.
Extindeți gradual lansarea noii versiuni către mai mulți utilizatori. Acest lucru asigură o tranziție mai lină către noua versiune.
Folosiți instrumente și procese de automatizare pentru a eficientiza procesul de implementare și monitorizare. Integrați-le în conductele CI/CD și programați declanșarea automată a proceselor de implementare. Acest lucru reduce riscul de eroare umană și asigură consecvența și repetabilitatea procesului.
Implementați steaguri de caracteristici pentru a activa sau dezactiva anumite funcționalități ale software-ului. Astfel, obțineți control asupra proceselor de implementare viitoare, fără a fi necesară modificarea sau actualizarea manuală a codului. Dezvoltatorii se pot concentra astfel asupra aspectelor esențiale – remedierea erorilor.
Utilizați testarea A/B pentru a compara performanța a două versiuni diferite ale software-ului. Alocați aleatoriu utilizatorii unei versiuni sau alteia, identificați versiunea cu performanțe mai bune și folosiți aceste informații pentru a lua decizii viitoare de dezvoltare.
Asigurați-vă că puteți anula rapid implementarea, în cazul apariției unor probleme cu noua versiune. Acest lucru va reduce impactul problemelor și va permite recuperarea rapidă.
Provocări și studii de caz
Implementarea Canary, în ciuda avantajelor sale, prezintă și unele provocări.
O provocare este latența rețelei, care poate afecta performanța noii versiuni a software-ului. Pentru a gestiona această problemă, dezvoltatorii pot folosi instrumente precum echilibrarea încărcăturii și rețelele de livrare de conținut pentru a îmbunătăți performanța rețelei. Nu este vorba doar de latența sistemului extern, ci și de latența proceselor interne, cum ar fi implementările sau execuțiile conductelor CI/CD. Acestea trebuie finalizate cât mai repede posibil, pentru a evita timpii de așteptare prelungiți ai dezvoltatorilor.
O altă provocare este asigurarea coerenței datelor între versiunile vechi și noi ale software-ului. Pentru aceasta, dezvoltatorii pot folosi tehnici precum replicarea și sincronizarea bazei de date, pentru a asigura coerența datelor. Utilizatorii care folosesc simultan ambele versiuni, veche și nouă, au așteptări privind sincronizarea datelor și nu ar trebui să piardă date doar pentru că se află în grupul Canary/Baseline. Este o așteptare dificil de îndeplinit, astfel că trebuie să folosiți procese robuste.
Netflix este un exemplu cunoscut de companie care utilizează implementarea Canary pentru a lansa modificări la serviciul său de streaming. Compania folosește o combinație de testare automată, steaguri de caracteristici și testare A/B pentru a implementa treptat modificările.
Google este un alt exemplu de companie care utilizează implementarea Canary pentru a lansa modificări la serviciile sale cloud. Similar, compania folosește testarea automată, distribuirea traficului și monitorizarea pentru a implementa treptat modificările către un grup restrâns de utilizatori, înainte de distribuirea către toți utilizatorii. Această abordare a ajutat Google să îmbunătățească calitatea și stabilitatea serviciilor sale.
Concluzii
Ca și în cazul altor procese, abordări sau strategii, implementarea Canary nu este o soluție universală. Există situații în care este dificil de implementat, din cauza restricțiilor mediului, cunoștințelor echipei sau a lipsei înțelegerii conceptuale.
Este mai potrivită pentru proiectele din noua eră, unde mentalitatea agilă este fundamentală, automatizarea este o prioritate și se așteaptă un nivel maxim de fiabilitate din partea părților interesate.
În acest context, implementarea Canary reprezintă un pas înainte în practicile de dezvoltare agilă, permițând echipelor să exploreze un teritoriu inedit.
Ulterior, analizați scalarea și optimizarea CI/CD.