Microservices

Monolitikus alkalmazások vagy mikroszolgáltatások

Boutros Rachid • 2020. augusztus 24.

Ha a szoftverfejlesztési iparág legfontosabb trendjeit szeretnénk listába szedni, biztosan a rangsor első felébe kerülnének a mikroszolgáltatás architektúrák, melyek egyre nagyobb teret nyernek a monolitikus felépítésű alkalmazásokkal szemben. Tény, hogy mára a piac vezető szereplői szinte kivétel nélkül mikroszolgáltatásokra építik birodalmukat, így adja magát a kérdés, hogy mi lehet a szemléletváltás oka. Eljárt az idő a monolitikus architektúrák felett, vagy csupán egy ideiglenes divathóbort szem- és fültanúi vagyunk? Aktuális bejegyzésünkben azt vizsgáltuk meg, hogy különböző szituációkban milyen üzleti előnyöket vagy hátrányokat kínál a két eltérő szemléletmód.

Monolitikus architektúrák pro és kontra

A monolitikus szoftver architektúra kifejezés egy olyan tradicionális szoftverfejlesztési modellt ír le, amelyben a teljes struktúra egyetlen és elválaszthatatlan egységet alkot. A monolit alkalmazások egy kódbázissal, és összetett modulokkal rendelkeznek. Ez a modell egy régóta jól bevált architektúrát takar, amire számtalan sikeres alkalmazás épült. Legfontosabb előnyei közé tartozik, hogy

•   egy új projekt elindítása és kezdeti fejlesztése egyszerűbb a monolitikus architektúra alkalmazásával,

•   egyszerű a struktúra tesztelése,

•   a komponensek – keretrendszerek, sablonok vagy szkriptek – egyszerűen alkalmazhatóak,

•   a telepítés rendkívül egyszerű és egy lépésben megvalósítható lehet.

Ugyanakkor, mint minden megoldásnak a monolitikus architektúrának is vannak hátrányai, melyek közül kiemelkedik, hogy

•   a nagy kódbázis megértése és átlátása nehéz,

•   az integrált fejlesztői környezet (Integrated Development Environment, IDE) túlterheltté válhat, és a nagy méret lassíthatja az indítási időt,

•   az új technológiára, programozási nyelvre vagy keretrendszerre történő átállás rendkívül bonyolult, mert minden elem szorosan kapcsolódik és függésben van egymással,

•   a teljes alkalmazás újratelepítésével járó frissítések nehézséget és a piacra kerülés idejének (time-to-market) lassulását okozhatják,

•   kevésbé hibatűrő az alkalmazás, egy hiba a teljes rendszert megállíthatja

•   a különböző elemek eltérő erőforrásigénye miatt a skálázhatóság is csorbát szenvedhet.

 

 

A mikroszolgáltatásokról dióhéjban

Az egy nagy egységből álló monolitikus alkalmazásokkal szemben a mikroszolgáltatás architektúrát egymással együttműködő, de különálló kis méretű szolgáltatások halmaza alkotja, melyben minden elem egyetlen üzleti funkciót lát el. A mikroszolgáltatások az úgynevezett szolgáltatásorientált architektúrából (Service-Oriented Architecture, SOA) fejlődtek ki, ami a monolitikus modell által hordozott kihívásokra kívánt megoldást nyújtani. A nagy és összetett funkcionalitást hordozó projektek kisebb elemekre történő felosztása jelentősen felértékelődött a fejlesztők körében. Az új architektúra pozitív fogadtatásának pedig egyik legfontosabb pillére az API kezelés képessége és a speciális feladatok ellátásának lehetősége volt.

A mikroszolgáltatások kiemelkedő népszerűségét az Amazon vagy Netflix szintű vállalatoknál az eredményezhette, hogy ez a modell jelentős mértékben képes csökkenteni a programozók vállát nyomó terheket. Hiszen nincs szükség a jövőben óriási projektek karbantartására, ehelyett egy-egy konkrét részegységre koncentrálhatnak, ami hatékonyságban és produktivitásban egyaránt jelentős előrelépést jelent. De sokkal egyszerűbbé és gyorsabbá vált például az új munkatársak betanítása is, akiknek innentől kezdve nem volt szükségük a teljes monolit struktúrát, csak a feladatukhoz kapcsolódó kisebb részegységeket megismerni.

Összehasonlítás

Attól függően, hogy milyen típusú alkalmazást fejleszt egy vállalat, eltérően lehet értékelni a monolitikus és a mikroszolgáltatás architektúra biztosította előnyöket és hátrányokat. Az alábbi táblázatban az alkalmazásfejlesztés különböző területei alapján hasonlítottuk össze a két struktúrát egymással

 

Monolitikus Mikroszolgáltatás
Telepítés Az architektúra lehetővé teszi az egyszeri telepítést és ezt követően az aktuális változtatásoknak megfelelő testreszabást. Azonban ha valami probléma merül fel az egész projekt összeomolhat. A mikroszolgáltatások telepítése egy komplex feladat, köszönhetően annak, hogy az összes szolgáltatást külön kell telepíteni. Ez növeli az implementációs folyamat időigényét. Hiba esetén azonban csak egy mikroszolgáltatás sérül, sokkal egyszerűbb a javítás.
Karbantartás A monolitikus alkalmazások karbantartása összetett platformokra specializált IT csapatot igényel. A hibakeresés és a javítások sok időt vehetnek igénybe, viszont a tesztelés egyszerűbb és egy lépésben végrehajtható. A mikroszolgáltatások karbantartása kevésbé időigényes. A független modulok könnyen tesztelhetőek, amivel idő takarítható meg. Hosszabb távon a karbantartási feladatok során jelentős hatékonyság javítás és költségmegtakarítás érhető el.
Megbízhatóság Megbízhatóság terén a monolit struktúrák nem veszik fel a versenyt a mikroszolgáltatásokkal. Egy hiba a teljes alkalmazást megállíthatja. A mikroszolgáltatások stabilak és megbízhatóak. Egy adott szolgáltatásban jelentkező hiba, csak az adott elemre van hatással, nem okozza a teljes alkalmazás leállását. Ez a rugalmasság gyors fejlesztést és implementálását teszi lehetővé fennakadások okozása nélkül.
Skálázhatóság A struktúra kiterjedtsége és mérete miatt a skálázhatóság nehezen valósítható meg a monolitikus alkalmazásokban. A skálázhatóság sokkal egyszerűbb a mikroszolgáltatásoknál, mivel az alkalmazásnak csak azokat az önálló részeit kell skálázni, amelyek több erőforrást igényelnek.
Fejlesztés A monolitikus alkalmazások fejlesztése időigényesebb, mert minden csapatnak ugyanazon a kódbázison kell párhuzamos műveleteket végrehajtania. A mikroszolgáltatás gyors fejlesztést tesz lehetővé, hiszen az alkalmazás minden eleme egymástól függetlenül fejleszthető.
Kiadás Mivel a monolitikus struktúra egy összefüggő egészt alkot, így minden feladatnak kész kell lennie, hogy egy új verzió kiadható legyen. Az egyes funkciókban bekövetkező csúszás az egész projekt kiadását akadályozza. A felépítésnek köszönhetően a mikroszolgáltatás architektúra lehetővé teszi az egyes funkciók egymástól független gyorsabb kiadását, akár úgy is, hogy több különböző verzió is futhat egymás mellett.
Költségek A monolitikus architektúrák induló beruházási költsége alacsonyabb és gyorsabban is fejleszthető. Ugyanakkor az alkalmazás karbantartási és jövőbeni fejlesztései már költségesebbek lesznek, így a teljes élettartalmat figyelembe véve drágább ez a modell. A mikroszolgáltatások beruházási költsége általában magasabb, és a fejlesztési idő is hosszabb. Viszont nagyobb időtávon ez a struktúra mégis költséghatékonyabb, ha előre tervezünk a későbbi fejlesztések költségeivel.

 

Összefoglalás

A fentiekből is jól látszik, hogy a monolitikus és a mikroszolgáltatás architektúrák között nem lehet egyértelműen győztest hirdetni. A monolitikus alkalmazások megbízható struktúrát kínálnak az egyszerű alkalmazások vagy platformok fejlesztéséhez, különösen akkor, ha nem várható sok jövőbeni fejlesztés és változtatás a termék funkcionalitásában. A mikroszolgáltatások ezzel szemben jobban illeszkednek a komplex alkalmazásokhoz és azokhoz a modern eszközökhöz, melyek folyamatos fejlődése és fejlesztése várható. Ez utóbbi esetben ugyanis nem kérdés, hogy hatékonyabb fejlesztési munkát biztosíthat, ami alacsonyabb költségekben és gyorsabb fejlesztési sebességben ölt testet. Éppen ezért sok esetben a már meglévő monolitikus alkalmazások mikroszolgáltatásokra való felbontása is racionális döntés lehet üzleti szempontból, amely lehetőséget időről időre érdemes megvizsgálni.