Објашњење Цанари имплементације и њене улоге у ДевОпс-у

Implementacija kanarinca predstavlja pristup razvoju i primeni softvera gde se nove funkcionalnosti ili ažuriranja postepeno uvode za manji broj korisnika, pre nego što postanu dostupni celokupnoj korisničkoj bazi.

Ovaj metod podrazumeva stvaranje nove verzije softvera koja se primenjuje na odabranu grupu korisnika, dok se istovremeno postojeća verzija održava za ostale. Razvojni tim detaljno prati novu verziju kako bi osigurao njenu stabilnost i ispravan rad.

Ukoliko sve funkcioniše kako je planirano, nova verzija se postepeno uvodi većem broju korisnika, dok na kraju ne obuhvati sve. Na ovaj način, tim smanjuje rizik od pojave grešaka ili drugih problema koji bi mogli istovremeno uticati na sve korisnike.

Cilj primene kanarinca je smanjenje potencijalnog rizika prilikom uvođenja novih funkcija u veliki broj korisnika. Postepenim uvođenjem promena, programeri mogu pratiti performanse i stabilnost nove verzije. Oni vrše potrebne korekcije pre nego što promene postanu dostupne svima. Prelazak na novu verziju je tako mnogo lakši i kontrolisaniji.

Ključni principi i prednosti

Izvor: martinfowler.com

Osnovni principi kanarinac implementacije uključuju sledeće:

  • Prvo primenite novu verziju na mali broj korisnika, a zatim je vremenom postepeno uvodite za sve veći broj korisnika.
  • Pažljivo pratite novu verziju da biste bili sigurni da je stabilna i da radi kako se očekuje.
  • U slučaju problema, brzo i lako vratite implementaciju na prethodnu verziju.
  • Automatizujte proces primene što je više moguće kako biste smanjili mogućnost ljudske greške.

Prednosti implementacije kanarinca u DevOps-u su:

  • Smanjujete rizik od uvođenja grešaka koje mogu uticati na sve korisnike odjednom, zahvaljujući postepenom uvođenju promena.
  • Programeri dobijaju brže povratne informacije o novoj verziji, što im omogućava da naprave potrebne izmene pre nego što se ona primeni na celu korisničku bazu.
  • Praćenjem performansi i stabilnosti nove verzije, programeri osiguravaju da ona ispunjava standarde kvaliteta pre nego što je koriste svi korisnici.
  • Implementacija kanarinca pomaže u povećanju poverenja programera i svih uključenih u proces primene, smanjujući rizik od problema koji bi mogli narušiti korisničko iskustvo.

Implementacija kanarinca zasnovana na konceptu i terminologiji

Izvor: cncf.io

Pogledajmo tipičan tok procesa implementacije.

Sve počinje sa „kanarincima“, odnosno „ranim korisnicima“ nove verzije sistema. Paralelno sa tim, postoji i „baza“ korisnika. Ovde spadaju svi ostali korisnici koji nisu u grupi kanarinaca.

Kako korisnici kanarinaca nastavljaju da koriste novu verziju, implementacija kanarinca se proširuje na sve veći broj korisnika. Ovo predstavlja „promenu saobraćaja“. Grupa kanarinaca se povećava dok se baza korisnika smanjuje, stvarajući postepeno uvođenje.

Tokom procesa, praćenje beleži sve aktivnosti i ishode korišćenja i generiše metrike koje su programerima potrebne kao povratne informacije. Programeri zatim reaguju i ispravljaju eventualne probleme, ili se vraćaju na početno stanje ako ne mogu da ih reše.

Automatizujte sve aktivnosti praćenja i implementacije. Ovo omogućava programerima da se fokusiraju na rešavanje problema.

Moguće je da grupa kanarinaca otkrije da neke funkcije nove verzije nisu dobre, dok su druge odlične. Stoga, programeri će označiti problematične funkcije kako bi ih isključili iz daljeg procesa implementacije.

Programeri prate obe grupe istovremeno – kanarince i bazu. Korisnici generišu rezultate A/B testiranja. To je poređenje ponašanja starog i novog sistema pod istim uslovima. Pored toga, automatski testovi se stalno izvode na novoj verziji sistema kako bi se osigurala stabilnost grupe kanarinaca.

Kako se razlikuje od tradicionalnih strategija implementacije

Nakon razumevanja životnog ciklusa procesa, razlike između ovoga i tradicionalnog pristupa su očigledne.

  • Implementirate postepeno i sa boljom kontrolom, umesto da odmah raspoređujete svima i čekate probleme koji mogu uticati na celokupnu proizvodnju.
  • Rizik od grešaka u novim verzijama ograničavate samo na grupu kanarinaca, umesto da celi svet bude istovremeno izložen problemima.
  • Pratite novu verziju pre nego što je korisnici dobiju, umesto da je pratite nakon toga, i investirate puno vremena i resursa u fazu hiper-brige.
  • Možete odlučiti da vratite sistem pre nego što u potpunosti implementirate novu verziju. Sa druge strane, kod tradicionalnih metoda morate zakazati dodatni termin za vraćanje na staru verziju nakon što ste novu već postavili.
  • Implementacija kanarinaca vas prirodno navodi da ulažete u automatizovane alate i procese. Sa druge strane, tradicionalne metode implementacije stavljaju sve inicijative za automatizaciju na poslednje mesto.

CI/CD cevovod u implementaciji kanarinca

Izvor: aws.amazon.com

U tipičnom CI/CD cevovodu, promene se automatski prave, testiraju i postavljaju u testno okruženje pre nego što se uvedu u produkciju. Ovo je idealan slučaj upotrebe u okviru implementacije kanarinca.

Kada promene prođu sve testove u testnom okruženju, CI/CD cevovod će automatski primeniti kanarinac verziju na manji broj korisnika u produkcionom okruženju.

Ukoliko nešto krene naopako, jednostavno pokrenite drugi cevovod za vraćanje. Ili obeležite problematične funkcije i više se neće pojavljivati u procesu primene. Sve je automatski i ne morate brinuti.

Pošto kanarinac verzija ima automatske testove provere ispravnosti, oni su prirodno integrisani u osnovne karakteristike CI/CD cevovoda. Oni su ionako neophodan deo svakog dobrog CI/CD cevovoda.

Tok rada i faze implementacije kanarinca

Sumirajući sve informacije, ovo je uobičajen tok rada tipične implementacije kanarinca koju možete koristiti u svom projektu.

#1. Planiranje i priprema

U ovoj fazi, razvojni tim planira i priprema se za implementaciju kanarinca. Ovo uključuje identifikaciju promena ili ažuriranja, kreiranje nove verzije softvera i definisanje metrike i provera ispravnosti za praćenje performansi nove verzije. Tim takođe određuje manju grupu korisnika koja će prva dobiti novu verziju i definiše plan uvođenja.

#2. Sprovođenje rutiranja i praćenja saobraćaja

Nova verzija softvera se primenjuje na manju grupu korisnika odabranu u fazi planiranja. Rutiranje saobraćaja se implementira tako da se deo korisničkog saobraćaja usmerava na novu verziju, dok se stara verzija i dalje održava za ostale korisnike. Performanse i stabilnost nove verzije se pažljivo prate pomoću metrike i provera ispravnosti kako bi se osiguralo da sve radi kako treba.

#3. Analiza i procena performansi implementacije

Performanse nove verzije se analiziraju i procenjuju na osnovu metrike i provera ispravnosti definisanih u fazi planiranja. Ukoliko nova verzija radi dobro, uvođenje se postepeno povećava na sve više korisnika. U slučaju da se pojave problemi, implementacija se može brzo vratiti na prethodnu verziju.

#4. Promovisanje ili poništavanje implementacije

Razvojni tim odlučuje da li će promovisati novu verziju na celu korisničku bazu ili vratiti sistem na prethodnu verziju. Ukoliko nova verzija radi dobro i ispunjava potrebne standarde kvaliteta, promoviše se na sve korisnike. U slučaju bilo kakvih problema sa novom verzijom, implementacija se brzo i lako vraća na staro.

Izvor: aws.amazon.com

Najbolje prakse i strategije

Kada implementirate kanarinac implementaciju, prvo definišite jasne ciljeve i standarde uspeha. Možete se fokusirati na pokazatelje učinka, kriterijume povratnih informacija od korisnika i uticaj na poslovanje.

Odaberite manju grupu korisnika za testiranje nove verzije softvera. Veća grupa na početku nije prednost. Želite da budete što fleksibilniji, posebno na početku.

Kao što je već nekoliko puta pomenuto, pratite performanse i stabilnost nove verzije pomoću metrike i provera ispravnosti. Reagujte čim primetite nešto sumnjivo. Bolje je reagovati previše nego premalo tokom postepenog uvođenja.

Postepeno povećavajte uvođenje nove verzije za sve više korisnika. Ovo obezbeđuje lakši prelazak na novu verziju.

Koristite alate i procese za automatizaciju kako biste pojednostavili proces implementacije i nadzora. Uključite ih u CI/CD cevovode i postavite da se planirani procesi automatski aktiviraju. Ovo smanjuje rizik od ljudske greške i osigurava da je proces implementacije dosledan i ponovljiv.

Primenite oznake funkcija da biste uključili ili isključili određene funkcije u softveru. Ovo vam daje kontrolu nad budućim procesima implementacije bez potrebe za ručnim promenama ili ažuriranjima. Takođe, programeri mogu više da se fokusiraju na bitne stvari – ispravljanje grešaka.

Koristite A/B testiranje da biste uporedili performanse dve različite verzije softvera. Nasumično dodelite korisnike jednoj ili drugoj verziji. Identifikujte koja verzija ima bolje performanse i na osnovu toga donesite buduće razvojne odluke.

Osigurajte da možete brzo vratiti sistem na prethodno stanje u slučaju problema sa novom verzijom. Ovo će smanjiti uticaj problema i omogućiti brz oporavak.

Izazovi i studije slučaja

Postoje izazovi povezani sa primenom kanarinca, uprkos njegovim jasnim prednostima.

Jedan od izazova je kašnjenje mreže, koje može uticati na performanse nove verzije. Da bi rešili ovaj problem, programeri mogu koristiti balansere opterećenja i mreže za isporuku sadržaja. Ne radi se samo o kašnjenju sistema pri spoljašnjoj upotrebi, već i o kašnjenju internih procesa kao što su implementacije i izvršavanja CI/CD cevovoda. Ovi procesi moraju biti završeni što je brže moguće. U suprotnom, imaćete grupu programera koji čekaju da se cevovodi završe.

Drugi izazov je obezbeđivanje konzistentnosti podataka između stare i nove verzije. Za ovo se mogu koristiti tehnike kao što su replikacija baze podataka i sinhronizacija, kako bi se osigurala konzistentnost podataka u svim verzijama. Imajući korisnike u produkciji koji rade istovremeno u starim i novim verzijama, povećava se očekivanje da obe verzije budu potpuno sinhronizovane i da korisnici ne gube podatke samo zato što su u grupi kanarinaca/bazi. Ovo može biti zaista izazovno ispuniti, pa se oslonite na dobre pozadinske procese.

Netflix je poznat primer kompanije koja koristi implementaciju kanarinca za uvođenje promena u svoju uslugu. Kompanija koristi kombinaciju automatskog testiranja, oznaka funkcija i A/B testiranja za postepeno uvođenje promena.

Google je još jedan primer kompanije koja koristi implementaciju kanarinca za uvođenje promena u svoje usluge u oblaku. Slično, Google koristi automatsko testiranje, deljenje saobraćaja i praćenje implementacije da bi postepeno uvodio promene na manji broj korisnika pre nego što ih uvede svim korisnicima. Ovaj pristup je pomogao Googlu da poboljša kvalitet i stabilnost svojih usluga.

Završne reči

Kao i kod svih procesa, pristupa i strategija, implementacija kanarinca nije rešenje za svaki problem. Postoje slučajevi u kojima je gotovo nemoguće sprovesti je zbog ograničenja okruženja, znanja ljudi ili nedostatka razumevanja.

Implementacija kanarinca je mnogo pogodnija za projekte novog doba, gde je agilni način razmišljanja osnovna karakteristika, automatizacija svakog procesa je prioritet, a visok nivo pouzdanosti se očekuje od svih strana.

U tom slučaju, implementacija kanarinca je sledeći korak u agilnom razvoju. Može unaprediti timove do novih nivoa i mogućnosti.

Zatim razmislite o skaliranju i optimizaciji CI/CD-a.