Moja cesta k automatizovanému nasadeniu v cloude: Príbeh mojej bakalárskej práce
Ahojte všetci! Volám sa Vladyslav Yanchenko a rád by som sa s vami podelil o príbeh mojej bakalárskej práce s názvom "Kontinuálne nasadenie a testovanie aplikácie v klaudovom prostredí". V tomto blogovom príspevku vás prevediem celým procesom, od počiatočných nápadov až po finálnu implementáciu, a ukážem vám, ako som sa popasoval s výzvami moderného softvérového inžinierstva.
Úvod: Prečo práve cloud a automatizácia?
V dnešnej dobe je svet softvérového vývoja neuveriteľne dynamický. Cloudové technológie a DevOps postupy sa stali štandardom a ja som chcel byť pripravený na túto realitu. Cieľom mojej práce bolo navrhnúť, vyvinúť a automatizovane nasadiť modernú webovú aplikáciu s využitím technológií ako Next.js, Spring Boot, Docker a Kubernetes. Chcel som si prejsť celým životným cyklom aplikácie, od návrhu architektúry až po monitorovanie v produkcii.
Kapitola 1: Stratený v oblakoch? Zorientovanie sa v cloudových technológiách
Na začiatku som sa musel ponoriť do sveta cloudových technológií. Skúmal som rôzne modely služieb:
- IaaS (Infrastructure as a Service): Prenájom virtuálnych strojov a infraštruktúry.
- PaaS (Platform as a Service): Platforma pre vývoj a nasadenie aplikácií bez starostí o infraštruktúru.
- SaaS (Software as a Service): Hotové softvérové riešenia dostupné cez internet.
Zaujala ma aj bezpečnosť v cloude a rôzne modely nasadenia (verejný, súkromný, hybridný). Pre svoj projekt som si potreboval vybrať vhodného poskytovateľa Kubernetes. Porovnával som Azure Kubernetes Service (AKS), Amazon Elastic Kubernetes Service (EKS) a Google Kubernetes Engine (GKE). Nakoniec som sa rozhodol pre Microsoft Azure, hlavne kvôli jeho komplexnosti a širokej škále služieb.
Kapitola 2: Kontajnery a Kubernetes – Moji noví najlepší priatelia
Ďalším krokom bolo pochopiť silu kontajnerizácie a orchestrácie. Kontajnery, a najmä Docker, mi umožnili zabaliť moju aplikáciu a všetky jej závislosti do jedného prenosného balíka. To zaručilo, že aplikácia bude fungovať rovnako v akomkoľvek prostredí.
Ale čo keď máte viacero kontajnerov? Tu prichádza na scénu Kubernetes. Naučil som sa, ako Kubernetes funguje, aká je jeho architektúra a ako mi môže pomôcť s automatickým škálovaním, vysokou dostupnosťou a správou životného cyklu mojej aplikácie.
Kapitola 3: Architektúra cloudových riešení: Ako postaviť pevné základy
V tejto kapitole som sa venoval návrhu architektúry pre moju aplikáciu. Zvažoval som rôzne prístupy:
- Viacvrstvová architektúra: Klasické rozdelenie na prezentačnú, aplikačnú a dátovú vrstvu.
- Monolitická architektúra: Celá aplikácia ako jeden celok.
- Mikroservisná architektúra: Rozdelenie aplikácie na malé, nezávislé služby.
Rozhodol som sa pre mikroservisnú architektúru, pretože ponúka najväčšiu flexibilitu a škálovateľnosť, čo je v cloudovom prostredí kľúčové.
Kapitola 4: Môj technologický arzenál
Výber správnych technológií bol kľúčový. Tu je môj technologický stack:
-
Frontend: React a Next.js. React pre jeho komponentovú architektúru a Next.js pre server-side rendering a statické generovanie stránok, čo zlepšuje výkon a SEO.
-
Backend: Spring Boot. Ako Java vývojár som sa v Spring Boote cítil ako doma. Umožnil mi rýchlo vytvárať robustné a škálovateľné mikroservisy.
-
Autentifikácia: JSON Web Tokens (JWT). Pre bezpečnú a bezstavovú autentifikáciu medzi frontendom a backendom.
-
Kontajnerizácia: Docker. Pre zabalenie mojich aplikácií do kontajnerov.
-
Testovanie: Jest pre frontend, JUnit a Mockito pre backend, a JMeter pre záťažové testy.
Kapitola 5: Od kódu k funkčnej aplikácii
V tejto kapitole som sa konečne pustil do samotného vývoja. Navrhol som a implementoval som:
-
Backend: Spring Boot aplikáciu s REST API pre registráciu, prihlásenie a správu používateľských dát. Použil som PostgreSQL databázu.
-
Frontend: Next.js aplikáciu s používateľským rozhraním pre interakciu s backendom. Vytvoril som stránky pre prihlásenie, registráciu a dashboard.
-
Automatizované testy: Jednotkové a integračné testy pre backend aj frontend, aby som zabezpečil kvalitu a stabilitu kódu.
Celá architektúra bola navrhnutá s ohľadom na nasadenie do cloudu.
Kapitola 6: Automatizácia je kráľ: CI/CD a nasadenie
Toto bola najzaujímavejšia časť mojej práce. Implementoval som plne automatizovaný CI/CD proces pomocou GitHub Actions. Môj workflow vyzeral nasledovne:
- Push do repozitára: Každý push do Git repozitára spustil môj workflow.
- Build a Test: Aplikácie sa automaticky zbuildili a spustili sa všetky testy.
- Vytvorenie Docker obrazov: Po úspešných testoch sa vytvorili Docker obrazy pre frontend a backend.
- Push do Container Registry: Obrazy sa nahrali do Azure Container Registry.
- Nasadenie do Kubernetes: Nakoniec sa aktualizovali Kubernetes deploymenty a nová verzia aplikácie sa nasadila bez výpadku.
Obrázok 12: Môj CI/CD proces v praxi.
Okrem toho som vytvoril aj monitorovacie prostredie pomocou Prometheus a Grafana, aby som mohol sledovať výkon a zdravie mojej aplikácie v reálnom čase.
A aby som si bol istý, že moja aplikácia zvládne aj nápor používateľov, vykonal som záťažové testy pomocou JMeter.
Kapitola 7: Čo ďalej? Budúcnosť mojej aplikácie
V poslednej kapitole som sa zamyslel nad budúcnosťou mojej aplikácie. Diskutoval som o možnostiach ďalšieho zlepšenia, ako napríklad:
- Automatické škálovanie: Implementácia Horizontal Pod Autoscaler v Kubernetes pre automatické škálovanie na základe záťaže.
- Optimalizácia výkonu: Jemné ladenie konfigurácie a optimalizácia kódu pre ešte lepší výkon.
- Rozšírenie funkcionality: Pridanie nových funkcií do aplikácie.
Záver: Čo som sa naučil
Táto bakalárska práca bola pre mňa neuveriteľne obohacujúca skúsenosť. Nielenže som splnil všetky ciele, ktoré som si stanovil, ale naučil som sa aj obrovské množstvo o moderných technológiách a postupoch v softvérovom inžinierstve. Zistil som, že kombinácia cloudu, kontajnerov, mikroservisov a automatizácie je kľúčom k budovaniu škálovateľných, odolných a udržiavateľných aplikácií.
Verím, že moja práca a tento blogový príspevok môžu byť inšpiráciou pre ďalších študentov a vývojárov, ktorí sa chcú vydať na podobnú cestu. Svet cloudu a DevOps je plný výziev, ale aj neuveriteľných možností. A ja som pripravený ich objavovať!