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

Tradicionalni načini razvoja softvera, poznati kao „veliki prasak“, nisu u skladu sa potrebama za visokom fleksibilnošću, agilnošću i kontinuiranom implementacijom koje zahtevaju današnje cloud i DevOps softverske platforme.

Jednostavno, nije dovoljno pripremiti spisak ručnih koraka za izvršavanje tokom implementacije proizvodne verzije. Takav pristup ne odražava agilnost, niti je u skladu sa pravim DevOps principima.

Plavo-zelena implementacija: Pregled

Plavo-zelena implementacija je metodologija primene softvera koja minimizira vreme nedostupnosti i rizik od problema prilikom objavljivanja novih verzija. To se postiže stvaranjem dva identična okruženja: aktivnog (plavog) i neaktivnog (zelenog).

Aktivno okruženje je mesto gde je pokrenuta trenutna verzija softvera i gde korisnici obavljaju svoje svakodnevne operacije. Neaktivno okruženje služi za implementaciju i testiranje nove verzije softvera.

Kada je nova verzija testirana i spremna za upotrebu, saobraćaj se preusmerava sa aktivnog na neaktivno okruženje, koje tada postaje novo aktivno okruženje. Ovaj proces se može ponavljati po potrebi.

Izvor: docs.aws.amazon.com

DevOps kontekst

Plavo-zelena implementacija se odlično uklapa u DevOps način razmišljanja i procese. Podržava kontinuiranu isporuku i implementaciju softvera, minimizirajući vreme nedostupnosti za korisnike i eliminišući rizik od neuspešnih proizvodnih izdanja.

Posjedovanje dva identična okruženja omogućava testiranje i implementaciju novih verzija softvera bez uticaja na postojeće produkcijsko okruženje. Ovo rezultira bržim i češćim izdanjima, što je ključni aspekt DevOps-a.

Dodatno, mogućnost brzog prebacivanja saobraćaja između okruženja je preduslov za brz povratak na prethodnu verziju u slučaju problema, što je takođe veoma važno u DevOps okruženju.

Ključni principi plavo-zelene implementacije

#1. Dva identična okruženja

Plavo-zelena implementacija zahteva postojanje dva potpuno identična okruženja, kako po pitanju podataka, tako i po procesima. Jedno je aktivno (plavo), a drugo neaktivno (zeleno).

Plavo okruženje je operativno mesto gde korisnici svakodnevno obavljaju svoje zadatke. Zeleno okruženje je uvek sinhronizovano sa plavim, ali testeri u njemu obavljaju svoje testove. Iako ovo okruženje nije produkcijsko, testiranje se odvija u realnim uslovima, jer je okruženje identično produkcijskom.

#2. Prebacivanje saobraćaja

Kada se testiranje nove verzije softvera završi i ona je spremna, saobraćaj se prebacuje sa aktivnog na neaktivno okruženje, koje postaje novo aktivno okruženje.

Prebacivanje saobraćaja je trenutno. Sva odlaganja su stvar prošlosti. Ne postoji period nedostupnosti. Korisnici ne moraju ništa da rade kako bi pristupili novom okruženju. Automatski se preusmeravaju, svi u isto vreme.

Izvor: aws.amazon.com

#3. Brzi povratak

Mogućnost brzog prebacivanja saobraćaja između okruženja takođe omogućava brz povratak na prethodnu verziju u slučaju problema. Ovo obezbeđuje minimalno vreme nedostupnosti, a aplikacija ostaje visoko dostupna.

Ako nešto krene po zlu sa zelenim okruženjem, svi korisnici će se odmah vratiti na stabilno plavo okruženje bez ikakvih problema.

#4. Automatizovano testiranje

Automatizovano testiranje je ključni aspekt plavo-zelene implementacije. Osigurava da je nova verzija softvera temeljno testirana pre nego što se pusti u aktivno okruženje.

Ukoliko nemate značajan broj automatizovanih testova (uključujući jedinice, funkcionalne i regresione testove), onda verovatno nema smisla razmišljati o plavo-zelenoj implementaciji.

Nedostatak automatizovanih testova će vas dramatično usporiti. Vreme potrebno za testiranje novog (zelenog) okruženja će biti toliko dugo, da će ono u trenutku kada budete mogli da ga aktivirate već biti „zastarelo“ sa stanovišta životnog ciklusa razvoja softvera.

#5. Kontinuirana isporuka

Plavo-zelena implementacija je deo kontinuirane isporuke, što na kraju znači brže i češće objavljivanje softvera u produkciju.

Prebacivanje možete izvršiti čim budete spremni da testirate novu verziju softvera u zelenom okruženju. Budući da je podešavanje već obavljeno, i samo je potrebno izvršiti promenu saobraćaja, proces je toliko brz da se može raditi svakodnevno. Pod uslovom da ste efikasni i u testiranju, naravno.

Tipični životni ciklus

Platforma koja pokreće plavo-zelenu implementaciju ima specifičan životni ciklus sa nizom koraka i procesa. Tipično se sastoji od sledećeg:

  • Kreiranje nove verzije softvera. Ovo uključuje kompajliranje koda, izvršavanje automatizovanih testova i kreiranje artefakta koji se može implementirati.
  • Sledeća faza je postavljanje nove verzije softvera u neaktivno (zeleno) okruženje. Ovo uključuje podešavanje okruženja, implementaciju artefakta i konfigurisanje svih potrebnih postavki.
  • Kada je nova verzija softvera postavljena u zeleno okruženje, pokreću se automatizovani testovi da bi se osiguralo da nova verzija funkcioniše ispravno. To uključuje funkcionalne, regresione i integracione testove, a idealno i testove performansi.
  • Prebacivanje saobraćaja sa aktivnog (plavog) okruženja na neaktivno (zeleno) okruženje. Ovo uključuje ažuriranje balansera opterećenja ili DNS podešavanja kako bi se saobraćaj preusmerio na zeleno okruženje. Naravno, poželjno je da se ovaj proces odvija automatski.
  • Nakon završenog prebacivanja, prati se rad aplikacije kako bi se osiguralo da funkcioniše pravilno. To uključuje praćenje grešaka, problema sa performansama i drugih potencijalnih problema.
  • Ovaj korak je opcionalan i ne želite da ga često koristite. Ako se otkriju bilo kakvi problemi, prebacuje se saobraćaj nazad na plavo okruženje kako bi se izvršio trenutni povratak na stabilnu verziju. Opet, bez ikakvih prekida za korisnike. Jednostavno se ažuriraju balansiranje opterećenja ili DNS postavke kako bi se saobraćaj preusmerio na plavo okruženje.
  • Nakon rešavanja problema i kada ste spremni da se ponovo vratite na novu verziju, saobraćaj se vraća na zeleno okruženje. Opet, ažuriranjem balansiranja opterećenja ili DNS postavki kako bi se saobraćaj preusmerio nazad na zeleno okruženje.
  • Konačno, kada je nova verzija softvera stabilna i funkcioniše ispravno, poništava se stara verzija softvera koja radi u plavom okruženju. Potrebno je pripremiti još jednu novu verziju sistema.
  • Implementacija CI/CD cevovoda

    Implementacija plavo-zelene implementacije u okviru DevOps CI/CD cevovoda je prirodan proces.

    Glavni preduslov je da već imate ta dva identična okruženja. Pošto će ovo biti automatizovan proces, možete koristiti alate za infrastrukturu kao kod, kao što je AWS CloudFormation ili čak platformski nezavisne Terraform skripte za kreiranje/ponovno kreiranje/ažuriranje okruženja u okviru automatizovanih cevovoda.

    Nakon što ovo imate, relativno je jednostavan korak ka kreiranju potpuno automatizovanog procesa implementacije. Jednostavno ponovo koristite postojeće cevovode za kreiranje plavog i zelenog okruženja. Međutim, ovog puta morate uključiti i procese testiranja.

    Proces prebacivanja saobraćaja možete automatizovati pomoću alata kao što su AWS Elastic Load Balancer ili NGINX. Ovo uključuje ažuriranje balansera opterećenja ili DNS postavki kako bi se saobraćaj preusmerio na zeleno okruženje kada je nova verzija softvera testirana i spremna.

    Sledeći deo slagalice je praćenje. Za to koristite alate kao što su AWS CloudWatch, New Relic ili Datadog.

    Na kraju, ponovo koristite postojeće cevovode čak i za uništavanje starog plavog okruženja. Na vama je da li ćete prvo izvršiti uništavanje svih usluga i komponenti pre nego što ih ponovo kreirate od nule, ili alternativno, možete samo ažurirati skripte za svaku uslugu u lancu. Obično je uništavanje i ponovno kreiranje sigurnija opcija, jer kod ažuriranja ima više potencijalnih zamki.

    Najbolje prakse plavo-zelene implementacije

    Želite da znate kako da najbolje iskoristite plavo-zelenu implementaciju? Evo nekoliko saveta koji proizilaze iz prakse.

    Imajte solidnu strategiju migracije baze podataka

    Prilikom postavljanja nove verzije softvera, važno je osigurati da se šema baze podataka ispravno ažurira. Koristite strategije migracije baze podataka, kao što su Flyway ili Liquibase za upravljanje promenama šeme baze podataka.

    Koristite alat za kanarinsku analizu

    Iako je kanarinska implementacija alternativni pristup, i dalje možete koristiti neke od njenih tehnika da poboljšate svoju plavo-zelenu implementaciju.

    Koristite alat za analizu kanarinaca, kao što je Kayenta ili Spinnaker, da analizirate performanse nove verzije softvera u realnom okruženju. Ovo uključuje poređenje performansi nove verzije softvera sa performansama stare verzije softvera.

    Koristite okvir za prebacivanje funkcija, kao što je Togglz, da biste omogućili ili onemogućili funkcije u novoj verziji softvera. Ovo omogućava postepeno uvođenje novih funkcija i brzi povratak na prethodnu verziju ako je potrebno.

    Koristite balansator opterećenja sa proverama zdravlja

    Koristite balansator opterećenja, kao što je AWS Elastic Load Balancer ili NGINX, sa proverama zdravlja, da biste bili sigurni da je saobraćaj usmeren samo na zdrave instance. Ovo osigurava da aplikacija ostane visoko dostupna, a vreme nedostupnosti svedeno na minimum.

    Koristite plan za povratak sa automatizovanim vraćanjem

    Napravite plan za povratak na prethodnu verziju u slučaju problema i automatizujte proces vraćanja pomoću alata kao što su AWS CodeDeploy ili Octopus Deploy. Ovo osigurava da je vreme nedostupnosti minimalno, a aplikacija ostaje visoko dostupna.

    Ovo se uglavnom odnosi na zeleno okruženje, svaki put kada otkrijete neki problem sa novom verzijom.

    Plan povratka vam nije potreban za plavo okruženje, jer ono ostaje netaknuto tokom prebacivanja, tako da mu se možete vratiti kada god je to potrebno.

    Izazovi sa plavo-zelenom implementacijom

    Implementacija plavo-zelene implementacije može predstavljati izazove za razvojne timove. Evo nekih tipičnih izazova:

  • Podešavanje i upravljanje dva identična okruženja može biti složeno i zahtevno. Ovo zahteva stručnost u alatima za infrastrukturu kao kod, kao što su Terraform ili CloudFormation. Potreban vam je tim koji je sposoban da se nosi sa takvim tehničkim izazovima.
  • Prilikom postavljanja nove verzije softvera, važno je osigurati da se šema baze podataka ispravno ažurira. Ovo može biti izazovno, posebno ako je šema baze podataka složena. Potrebni su vam pouzdani procesi za postavljanje baze podataka koji mogu automatski i pouzdano da upravljaju ažuriranjima šeme.
  • Analiza performansi nove verzije softvera u realnom okruženju može biti izazovna. Ovo zahteva stručnost u alatima za analizu kanarinaca, kao što su Kayenta ili Spinnaker.
  • Implementacija prebacivanja funkcija može biti izazovna, posebno ako aplikacija ima veliki broj funkcija. Potrebno je pažljivo planiranje i koordinacija između razvojnih timova.
  • Testiranje nove verzije softvera u realnom okruženju može biti izazovno, posebno ako aplikacija ima veliki broj korisnika ili servera. Potrebno je automatizovati što više testnih slučajeva. Takođe, rutinski procesi će zahtevati dosta koordinacije između timova za razvoj i testiranje.
  • Dobro rešenje za praćenje je retka pojava, ali je neophodno za ispravne DevOps operacije. Uložite vreme u izgradnju ovog rešenja uz pomoć proverenih usluga (AWS CloudWatch, New Relic, Datadog).
  • Razlika između plavo-zelene i kanarske implementacije

    Iako je razlika u odnosu na tradicionalne procese implementacije prilično očigledna (ne postoje dva paralelna okruženja koja se pokreću sa različitim verzijama softvera u tradicionalnim procesima), razlika u odnosu na kanarsku implementaciju može biti malo zanimljivija.

    Plavo-zelena implementacija uključuje dva okruženja (plavo i zeleno). U isto vreme, ova dva okruženja su stalno sinhronizovana u pogledu podataka. Kada je nova verzija testirana i spremna, saobraćaj se prebacuje sa aktivnog na neaktivno okruženje, koje postaje novo aktivno okruženje. Nema gubljenja vremena na postavljanje novog koda i nema zastoja u produkciji. Svi korisnici rade u aktivnom okruženju i ne primećuju promenu.

    Kanarska implementacija uključuje postavljanje nove verzije softvera za mali podskup korisnika, dok većina korisnika ili servera nastavlja da koristi trenutnu verziju. Ovo je postepena primena, a ne potpuna promena. U ovom slučaju, testeri su direktni korisnici produkcije, iako samo njihova definisana grupa. Ova grupa aktivno testira novu verziju sa produkcijskim procesima, i kada se potvrdi da je stabilna, nova verzija se proširuje na ostale korisnike.

    Dakle, koja je bolja?

    Odgovor konsultanta „zavisi“ je najprikladniji ovde.

    Ako je prioritet vašeg sistema visoka dostupnost iznad svega, onda će plavo-zelena implementacija biti pravi izbor.

    Ako je vaš cilj brza povratna informacija i kontrolisanije (iako sporije) uvođenje nove verzije sistema, onda kanarska implementacija ima prednosti u odnosu na plavo-zelenu.

    Obe metode su dovoljno agilne da se smatraju dobrim za ozbiljno kreiranje DevOps sistema.

    Studije slučaja

    Netflix koristi plavo-zelenu implementaciju za postavljanje novih verzija svoje usluge striminga. Koristeći ovaj metod, Netflix može da implementira nove verzije svoje usluge bez uticaja na korisničko iskustvo. Zapravo, Netflix takođe koristi kanarsku implementaciju u drugim slučajevima, tako da nije neobično kombinovati različite pristupe DevOps implementaciji.

    Takođe, Amazon i Etsy koriste plavo-zelenu implementaciju za postavljanje novih verzija svojih platformi za e-trgovinu.

    Još jedan primer je LinkedIn, koji koristi plavo-zelenu implementaciju za postavljanje novih verzija svoje platforme za društveno umrežavanje.

    Na kraju, ali ne i najmanje važno, IBM koristi plavo-zelenu implementaciju za postavljanje novih verzija svoje platforme u oblaku.

    Ove kompanije su uspešno implementirale plavo-zelenu implementaciju u svoju infrastrukturu i služe kao dobar primer za druge.

    Završne reči

    Kao i kanarska implementacija, plavo-zelena teži da optimizuje postojeće agilne procese i metodologije kako bi se novi softver neometano isporučio, na način da ga niko ne primeti. To je krajnji cilj ovakvih pristupa. Isporuke se vrše stalno i veoma često, ali niko to ne primećuje, i nikoga nije briga.

    Za razvojni tim bi moglo biti malo frustrirajuće što nema pohvala za njihova najnovija izdanja. Ali ako mene pitate, ovo je najbolja usluga koju možete pružiti. Niko o tome ne priča, ali svi to koriste svakodnevno.

    Za dodatne informacije pogledajte često postavljana pitanja i odgovore na DevOps intervjuima.