Felhőalapú hálózati szolgáltatások programozása Go nyelven

A tantárgy angol neve: Cloud Network Service Programing in Go

Adatlap utolsó módosítása: 2023. április 18.

Budapesti Műszaki és Gazdaságtudományi Egyetem
Villamosmérnöki és Informatikai Kar
MSc, mérnökinformatikus, Internetarchitektúrák és felhőszolgáltatások specializáció
Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
VITMMA22   2/1/0/v 5  
3. A tantárgyfelelős személy és tanszék Dr. Rétvári Gábor Ferenc,
4. A tantárgy előadója Dr. Rétvári Gábor (tudományos főmunkatárs, TMIT)
Lévai Tamás (egyetemi tanársegéd, TMIT)
Frankó Attila (doktorandusz, TMIT)
5. A tantárgy az alábbi témakörök ismeretére épít Alapszintű programozási ismeretek
Elosztott rendszerek ismerete
6. Előtanulmányi rend
Kötelező:
NEM
(TárgyEredmény( "BMEVITMMA04", "jegy" , _ ) >= 2
VAGY
TárgyEredmény("BMEVITMMA04", "FELVETEL", AktualisFelev()) > 0)

A fenti forma a Neptun sajátja, ezen technikai okokból nem változtattunk.

A kötelező előtanulmányi rend az adott szak honlapján és képzési programjában található.

Ajánlott:
Programozás alapjai I
Hálózatba kapcsolt erőforrás platformok és alkalmazásaik (VITMAC03)

7. A tantárgy célkitűzése A tárgy célja a cloud-native programtervezési minták bemutatása a Go programozási nyelv elemeinek segítségével. Ezek a minták lehetővé teszik a megbízhatatlan és folyton változó felhő környezetben megbízható és skálázható elosztott mikroszolgáltatás-alapú hálózati alkalmazások fejlesztését.
 
A hallgatók a félév végére elsajátítják a Go nyelv alapjait, megismerik a cloud-native fejlesztésben legfontosabb Go nyelvi konstrukciókat, és képesek a Go sztenderd könyvtárában megtalálható modulok segítségével önállóan összetett hálózati szolgáltatásokat fejleszteni. A félév második felében a hallgatók megismerkednek a cloud-native szoftverfejlesztés legfontosabb programtervezési mintáival, megtanulják ezek Go nyelvi implementációját, és egy konkrét mikroszolgáltatás-alapú hálózati alkalmazás fejlesztésének példáján megérthetik az egyes minták jelentőségét. Végül a hallgatók megismerhetik a szolgáltatáshálók architektúráját, és a cloud-native programfejlesztési minták automatizálását és deklaratív konfigurációját.
8. A tantárgy részletes tematikája Az előadások részletes tematikája:
  1. Bevezetés a cloud-native fejlesztésbe. A monolitikus alkalmazásoktól az elosztott mikroszolgáltatás-alapú alkalmazásokig, az elosztott alkalmazások fejlesztésében leggyakrabban felmerülő félreértések (Fallacies of distributed computing). A cloud-native fejlesztési filozófia. A Kubernetes.
  2. A Go programozás alapjai I. Go történelem. Go nyelvi elemek: változók, deklarációk, láthatóság, adattípusok (tömbök, szeletek, struktúrák), vezérlési szerkezetek. Függvények.
  3. A Go programozás alapjai II. Struktúrák, metódusok, hibakezelés, interfészek. Csomagok, importálás, tesztelő függvények, hibakeresés. Egy esettanulmány.
  4. A Go programozás alapjai III. Konkurens programok fejlesztése Go-ban, a CSP konkurencia modell. Go rutinok, szálak, csatornák, versenyhelyzetek és a mutexek.
  5. Cloud-native fejlesztési minták: Immutability. HTTP szolgáltatások fejlesztése Góban. Alkalmazás és erőforrás állapotok, a beágyazott állapotok veszélyei. Perzisztencia tranzakciós naplófájl használatával. Az "immutability" szerepe.
  6. Cloud-native fejlesztési minták: Idempotency. A RESTful APIk jellemzői és megvalósításuk Go nyelven. Konkurens adatstruktúrák használata, szinkronizáció csatornákkal. Állapotok kiszervezése külső adatbázisba.  Az "újrapróbálhatóság" és az "idempotency" szerepe.
  7. Cloud-native programtervezési minták: Resiliency I. Mikroszolgáltatások: motiváció, jellemzők. Minták megbízható kliens oldali alkalmazások fejlesztésére: circuit breaker, timeout, retry. A "retry storm" megelőzése, az "exponential random backoff" retry stratégia.
  8. Cloud-native programtervezési minták: Resiliency II. Minták megbízható elosztott szerver oldali alkalmazások fejlesztésére: throttle/rate-limiter és debounce minta. A "retry storm" megelőzése szerver oldalon a rate-limiting segítségével.
  9. Cloud-native programtervezési minták: Scalability. A vertikális és horizontális skálázás. Konkurens programtervezési minták: fan-in, fan-out, future, sharding. A terheléselosztás: round-robin, konzisztens hash, "power of two choices". Automatikus skálázás.
  10. Cloud-native programtervezési minták: Observability. Megfigyelhetőség az elosztott alkalmazások üzemeltetésében. Az idősor (time series) adatbázisok és a Prometheus, metrikák, Prometheus kliens használata Go nyelven. A dashboard-ok szerepe.
  11. Cloud-native programtervezési minták: Lazy coupling. A lazán csatolás szerepe a felhő alkalmazásokban: API verziók, API gateway-ek. Lazán csatolást támogató nyelvi elemek Go-ban. APIk definíciója az OpenAPI segítségével, a gRPC. A hexagonális architektúra.
  12. A szolgáltatáshálók I. A cloud-native programtervezési minták beépítése az infrastruktúrába, a sidecar proxy architektúra és az alkalmazás-szintű hálózati virtualizáció. Az Istio. Health-checking, retry/timeout, load-balancing és circuit breaker Istioban. Káosztesztelés és a mesterséges hibák előidézése (fault injection).
  13. A szolgáltatáshálók II. Forgalommenedzsment: HTTP routing és rewriting a szolgáltatáshálók fölött. Continuous delivery, DevOps és GitOps, a "canary rollout" stratégia támogatása Istio felett. Biztonsági szolgáltatások az Istioban: a mikroszegmentáció, Mutual TLS. A "distributed tracing".
  14. Házi feladatok bemutatása.

A gyakorlatok/laborok részletes tematikája:

  1. Docker és Kubernetes alapok, legfontosabb Kubernetes absztrakciók (Pod, ReplicaSet, Deployment, Service, ClusterIP, DNS), lokális Kubernetes környezet telepítése, egy mintaalkalmazás. Fejlesztési környezet kialakítása, Go eszközök megismerése, ‘Hello world' program írása és egyéb példafeladatok megoldása.
  2. Egyszerű HTTP szolgáltatás beágyazott állapotokkal, konténer építése, Kubernetes telepítés és tesztelés. A skálázás hatása round-robin és "sticky sessions" terhelés-megosztással, és az újraindítás hatása a beágyazott állapotokra.
  3. Egyszerű key-value store fejlesztése Go nyelven. HTTP kérések indítása Go nyelven, kliens alkalmazás. Konténer építése, Kubernetes telepítés, tesztelés. Egyszerű mikroszolgáltatás alapú mintaalkalmazás összeállítása a HTTP alkalmazás és a key-value store segítségével.
  4. Hálózati hibák és késleltetések kezelése kliens oldalon: timeout/retry egyedi Go kódokkal, generikus minták. Hálózati hibák és késleltetések kezelése a szerver oldalon: rate-limiting egyedi Go kódokkal, generikus minták.
  5. A sharding megvalósítása a key-value store-ban. Kubernetes telepítés a StatefulSet absztrakció használatával. Horizontális skálázás és terheléselosztás. Alkalmazás-specifikus monitoring információk exportálása a key-value store-ból a Prometheus kliens segítségével. A Prometheus operátor, a "scraping" beállítása. Dashboard készítése a Grafana segítségével.
  6. A korábban fejlesztett mikroszolgáltatás alapú alkalmazás integrálása Istio fölé. HTTP routing, load-balancing, timeout és circuit breaker központi konfigurációja Istioban, a megfelelő kódrészletek eltávolítása az alkalmazásból, tesztelés. Mikroszegmentáció a minta-alkalmazásban. Monitoring.
9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium) Előadás, kiscsoportos egyéni ill. vezetett gyakorlat.
10. Követelmények Szorgalmi időszakban Az aláírás kritériuma a gyakorlatokon való kötelező részvétel. Egy hiányzás megengedett.
Az aláírás további kritériuma egy egyeztetett házi feladat elkészítése és bemutatása. A házi feladat megfelelt/nem megfelelt értékelésű, a vizsgajegybe nem számít bele.

Vizsgaidőszakban Írásbeli és szóbeli vizsga (elméleti kérdések, egyszerű feladatok).
11. Pótlási lehetőségek

A házi feladatot a szorgalmi időszak végéig be kell adni. A házi feladat pótlása a pótlási időszakban lehetséges.

12. Konzultációs lehetőségek Igény szerint előadóval egyeztetve.
13. Jegyzet, tankönyv, felhasználható irodalom • Matthew A. Titmus - Cloud Native Go (ISBN: 9781492076339)
• Mina Andrawos, Martin Helmich - Cloud Native programming with Golang (ISBN: 9781787125988)
• Alan A. A. Donovan, Brian Kernighan - The Go Programming Language (ISBN: 9780134190440)
• Go dokumentáció: https://go.dev/doc/
14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka
Kontakt óra42
Félévközi készülés órákra18
Felkészülés zárthelyire0
Házi feladat elkészítése34
Kijelölt írásos tananyag elsajátítása24
Vizsgafelkészülés32
Összesen150
15. A tantárgy tematikáját kidolgozta Dr. Rétvári Gábor (tud. főmunkatárs, TMIT)
Lévai Tamás (tanársegéd, TMIT)
Dr. Németh Krisztián (adjunktus, TMIT)

IMSc tematika és módszer Egyeztetett időpontban további, önkéntesen választható, emelt szintű foglalkozást biztosítunk, ahol a tárgy tematikájához szorosan kötődő, időszerű kutatási és fejlesztési problémákat és azok megoldásait ismertetjük. A cél az érdeklődő (elsősorban, de nem kizárólag IMSc-s) hallgatók motivációja a képzésük folytatására az MSc-n túl a PhD képzés keretei között.
IMSc pontozás Legfeljebb 20 IMSc pont szerezhető hallgatónként az alábbiak szerint:

Sikeresen megoldott opcionális házi feladatok: max. 10 IMSc pont.

Az IMSc pontokat az IMSc programban részt nem vevő hallgatók is elnyerhetik a fentiek szerint.