Mit jelent az architektúra? Kód, futás és telepítés
Célok
A lecke végére meg tudod különböztetni egy rendszer kódszerkezetét, futási szerkezetét és telepítési szerkezetét, és el tudod dönteni, melyik nézetről beszél valaki, amikor „monolitot” vagy „mikroszervizt” mond.
Miért kell több nézet?
A „monolit vagy mikroszerviz?” kérdésre csak akkor lehet értelmes választ adni, ha ismert, melyik határról van szó. Ugyanaz a rendszer háromféle módon is darabolható, és a három darabolás egymástól függetlenül lehet finom vagy durva. Aki ezt nem választja szét, az gyakran két különböző dologról vitatkozik.
Mi az architektúra?
Egy rendszer architektúrája a fontos részek, a köztük levő kapcsolatok és azok a döntések összessége, amelyek a későbbi változtatást megkötik. Nem a teljes kód leírása, hanem az, ami drágán módosítható. Ezért a legtöbb architekturális kérdés valójában kompromisszumkérdés: mi válik könnyebbé, és mi nehezebbé.
A három nézet
Kódszerkezet. Melyik modul milyen felelősséget visel, mit tesz láthatóvá, és mit használ más modulokból? A határt itt fordítási szabály, csomagláthatóság vagy automatikus függőségellenőrzés tartja fenn.
Futási szerkezet. Hány folyamat fut, hol van az állapotuk, és hogyan kommunikálnak? Két külön folyamat között nincs közös memória és nincs közvetlen függvényhívás: az adatból üzenetet kell csinálni, el kell küldeni, és a másik oldalon vissza kell alakítani.
Telepítési szerkezet. Mi adható ki, indítható újra és állítható vissza önállóan? Az a telepítési egység: az a legkisebb csomag, amelyet egyetlen lépésben ki lehet adni.
flowchart TB
subgraph Source["Kódszerkezet"]
A["Modul A"] --> I["A publikus felülete"]
B["Modul B"] --> I
end
Source --> D["Egy kiadási csomag"]
D --> E["Futó példány 1"]
D --> F["Futó példány 2"]
E --> DB[("Adatbázis")]
F --> DB
Az ábrán két modul, két futó példány és egyetlen telepítési egység van. A példányok számát a terhelés indokolhatja, a felelősségek szétválasztását nem jelenti.
Nézet
Kérdés
Mi tartja a határt?
Gyakori félreértés
Kódszerkezet
Ki mit használhat?
Fordító, láthatóság, szabályellenőrzés
„Külön mappa = külön modul”
Futási szerkezet
Mi fut külön, és hogyan beszélnek?
Operációs rendszer, hálózat
„Több példány = több szolgáltatás”
Telepítési szerkezet
Mi adható ki külön?
Kiadási folyamat, verziók
„Külön repó = külön kiadás”
Hogyan viszonyul ez a többi fogalomhoz?
A következő fejezetekben minden architektúra e három nézet egy-egy kombinációja:
a monolit egy telepítési egység, egy futó folyamatcsoport; a kódszerkezete lehet rendezett vagy rendezetlen;
a moduláris monolit ugyanez ellenőrzött belső határokkal;
a mikroszervizek külön telepíthető, külön futó, saját adatot kezelő szolgáltatások.
Egy konténerbe csomagolt alkalmazás attól még nem mikroszerviz: a konténer csomagolási és futtatási eszköz. A nyelv vagy a keretrendszer sem dönti el az architektúrát; ugyanazzal a nyelvvel írható monolit és szolgáltatásokra bontott rendszer is.
Gyakori tévhitek
Állítás
Pontosítás
„Ha hat példány fut, az már elosztott rendszer, vagyis mikroszerviz.”
A hat példány ugyanannak az egy telepítési egységnek a másolata.
„Ha a szolgáltatások külön repóban vannak, függetlenek.”
Ha minden változtatást együtt kell kiadni, a kiadási csatolás megmaradt.
„A konténer a mikroszerviz technológiája.”
A konténer csomagolási forma; tartalmazhat monolitot is.
„Az architektúra a technológiák listája.”
Az architektúra a részek, a kapcsolatok és a nehezen változtatható döntések rendszere.
Röviden
Az architektúra a fontos részek, kapcsolatok és a változtatást megkötő döntések összessége.
Három nézet külön vizsgálandó: kód, futás, telepítés.
A telepítési egység az, ami együtt adható ki és állítható vissza.
A példányszám, a konténer és a repók száma nem határozza meg az architektúrát.
Ellenőrző kérdések
Egy alkalmazás hat azonos példányban fut egy terheléselosztó mögött. Mi a telepítési egységek száma, és miért?
Két szolgáltatás külön repóban van, de mindig együtt kell kiadni őket. Melyik nézetben maradt meg a csatolás?
Milyen kérdéssel döntenéd el, hogy egy ábra a kódot, a futást vagy a telepítést mutatja?
Mit jelent az architektúra? Kód, futás és telepítés
Célok
A lecke végére meg tudod különböztetni egy rendszer kódszerkezetét, futási szerkezetét és telepítési szerkezetét, és el tudod dönteni, melyik nézetről beszél valaki, amikor „monolitot” vagy „mikroszervizt” mond.
Miért kell több nézet?
A „monolit vagy mikroszerviz?” kérdésre csak akkor lehet értelmes választ adni, ha ismert, melyik határról van szó. Ugyanaz a rendszer háromféle módon is darabolható, és a három darabolás egymástól függetlenül lehet finom vagy durva. Aki ezt nem választja szét, az gyakran két különböző dologról vitatkozik.
Mi az architektúra?
Egy rendszer architektúrája a fontos részek, a köztük levő kapcsolatok és azok a döntések összessége, amelyek a későbbi változtatást megkötik. Nem a teljes kód leírása, hanem az, ami drágán módosítható. Ezért a legtöbb architekturális kérdés valójában kompromisszumkérdés: mi válik könnyebbé, és mi nehezebbé.
A három nézet
Kódszerkezet. Melyik modul milyen felelősséget visel, mit tesz láthatóvá, és mit használ más modulokból? A határt itt fordítási szabály, csomagláthatóság vagy automatikus függőségellenőrzés tartja fenn.
Futási szerkezet. Hány folyamat fut, hol van az állapotuk, és hogyan kommunikálnak? Két külön folyamat között nincs közös memória és nincs közvetlen függvényhívás: az adatból üzenetet kell csinálni, el kell küldeni, és a másik oldalon vissza kell alakítani.
Telepítési szerkezet. Mi adható ki, indítható újra és állítható vissza önállóan? Az a telepítési egység: az a legkisebb csomag, amelyet egyetlen lépésben ki lehet adni.
flowchart TB subgraph Source["Kódszerkezet"] A["Modul A"] --> I["A publikus felülete"] B["Modul B"] --> I end Source --> D["Egy kiadási csomag"] D --> E["Futó példány 1"] D --> F["Futó példány 2"] E --> DB[("Adatbázis")] F --> DBAz ábrán két modul, két futó példány és egyetlen telepítési egység van. A példányok számát a terhelés indokolhatja, a felelősségek szétválasztását nem jelenti.
Hogyan viszonyul ez a többi fogalomhoz?
A következő fejezetekben minden architektúra e három nézet egy-egy kombinációja:
Egy konténerbe csomagolt alkalmazás attól még nem mikroszerviz: a konténer csomagolási és futtatási eszköz. A nyelv vagy a keretrendszer sem dönti el az architektúrát; ugyanazzal a nyelvvel írható monolit és szolgáltatásokra bontott rendszer is.
Gyakori tévhitek
Röviden
Ellenőrző kérdések
Források