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:

  1. Push do repozitára: Každý push do Git repozitára spustil môj workflow.
  2. Build a Test: Aplikácie sa automaticky zbuildili a spustili sa všetky testy.
  3. Vytvorenie Docker obrazov: Po úspešných testoch sa vytvorili Docker obrazy pre frontend a backend.
  4. Push do Container Registry: Obrazy sa nahrali do Azure Container Registry.
  5. Nasadenie do Kubernetes: Nakoniec sa aktualizovali Kubernetes deploymenty a nová verzia aplikácie sa nasadila bez výpadku.

Proces integrácie a nasadzovania aplikácie 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ť!

Next Post

Kontinuálne nasadenie a testovanie aplikácie v klaudovom prostredí