Când o aplicație nu funcționează, cel mai puțin îți dorești să auzi de la colegi expresia „problema este de partea voastră”. În cele din urmă, utilizatorii au de suferit – iar lor nu le pasă care parte a echipei este responsabilă pentru defectiune. Cultura DevOps a apărut tocmai pentru a uni dezvoltarea și suportul și a-i aduce împreună în jurul unei responsabilități comune pentru produsul final.
Ce practici sunt incluse în conceptul de DevOps și de ce sunt importante? Ce fac inginerii DevOps și ce trebuie să știe? La aceste și alte întrebări răspund experții de la EPAM: Kirill Sergeev, inginer de sistem și evanghelist DevOps, și Igor Boiko, inginer de sistem senior și coordonator al uneia dintre echipele DevOps ale companiei.

De ce este necesar DevOps?
Anterior, între dezvoltatori și suport (așa numitul operations) existau bariere. Sună paradoxal, dar aveau obiective și KPI diferite, deși realizau același lucru. Obiectivul dezvoltării era de a implementa cât mai repede cerințele de afaceri și de a le adăuga într-un produs funcțional. Suportul era responsabil de asigurarea unei funcționări stabile a aplicației – iar orice schimbare punea stabilitatea în pericol. Există un conflict de interese – DevOps a apărut pentru a-l rezolva.
Ce este DevOps?
Întrebarea este bună – și controversată: în lume nu s-a ajuns încă la un consens. La EPAM considerăm că DevOps îmbină tehnologii, procese și cultura interacțiunii în cadrul echipei. Această combinare este orientată către livrarea continuă a valorii către utilizatorii finali.
Kirill Sergeev: „Dezvoltatorii scriu cod, testerii îl verifică, iar administratorii instalează produsul final în mediul de producție. O perioadă îndelungată, aceste părți ale echipei au fost oarecum separate, iar apoi a apărut ideea de a le uni printr-un proces comun. Așa au apărut practicile DevOps.”
A sosit ziua în care dezvoltatorii și inginerii de sistem au început să-și manifeste interesul unul față de celălalt. Bariera dintre producție și suport a început să dispară. Așa a apărut DevOps, care include practici, cultură și ordine în interacțiunea din echipă.

Care este esența culturii DevOps?
Responsabilitatea pentru rezultatul final revine fiecărui membru al echipei. Ceea ce este interesant și complex în filosofia DevOps este înțelegerea că o persoană nu este responsabilă doar pentru etapa sa de lucru, ci și pentru modul în care va funcționa întregul produs. Problema nu este de partea cuiva – este comună, iar fiecare membru al echipei ajută la soluționarea acesteia.
Principiul fundamental al culturii DevOps este de a rezolva problemele, nu doar de a aplica practici DevOps. Mai mult decât atât, aceste practici sunt implementate nu «de partea cuiva», ci în întregul produs. Proiectul nu are nevoie doar de un inginer DevOps – are nevoie de soluționarea problemei, iar rolul inginerului DevOps poate fi împărțit între mai mulți membri ai echipei cu specializări diferite.
Ce practici DevOps există?
Practicile DevOps acoperă toate etapele ciclului de viață al software-ului.
Igor Boiko: «Cazul ideal este atunci când începem să folosim practicile DevOps încă de la inițierea proiectului. Împreună cu arhitecții, planificăm care va fi peisajul arhitectural al aplicației, unde va fi localizată și cum va fi scalată, alegem platforma. În prezent, arhitectura microserviciilor este la modă – pentru aceasta alegem un sistem de orchestrare: trebuie să putem gestiona fiecare element al aplicației separat și să-l actualizăm independent de ceilalți. O altă practică este “infrastructura ca și cod”. Aceasta se referă la abordarea prin care infrastructura proiectului este creată și gestionată prin intermediul codului, nu prin interacțiune directă cu serverele.
Apoi trecem la etapa de dezvoltare. Aici, una dintre cele mai mari practici este construirea CI/CD: trebuie să ajutăm dezvoltatorii să integreze modificările în produs rapid, în porții mici, mai des și fără dureri. CI/CD acoperă atât verificarea codului, cât și încărcarea versiunii principale în baza de cod, precum și desfășurarea aplicației în medii de testare și producție.
În etapele CI/CD, codul trece prin porțile de calitate. Acestea verifică dacă codul care a ieșit de pe stația de lucru a dezvoltatorului corespunde criteriilor de calitate stabilite. Aici se adaugă teste unitare și UI. Pentru o desfășurare rapidă, fără dureri și concentrată a produsului, se poate alege un tip de desfășurare potrivit.
Practicile DevOps au un rol și în etapa de suport a produsului finalizat. Acestea sunt utilizate pentru monitorizare, feedback, securitate și implementarea modificărilor. În toate aceste sarcini, DevOps se concentrează pe îmbunătățiri continue. Minimizați operațiile repetitive, le automatizăm. Acest lucru include migrarea, extinderea aplicației și asigurarea funcționalității.
Care sunt beneficiile practicilor DevOps?
Dacă am scrie un manual despre practicile moderne DevOps, pe prima sa pagină ar figura trei puncte: automatizare, accelerarea lansării și feedback rapid din partea utilizatorilor.
Kirill Sergeev: „Primul – este automatizarea. Toate interacțiunile din echipă le putem automatiza: am scris cod – l-am implementat – l-am verificat – l-am instalat – am adunat feedback – ne-am întors la început. Totul se face automat.
Al doilea – accelerarea lansării și chiar simplificarea dezvoltării. Este întotdeauna important pentru client ca produsul să ajungă pe piață cât mai repede, pentru a începe să aducă beneficii mai devreme decât omologii săi de la concurență. Procesul de livrare a produsului poate fi îmbunătățit constant: scurtând timpul, adăugând etichete de control suplimentare, perfecționând monitorizarea.
Al treilea – este accelerarea feedback-ului din partea utilizatorului. Dacă are observații, putem face ajustări imediat și actualiza aplicația instantaneu.”

Cum se raportează conceptele de „inginer de sistem”, „inginer de build” și „inginer DevOps”?
Se suprapun, dar se referă la domenii ușor diferite.
Inginerul de sistem la EPAM – este o poziție. Aceștia pot avea diferite niveluri: de la junior la specialist chief.
Inginerul de build – este mai degrabă un rol pe care îl poate îndeplini în cadrul proiectului. Acum sunt denumiți astfel persoanele responsabile pentru CI/CD.
Inginerul DevOps este specialistul care implementează practicile DevOps în proiect.
Dacă sintetizăm toate acestea, rezultă aproximativ următoarele: persoana în poziția de inginer de sistem îndeplinește rolul de inginer de build în proiect și se ocupă acolo cu implementarea practicilor DevOps.
Cu ce se ocupă exact inginerul DevOps?
Inginerii DevOps adună toate componentele care constituie un proiect. Ei înțeleg specificul muncii programatorilor, testelor, administratorilor de sistem și ajută la simplificarea acestora. Înțeleg necesitățile și cerințele afacerii, rolul său în procesul de dezvoltare și construiesc procesul având în vedere interesele clientului.
Am discutat mult despre automatizare – acesta este un domeniu în care inginerii DevOps se concentrează în primul rând. Este un punct foarte important, care include, printre altele, pregătirea mediului.
Kirill Sergeev: „Înainte de a implementa actualizări în produs, acestea trebuie testate într-un mediu extern. Acesta este pregătit de inginerii DevOps. Tot ei promovează cultura DevOps în general: implementează practici DevOps la toate nivelurile proiectelor lor. Aceste trei principii: automatizare, simplificare, accelerare – le aduc în toate locurile în care pot ajunge”.
Ce trebuie să știe un inginer DevOps?
În esență, el ar trebui să aibă cunoștințe din diferite domenii: programare, lucru cu sisteme de operare, baze de date, sisteme de compilare și configurare. La acestea se adaugă abilități de a lucra cu infrastructuri cloud, sisteme de orchestrare, monitorizare.
1. Limbaje de programare
Inginerii DevOps știu câteva limbi de bază pentru automatizare și pot, de exemplu, să-i spună programatorului: „Hai să faci instalarea codului nu manual, ci cu ajutorul scriptului nostru, care automatizează totul. Pentru acesta, vom pregăti un fișier de configurare, care va fi ușor de citit atât pentru tine, cât și pentru noi – și vom putea să-l modificăm în orice moment. În plus, vom putea vedea cine, când și de ce face modificări în el”.
Un inginer DevOps poate învăța unul sau mai multe dintre aceste limbaje: Python, Groovy, Bash, Powershell, Ruby, Go. Nu este necesar să le cunoască la un nivel profund – este suficient să știe elementele de bază ale sintaxei, principiile OOP și capacitatea de a scrie scripturi simple pentru automatizare.
2. Sisteme de operare
Inginerul DevOps trebuie să înțeleagă pe ce server va fi instalat produsul, în ce mediu va fi rulat, cu ce servicii va interacționa. Se poate specializa pe Windows sau pe familia Linux.
3. Sisteme de control al versiunilor
Fără cunoștințe despre sistemele de control al versiunilor, inginerul DevOps nu poate avansa. Git este unul dintre cele mai populare sisteme în prezent.
4. Provideri de cloud
AWS, Google, Azure – mai ales dacă discutăm despre direcția Windows.
Kirill Sergeev: «Furnizorii de cloud ne oferă servere virtuale, care se integrează perfect în CI/CD.
Instalarea a zece servere fizice necesită aproximativ o sută de operațiuni manuale. Fiecare server trebuie pornit manual, instalat și configurat cu sistemul de operare dorit, aplicația noastră trebuie instalată pe cele zece servere, și apoi trebuie să verificăm totul de zece ori. Serviciile cloud înlocuiesc această procedură cu zece linii de cod, iar un bun inginer DevOps trebuie să fie capabil să le opereze. Astfel, își economisește timp, eforturi și bani – atât pentru client, cât și pentru companie».
5. Sisteme de orchestrare: Docker și Kubernetes
Kirill Sergeev: «Serverele virtuale sunt împărțite în containere, în fiecare dintre care putem instala aplicația noastră. Când sunt multe containere, trebuie să le gestionăm: să activăm unul, să dezactivăm altul, să facem backup-uri. Aceasta devine o sarcină destul de complexă, pentru care este nevoie de un sistem de orchestrare.
Anterior, fiecare aplicație era gestionată de un server separat – orice modificare în funcționarea sa putea afecta integritatea aplicației. Datorită containerelor, aplicațiile devin izolate și se rulează separat – fiecare pe propria mașină virtuală. Dacă apare o eroare, nu trebuie să pierdem timp în căutarea cauzei. Este mai simplu să distrugem vechiul container și să adăugăm unul nou».
6. Sisteme de configurare: Chef, Ansible, Puppet
Când trebuie să întreținem un parc întreg de servere, este necesar să facem multe operațiuni de același tip. Aceasta este o muncă care durează și este complicată, iar munca manuală crește riscul de erori. Aici intervin sistemele de configurare. Cu ajutorul lor, se creează un script care este ușor de citit atât de programatori, cât și de inginerii DevOps și de administratorii de sistem. Acest script ajută la efectuarea automată a operațiunilor similare pe servere. Astfel, numărul operațiunilor manuale (și, prin urmare, al erorilor) devine mai mic.
Ce carieră poate construi un inginer DevOps?
Se poate dezvolta atât pe orizontală, cât și pe verticală.
Igor Boiko: «Din punctul de vedere al dezvoltării orizontale, inginerii DevOps au în prezent cele mai largi perspective. Totul se schimbă constant, iar abilitățile pot fi dezvoltate în cele mai diverse direcții: de la sisteme de control al versiunilor până la monitorizare, de la gestionarea configurațiilor până la baze de date.
Poți deveni arhitect de sisteme dacă ești interesat să înțelegi cum funcționează o aplicație pe toate etapele ciclului său de viață – de la dezvoltare la suport.
Cum să devii inginer DevOps?
- Citește cărțile „Proiectul Phoenix” și DevOps Handbook. Acestea sunt adevăratele cărți fundamentale ale filozofiei DevOps, iar prima este un roman de ficțiune.
- Studiază tehnologiile din lista de mai sus: fie pe cont propriu, fie prin cursuri online.
- Alătură-te ca inginer DevOps într-un proiect open-source.
- Exersează și propune practici DevOps pe proiectele tale personale și de muncă.
Sursa: habr.com
