Nagy házi feladat¶
Nincs véglegesítve 2025. őszi félévre
A házi feladat otthon, önállóan elkészítendő mikroszolgáltatás-architektúrára épülő és konténertechnológiát használó szoftverrendszer elkészítése és működőképes állapotban való bemutatása.
A nagy házi feladat két részből áll:
- a rendszer követelmény specifikációjának elkészítése és az architektúrájának megtervezése a szorgalmi időszakban. Példa specifikáció és architektúraábra.
- a rendszer implementálása, amit szóban is meg kell védeni az utolsó vizsgáig.
Minimum elvárások¶
- a rendszer kifelé egy jól körülhatárolható funkcióhalmazzal rendelkező (pl. könyvtári nyilvántartás) egységes szolgáltatást (backend) valósít meg.
- Specifikációban felsorolás szerűen meg kell határozni a szolgáltatás funkcióit (pl. könyvek hozzáadása, kölcsönzés, visszavitel, felhasználók kezelése)
- az architektúra több komponensre (mikroszolgáltatás) van darabolva. A mikroszolgáltatások külön-külön API-val rendelkeznek, amelyek hálózaton keresztül (pl. más mikroszolgáltatásokból szinkron vagy aszinkron, API GW-en keresztül kliensekből) hívhatók.
- Specifikációnan meg kell határozni a mikroszolgáltatásokat/komponenseket rövid magyarázattal, illetve azok technológiáit. Az architektúraábrán fel kell tüntetni a komponensek közötti főbb kapcsolatokat is.
-
a szolgáltatás minden része valamely orkesztrációs vagy serverless platformon fut. Választható platformok:
- saját gépen futó (on-premise) Kubernetes (K8S)
- saját gépen futó (on-premise) docker compose
- Azure Kubernetes Service (AKS)
- Azure Functions (AZF)
- Azure Container Apps (ACA)
-
felhasználói felület (kliens) készítése nem elvárás, de enélkül is tudni kell demonstrálni a működést, például Postman klienssel hívva a REST API-t. Az esetleges felületet, klienst nem értékeljük, nem pontozzuk.
- A minimum elvárásokat teljesítő rendszer 24 pontot ér.
Tip
Külső (pl. Microsoft-os) demók, mintaalkalmazások (elemei) felhasználhatók, de ezt külön jelezni kell bemutatáskor. A nem jelzett, de átvett részletek plágiumnak számítanak. A demókból összefércelt egymáshoz nem kapcsolódó funkciókupacokat nem díjazzuk.
Tip
Az órai demókban vagy mintaalkalmazásban megvalósított funkciók átvételéért pont nem adható, de azok tovább átdolgozhatók saját implementációnak.
Kötelező leadandók¶
A házi feladatot a Moodle-ben publikált GitHub Classroom meghívóval generált repository-ban szükséges beadni. Mind a két mérföldkő (spec, implementáció) leadása azonos repositoryban történik két külön Pull Request formájában.
A beadott repository struktúrája:
srcmappa: forráskód (saját)README.md: specifikáció és esetleg egyéb dokumentáció markdown formátumbanarchitecture.png: specifikáció részeként elkészített architektúraábra PNG formátumban. Az ábrának tartalmaznia kell a mikroszolgáltatásokat, azok főbb kapcsolatait, valamint az alkalmazott technológiákat.-
points.csv: CSV a megszerzendő jogcímekről, a pontszámukról és azok összegéről. Elég a jogcímek rövidített neve. Példa:MIN;24 IaC;10 ... Sum;82 -
azure-learn.csv: Opcionális: Ha Azure tananyagot dolgoztál fel, CSV az elvégzett képzési tervekről és a hosszukról percben. A végén külön sorban összegezd a perceket. Példa:Microsoft Azure Fundamentals: Describe Azure architecture and services;205 AZ-400: Development for enterprise DevOps;405 Összesen;610
Platformválasztás vs. Azure költségek¶
A tárgy által oktatott, preferált architektúrák felhős költségei tipikusan magasabbak, mint amire a hallgatói Azure előfizetés kreditszámát (100$ / 1 év) méretezték. A költségeket lehet ugyan kontrollálni, de ez folyamatos odafigyelést igényel. Nem akartuk elvenni a lehetőséget és a motivációt a felhős szolgáltatások kipróbálásától, de a felhős alapplatformok választását a nagyházi keretében (különösen AKS) alapesetben nem ajánljuk!
Ha mégis ezeket választanád, néhány tipp:
- Érdemes olyan platformokat választani, ahol könnyű elérni a 0 terhelés = kb. 0 költség állapotot. ACA és Azure Functions esetében könnyebb, AKS-nél figyelni kell, hogy használaton kívül leálljon a klaszter.
- Figyeld a költségeket, de vedd figyelembe, hogy az elszámolás laggolhat (később jelentkeznek a költségek)
- Legnagyobb költségokozók: adatbázisok, futó virtuális gépek és node pool-ok, nagy mennyiségű adat mozgatása régiók között
- Próbáld egyszerűsíteni a felhős részt, két független telepítés esetén nem kell, hogy minden nem-üzleti funkció (pl. autentikáció) ugyanolyan komplex legyen a két telepítésben (lásd a pontrendszerben a két-független-platformos jogcímet)
Ajánlott viszont
- saját gépen futó (on-premise) K8S architektúra kiegészítése egy-egy Azure szolgáltatással, pl. konténerek letöltése Azure Container Registry-ből
- IaC eszközökkel (pl. terraform) egy-egy parancssori paranccsal lebontani, majd szükség esetén visszaépíteni az architektúra költséges részeit
FAGYVESZÉLY!
Ha a hallgatói előfizetésen a kredit elfogy, az előfizetés befagyasztásra kerül. Vannak erőforrástípusok, amelyeknél a leállítás csökkenti vagy megszünteti a költséget (pl. virtuális gép), ugyanakkor vannak, amelyeket nem lehet költségspórolás miatt "kikapcsolni" (tipikusan a tárolást végző erőforrások, adatbázisok). A kredit elfogyása megakadályozhatja az Azure-os pontok megszerzését!
Azure tananyagok elvégzésének költségei¶
Warning
Vannak olyan képzési tervek, amik saját előfizetésen elvégzendő, kreditbe kerülő műveleteket írnak elő. Ezek is csökkentik a más Azure-os pontok megszerzésére fordítható keretet, így érdemes az emiatt létrehozott erőforrásokat a lehető leghamarabb törölni.
Microsoft Learn Sandbox
Vannak olyan képzési tervek, ahol lehetőség van Microsoft Learn Sandbox használatára (pl. ebben a modulban) – ez egy olyan Azure környezet, amihez nem kell előfizetés. A Microsoft Learn Sandbox-ról bővebben itt.
Pontrendszer¶
Az elkészített rendszer egyes képességeire az alábbiak szerint pontok kaphatók. A végső jegy az összpontszámból adódik. A közepes szintet el nem érő megoldások nem kaphatnak megajánlott jegyet.
| Jegy | Pont |
|---|---|
| 5 | 80-100 |
| 4 | 67-79 |
| 3 | 54-66 |
További szabályok:
- ahol egy pontszám van feltüntetve, ott részpontszám alapesetben nem kapható. Tól-ig-es megadásnál, ahol alesetekre van bontva a jogcím, ott az alesetekre részpontszám nem kapható. Ahol csak maximum van feltüntetve, ott részpontszám kapható.
- egy jogcímen csak egyszer szerezhető pont, kivéve ahol ezt külön jelezzük
Általános és cross-technológia¶
-
{PLAT2} A szolgáltatás két különféle orkesztrációs/platformon fut, egymástól függetlenül, tehát a teljes szolgáltatás két egymástól független telepítéssel rendelkezik (pl. on-premise K8S és AKS). Nem kell, hogy minden nem-üzleti funkció (pl. autentikáció) ugyanolyan komplex legyen a két telepítésben, csak az üzleti funkciók képességei egyezzenek. Legalább az egyik platformnak Azure-ban kell futnia: 20 pont
-
{IaC} IaC (terraform, Bicep - ez Azure-only!, stb.) eszközzel legalább az üzleti funkciókat futtató architektúrarész (K8S / AKS / Azure Function App platform) felépítése és lebontása. A visszaépítés végén az alkalmazásnak működnie kell, nem elég például egy üres AKS-t visszaépíteni. Védésen nem kell demózni (sokáig tartana), de platformonként egy felépítésről és egy lebontásról egy-egy kimeneti naplót be kell tudni mutatni. Nem kell a teljes felépítés-lebontás folyamatot az IaC eszközzel megvalósítani, ki lehet egészíteni egyéb automatizációval, szkripttel. 7-10 pont
- egyik platform telepítés (pl. Azure-os) felépítése-lebontása 7 pont
- mindkét platform felépítése-lebontása 10 pont
-
{LANG2} Több implementációs nyelv használata. A backend szolgáltatások legalább két különböző programozási nyelven készültek. (A frontend ebbe nem számít bele!): 5 pont
-
{GRPC} gRPC alapú kommunikáció használata legalább egy mikroszolgáltatás esetében: 7 pont
-
{NOERR} Hibatűrést növelő kommunikációs minták alkalmazása külső komponensek segítségével (pl. Polly, Resilience4j, Tenacity). 5 pont
Danger
Saját mintaimplementációért nem jár pont. Ha az (API/App) gateway valósítja meg, szintén nem jár pont.
-
{APIGW+AUTH} A szolgáltatás autentikációjának kiszervezése (API/App) gateway-be forward autentikáció használatával: 7-12 pont
- OAuth proxy vagy self-hosted/felhőben futó Azure API Management gateway használatával valamilyen elterjedt, külső vagy saját telepítésű OAuth IDP (pl. KeyCloak, Entra) felé továbbítva: 12 pont
- Egyéb egyszerű saját dummy autentikációs szolgáltatás felé továbbítva: 7 pont
-
{AZAPIMGMT} Azure API Management használata. A kliensről jövő minden API kérés áthalad az API Management gateway-en mielőtt eljutna a klaszterbe vagy az Azure Function-ökhöz. Legalább egy policy-t érvényesít. 7-17 pont
- Egy platformon: 7 pont
- Két platformon, ebből az egyik on-premise (self-hosted mód) +5 pont
- Több API verzió támogatása API Management szolgáltatás segítségével +3 pont
- Mock válaszok legalább egy API művelethez, API Management szolgáltatás segítségével +2 pont
-
{ASYNCCOMM} Aszinkron, üzenetsor alapú kommunikáció mikroszolgáltatások között saját telepítésű (pl. RabbitMQ konténer) üzenetsor, üzenetkezelő (messaging) szolgáltatással: 5-15 pont
- Integrációs esemény eventually consistency adatkezeléshez: 5 pont
- Transactional Outbox pattern alkalmazása: 5 pont
- Idempotens megvalósítás pl. deduplikációs elven: 5 pont
-
{SAGA} Saga minta implementálása legalább egy folyamat esetén, hibakezeléssel és kompenzáció megvalósításával 15 pont
-
{EVENTSOURCING} Event Sourcing minta alkalmazása 15 pont
-
{CQRS} CQRS és mediátor minta alkalmazása legalább egy szolgáltatás megvalósítása során. 5 pont
-
{DDD} DDD tervezési elvek demonstrálása Event Storming alapú üzleti folyamattervezéssel. A pontot extra ábra(k) elkészítésével szükséges demonstrálni, amin az Event Storming során megtervezett folyamat kerül dokumentálásra. A védésen bemutatni szükséges a tervek hatását az architektúrára, implementációra: 5 pont
-
{ACTOR} Aktor minta alkalmazása legalább egy állapottal rendelkező szolgáltatás esetében magas szintű keretrendszerek segítségével pl.: Akka, Microsoft Orleans, Akka.NET: 15 pont
-
{CACHE} Saját telepítésű (pl. Redis konténer) használata kifejezetten cache-elésre legalább egy művelet esetén: 5 pont
-
{HELM} A szolgáltatás Kubernetesen belül futó része Helm chart-on keresztül telepíthető. Szükséges demonstrálni a rendszer frissítését a chart segítségével: 10 pont
-
{ACRBUILD} Legalább egy saját konténer build-elése Azure Container Registry-ben: 7-12 pont
- ad-hoc build saját gépről feltöltött context alapján: 7 pont
- build valamilyen triggerre (pl. commit egy adott git ágra): 12 pont
Warning
Jelenleg hallgatói előfizetéssel nem szerezhető meg, mert a szükséges szolgáltatás ilyen típusú előfizetéseken nem vehető igénybe.
-
{K8SJOB} Kubernetes Job objektum használata, lefuttatása védéskor: 5 pont
-
{K8SCRONJOB} Kubernetes CronJob objektum használata, korábbi lefutás demonstrálása védéskor: 5 pont
-
{K8SCMAP} Kubernetes ConfigMap objektum használata valamely konfigurációs beállítás tárolására: 5 pont
-
{K8SSECRET} Kubernetes Secret objektum használata titok tárolására: 3 pont
-
{AKV2K8S} AKS titkok leképezése K8S Secret objektumokba vagy podok környezeti változóira akv2k8s könyvtárral vagy Azure Key Vault provider for Secrets Store CSI Driver-rel (AKVSSCSID) 5-7 pont
- alapműködés: AKV -> K8S Secret (akv2k8s), AKV -> secret volume (AKVSSCSID): 5 pont
- extra funkciók kihasználása: AKV -> környezeti változó (akv2k8s), AKV -> K8S Secret (AKVSSCSID): 7 pont
-
{OT} OpenTelemetry alkalmazása különféle célokra: strukturált naplózásra, metrikák monitorozására, elosztott nyomkövetésre. OpenTelemetry Collector komponens és valamilyen aggregátor felület használata kötelező a klaszteren belül (pl. Jaeger, Grafana, Azure Monitor), amin védéskor a naplókat, metrikákat, elosztott nyomkövetést be kell tudni mutatni: 5-15 pont
- egyfajta célra 5 pont
- kétfajta célra 7 pont
- mindhárom célra 10 pont
- exportálás Azure Monitor-ba +5 pont
OpenTelemetry Collector vs Azure alapú környezetek
Az OpenTelemetry Collector nem támogatott AZF környezetben. AKS és ACA környezetekbe elvileg telepíthető, de jelentős munka és ezekre sincs hivatalos MS támogatás (még). Ajánlott módszer: saját gépen futó klaszterben OpenTelemetry Collector alapú megoldás, opcionálisan a monitoradatokat exportálva Azure Monitor-ba, míg Azure platformok esetében a specifikusan Azure-os jogcímek között leírt módszerek.
-
{HSC} Horizontális skálázás podok szintjén. Védésen a (vissza)skálázást demonstrálni kell. 5-10 pont
- Horizontal Pod AutoScaler alapú: 5 pont
- KEDA alapú, valamilyen adat, esemény alapján: 10 pont
-
{K8SNS} Több példány (verzió) telepítése ugyanabba a környezetbe K8S namespace-ek vagy Azure Function deployment slot-ok használatával. Azure Container Apps platform esetén külön Container Apps példány használható: 7 pont
-
{CICD} CI/CD folyamat implementálása valamely elterjedt DevOps eszközre építve (GitHub Actions, Azure DevOps). Git push-ra a backend új verziója elkészül és kitelepül: 10-15 pont
- egy platformra telepít: 10 pont
- két platformra telepít 15 pont
-
{CHAOS} Chaos engineering eszköz alkalmazása (pl. chaos mesh). Védésen szemléltetés káosz teszt futtatással: 7 pont
-
{EXTAPI} Külső online (SaaS) szolgáltatás (pl. Azure AI, Twitter, Facebook, Google Maps, Bing Maps, stb.) integrálása API-n keresztül, autentikációt végrehajtva 5-7 pont
- egyszerű REST-jellegű webes API, SDK használat nélkül, egyszerű API-kulcsalapú autentikáció 5 pont
- SDK-val / REST API-val, iparilag elfogadott, elterjedt autentikációs protokollt (pl. OIDC) végrehajtva 7 pont
-
{INOUTPROC} Konfigurálható, hogy az adott mikroszolgáltatás külön szolgáltatásként (külön processz / pod) települjön-e, vagy a hívóval együtt egy folyamatba (in-process); a hívás a konfigurációnak megfelelően vagy szolgáltatáshívás vagy közvetlen (függvény)hívás. Bemutatáskor példát kell mutatni mindkét esetre. 10 pont
Tip
Ha ugyanezt futási időben is szeretnénk, azaz, hogy a szolgáltatások közötti kommunikáció dinamikusan változhasson lokális és távoli jellegű hívás között, akkor érdemes az aktor modell alapú megoldások felé elmozdulni. A legtöbb aktor modell implementáció biztosítja az ilyesfajta transzparenciát a futási hely tekintetében. Lásd még az aktor mintás jogcímet.
On-premise futó rendszerekhez¶
-
{OPDB2} Legalább kétfajta on-premise adatbázis használata. Két eltérő technológiájú adatbázis használata perzisztenciára. Memória adatbázis, cache adatbázis (Redis) nem számít be: 10 pont
-
{OPEXTCR} Konténerek vagy helm chart(ok) letöltése on-premise klaszterbe külső container registry-ből, authentikációval: 7-10 pont
- Azure Container Registry autentikációval pl. image pull secret-tel: 10 pont
- Egyéb container registry autentikációval pl. image pull secret-tel: 7 pont
-
{OPARC} On-premise Kubernetes bekötése Azure Arc-ba: 5-15 pont
- A szolgáltatás bekötése 5 pont
- A szolgáltatás on-premise Azure Function engine-en fut (preview!) +10 pont
-
{OPSTR} Tartós tár, pl. lokális mappa csatolása klaszterbe. 3 pont
-
{GW} Saját telepítésű (API/App) gateway használata. Kivéve self-hosted Azure API Management. 5-10 pont
- Traefik használata útvonalválasztásra: 5 pont
- Más, saját telepítésű (API/App) gateway használata: 10 pont
Danger
Saját gateway implementációért nem jár pont.
Azure alapon futó rendszerekhez¶
-
{AZDB2} Legalább kétfajta Azure-os adatbázisplatform használata (Azure SQL, Azure Database for PostgreSQL - Flexible Server, Cosmos DB, Azure Table Storage). Két eltérő technológiájú adatbázis használata perzisztenciára. Memória adatbázis, cache adatbázis (Azure Redis) nem számít be, egyéb NoSQL igen: 10 pont
Tip
30 napig ingyenes (többször is aktiválható!) Cosmos DB
-
{AZRED} Azure Redis szolgáltatás használata kifejezetten cache-elésre saját telepítésű cache helyett, legalább egy művelet esetén: 5 pont
-
{AZING} Gateway/Ingress Azure szolgáltatásra (kivéve Azure API Management) vagy AKS kiterjesztésre építve. 7-10 pont
- AKS esetén valamely hivatalosan támogatott AKS ingress opció: 10 pont
- Egyéb Azure szolgáltatás (pl. Azure App Gateway; kivéve Azure API Management): 7 pont
-
{AZACR} Konténerek vagy helm chart(ok) letöltése Azure-beli klaszterbe vagy Azure Function-be saját Azure Container Registry-ből: 3-7 pont
- ACR admin felhasználó nevében: 3 pont
- managed identity alapú hozzáféréssel: 7 pont
-
{AZKVAU} Titkok lekérése saját Azure Key Vault-ból passwordless hozzáféréssel (pl. managed identity, workload identity): 3 pont
-
{AZMSG} A mikroszolgáltatások közötti kommunikáció kiszervezése valamely Azure üzenetkezelő szolgáltatásba (pl. Service Bus, de Azure Storage Queue is elfogadott) managed identity alapú hozzáféréssel: 5 pont
-
{AZACA} Azure Container Apps skálázása szabály alapján: 5 pont
-
{AKSMON} AKS monitorozása, különféle telemetriatípusok (strukturált naplók, metrikák, elosztott nyomkövetés) gyűjtése és megjelenítése Azure Monitor szolgáltatásban Azure Monitor agent-tel vagy agent nélkül, Azure Monitor OpenTelemetry disztribúcióval 3-10 pont
- strukturált naplók vagy metrikák gyűjtése: 3 pont
- strukturált naplók és metrikák gyűjtése: 5 pont
- alkalmazásszintű OpenTelemetry telemetriák küldése közvetlenül (agent nélkül) Azure Monitor-ba az Azure Monitor OpenTelemetry disztribúcióval: +5 pont
-
{OTAZURE} AKS/ACA/AZF platformon futó alkalmazásból alkalmazásszintű OpenTelemetry telemetriák küldése közvetlenül (agent nélkül) Azure Monitor-ba Azure Monitor OpenTelemetry disztribúcióval: 10 pont
-
{AKSMON} AKS monitorozása, különféle telemetriatípusok (strukturált naplók, metrikák, elosztott nyomkövetés) gyűjtése és megjelenítése Azure Monitor szolgáltatásban Azure Monitor agent-tel 3-5 pont
- strukturált naplók vagy metrikák gyűjtése: 3 pont
- strukturált naplók és metrikák gyűjtése: 5 pont
-
{ACAMON} ACA monitorozása OpenTelemetry agent-tel. Naplók és elosztott nyomkövetési adatok gyűjtése és megjelenítése Azure Monitor-ban (App Insights): 10 pont
Danger
Platformonként csak egy OpenTelemetry integrációs módszerért (vagy agent alapú vagy közvetlen) jár pont.
-
{AZFMON} AZF monitorozása beépített OpenTelemetry integrációval. Naplók és elosztott nyomkövetési adatok gyűjtése és megjelenítése Azure Monitor-ban (App Insights): 10 pont
Előzetes verzió
Az AZF beépített OpenTelemetry integrációja még csak előzetes verziós.
Danger
Platformonként csak egy OpenTelemetry integrációs módszerért (vagy beépített vagy közvetlen) jár pont.
-
{AZCS} Azure Chaos Studio használata káoszteszt futtatására: 7 pont
-
{AZSTR} Tartós tár, például Azure Disk, Azure Files csatolása AKS-, ACA-klaszterbe vagy Azure Function-be: 5 pont
-
{AZBLOB} Azure Storage Blob integrálása managed identity használatával 5 pont
-
{AZFDF} Durable Functions használata mikroszolgáltatások orkesztrációjára Azure Functions platformon: 5 pont
-
{AZACI} Legalább egy pod/szolgáltatás futtatása Azure Container Instance szolgáltatáson az AKS virtual node képességére építve. 7 pont
-
{AZCAS} AKS node szintű skálázás cluster autoscaler-rel. Védésen a (vissza)skálázást demonstrálni kell. 7 pont
Warning
Jelenleg hallgatói előfizetéssel ez a pont valószínűleg nem megszerezhető, mert a szükséges vCPU kvóták az ilyen típusú előfizetéseken túl alacsonyak.
Microsoft minősítések¶
Minősítésekből összesen 25 pont szerezhető. A megszerzett minősítések felkészülési anyagainak elsajátítása után pont nem kapható. A minősítéseket listázó oldalra belépve kell igazolni a minősítés megszerzését.
-
{AZ900} Microsoft Certified: Azure Fundamentals minősítés megszerzése 15 pont
-
{AZ100} Microsoft Certified: Azure Administrator Associate minősítés megszerzése 20 pont
-
{AZ200} Microsoft Certified: Azure Developer Associate minősítés megszerzése 25 pont
Egyéb¶
- {BASE} A minimum elvárásokat teljesítő rendszer: 24 pont
- {ALLHF} Minden félévközi házi feladat (6 db.) teljesítése. Nem arányosítható - csak akkor adható, ha minden házi teljesített: 6 pont
- {MSLEARN} Azure tananyagok elsajátítása, kizárólag a külön leírt követelmények szerint: max. 24 pont
- {CONTRIB} Visszacsatolás. A véglegesített pontrendszer vagy tananyag javítása, bővítése, módosítása pull request-tel. Helyesírási hiba is lehet, de az oktatók döntenek, hogy pontot ér-e a módosítás. Többször is megszerezhető. 0-2 pont, összesen max. 6 pont.
A szabályrendszer változása¶
Véglegesítés után is fenntartjuk a jogot
- a pontszerzési jogcímek halmazának bővítésére
- a pontszámok növelésére és egyéb hallgatóknak előnyös változtatásokra
- pontosításra, helyesírási hibák, formázás javítására
- egyéb változtatásra egyetemi szabályok változása miatt (pl. járványhelyzet miatt)
A pontrendszer véglegesítés után is általatok is módosítható/bővíthető. Ezt pull request formájában, megfelelő indoklással nyújthatjátok be, de a PR benyújtása nem jelenti annak az automatikus elfogadását, arról minden esetben a tárgy oktatói döntenek.
A változásokat a GitHub history-ban követhetitek.