diff --git a/app/blog/2019/09/24/.gitattributes b/app/blog/2019/09/24/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..b851ce540b28d239850493b793b49724a739a955 --- /dev/null +++ b/app/blog/2019/09/24/.gitattributes @@ -0,0 +1 @@ +*.{jpg,JPG,png,PNG,JPEG,jpeg,gif,GIF,webp,pdf,svg,SVG,mp4,pdf} filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/app/blog/2019/09/24/adminschversions.png b/app/blog/2019/09/24/adminschversions.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7375971b750ef31887240350bff0041f8a665c --- /dev/null +++ b/app/blog/2019/09/24/adminschversions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1593eb728c7b72a4034081cab92bf7b5ee437e62ff1223e01ccd8fec3cd67b2 +size 75743 diff --git a/app/blog/2019/09/24/mi-az-a-microservice-ujrairtuk-az-admin-sch-t.md b/app/blog/2019/09/24/mi-az-a-microservice-ujrairtuk-az-admin-sch-t.md new file mode 100644 index 0000000000000000000000000000000000000000..9ff584796cd747944cd557822757a431cb7a70bf --- /dev/null +++ b/app/blog/2019/09/24/mi-az-a-microservice-ujrairtuk-az-admin-sch-t.md @@ -0,0 +1,38 @@ +--- +slug: mi-az-a-microservice-ujrairtuk-az-admin-sch-t +title: Mi az a microservice? Újraírtuk az Admin.SCH-t +authors: schulczf +tags: [] +--- + +Az [Admin.SCH](https://admin.sch.bme.hu) az az oldal, ahol a kollégisták kezelhetnek mindent, ami a Házon belüli internetezésükkel kapcsolatos: IP címet regisztrálhatnak, újabb eszközöket adhatnak hozzá, vagy bejelenthetik a szobai access point-jukat. Ez egy olyan weboldal, amit minden kollégista használt már, és életbevágó szolgáltatásokat tudnak itt beállítani – mondhatjuk tehát, hogy kritikus rendszerről van szó. + +<!--truncate--> + +Az oldalt kiszolgáló backend a közelmúltban elkezdett elavulni, ráadásul a dokumentáció problémái és architekturális sajátosságai miatt nem tudtuk ésszerűen továbbfejleszteni. Nem volt hát más választásunk, mint hogy újraírjuk. + +A korábbi Admin.SCH egy monolit webalkalmazás volt, ami azt jelenti, hogy a szoftver összes funkciója (IP cím regisztráció, Active Directory integráció, stb.) egyetlen “csomag” részét képezi. Ez a hagyományos megközelítés, egy programozás házinál is ezt használjuk: hiába bontjuk a megoldásunkat ezernyi .c és .h fájlra vagy osztályra, a végén mégis egyetlen bináris, azaz egy monolit készül belőle. Egy ilyen alkalmazást könnyebb fejleszteni, könnyebb tesztelni, hiszen csak egyetlen programot kell elindítani és ellenőrizni, és könnyebb deploy-olni, hiszen csak egyetlen dolgot kell felmásolni egy szerverre, és máris éles lehet a szolgáltatás. + +Ennek viszont ára is van: a projekt növekvő kódbázisával az egyre átláthatatlanabb lehet, minden frissítéskor az egészet kell újratelepíteni, és egy hiba akár az egész szolgáltatást is térdre kényszerítheti. + + + +<div style={{textAlign: "center"}}> +<em>Monolit rendszer vs. microservice architektúra</em> +</div> + +Úgy döntöttünk, hogy az új rendszert már microservice-ek segítségével építjük fel: nem egy nagy szolgáltatást készítünk, hanem több kicsit. Ezeknek a kicsi szoftvereknek aztán kicsi, meghatározott felelőssége is lehet – van például, ami az IP-k regisztrációját teszi lehetővé, van, amivel a saját AP-kat lehet bejelenteni, és így tovább. Ezzel nagyrészt megoldottuk az átláthatatlan kód problémáját, mert apró, önálló programokkal dolgozunk, amik mindig könnyen áttekinthetők maradnak. Lehetővé vált az is, hogy a komponensek külön fejlődjenek, ami különösen előnyös egy olyan projektnél, amin sok egyetemista dolgozik, mert mindenki a saját ütemében haladhat. A későbbi bővítés is egyszerű, hiszen az új szolgáltatások hozzáadásához nem kell belenyúlni az eddigi kódba. További előny, hogy a KSZK egyéb, a hálózat üzemeltetéséhez kapcsolódó, már létező szolgáltatásait is bele lehet vonni az Admin.SCH-ba. + +A microservice architektúra viszont több hátránnyal is jár. Egyrészt a szolgáltatások közötti kommunikáció miatt előfordul, hogy ha az egyik szolgáltatás interfésze megváltozik, akkor több másik szolgáltatásba is át kell vezetni a változtatásokat. Ezen a problémán segít az API verziózás és az API dokumentációs eszközök használata (mint például az OpenAPI/Swagger). Az alkalmazás futtatását jelentősen bonyolíthatja, hogy sok kisebb szolgáltatásból áll, szóval szükségünk volt valamilyen rendszerre, ami a microservice-eket menedzseli. + +A microservice-eket konténerekbe szerveztük, és a KSZK Kubernetes klaszterébe telepítettük. Az ebben futó Docker konténerek könnyedén példányosítható, leállítható és mozgatható process-ek, amikben egy-egy microservice fut. Megtalálható bennük minden, a futtatáshoz kellő dependencia, könnyen futtathatók, és a microservice-ek szeparációja is megoldott. A Kubernetes pedig a konténerek menedzselését, és a közöttük lévő kommunikációt biztosítja, azaz orkesztrálja őket. A konténerek Docker image-ekből készülnek, amiket [git.sch.bme.hu](https://git.sch.bme.hu/) szolgáltatásba épített Continuous Integration automatikusan előállít. + +Az újraírás első ütemének célja az volt, hogy a kollégisták által használt funkciók kerüljenek át az új rendszerbe. Ez a cél meg is valósult, így jelenleg a két rendszer párhuzamosan fut. A legtöbb kollégista csak az új rendszerrel fog találkozni, ami teljesen különálló a régitől, viszont a felület át lett emelve, ezért csak kisebb átalakításokra volt most rajta lehetőség. A következő félévekben át szeretnénk alakítani a felületet és új funkciókkal bővíteni az új rendszert. + + + +<div style={{textAlign: "center"}}> +<em>A régi és az új rendszer együttélése</em> +</div> + +Ha valamilyen hibát vagy szokatlan működést tapasztaltok az oldal használata közben, akkor adjatok fel ticketet a [support.sch.bme.hu](https://support.sch.bme.hu/) weboldalon! diff --git a/app/blog/2019/09/24/monolitmicroservice.png b/app/blog/2019/09/24/monolitmicroservice.png new file mode 100644 index 0000000000000000000000000000000000000000..4b40a88621ac5c24e784e90ad17ae9d55aa1dbb5 --- /dev/null +++ b/app/blog/2019/09/24/monolitmicroservice.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39567876d76d72e4518443f1bfc92afa52275868e36b51b41734411cfe4a52c6 +size 69445