Fülöp Dénes

Fülöp Dénes

  · 7 min read

1. rész: Monolitikus vs. Serverless

Fedezd fel a monolitikus és a serverless architektúrák közti különbségeket! Mikor érdemes áttérni az AWS serverless megoldásaira?

Fedezd fel a monolitikus és a serverless architektúrák közti különbségeket! Mikor érdemes áttérni az AWS serverless megoldásaira?

Ebben a bejegyzésben két különböző architektúra összehasonlítását végzem el, mindkettő ugyanazt a problémát oldja meg, de eltérő megközelítésekkel. Az egyik egy modern, serverless architektúra az AWS felhőszolgáltatásai segítségével, míg a másik egy hagyományos, monolitikus architektúra. Az összehasonlítás a következő szempontokra fog fókuszálni: teljesítmény, skálázhatóság, karbantarthatóság, költség és hogy hogyan oldják meg a problémát különböző módon.

Kiválasztottam két alkalmazás csomagot amiken keresztül összehasonlítást végzek a serverless és a monolit architektúra között, elnevezve őket minta Serverless app és minta Monolitikus app-nak.

I. A minta serverless app felépítése

Ez a példa alkalmazás egy serverless megoldást használ, és az alábbi AWS szolgáltatásokat tartalmazza:

  • Frontend: Statikus Svelte alkalmazás, amely az S3-on van hosztolva, és nyilvános hozzáféréssel rendelkezik.
  • Felhasználókezelés: AWS Cognito.
  • Adatbázis: Single-table DynamoDB (NoSQL), három entitással: Termék, Rendelés, és Készlet. Global Secondary Index (GSI) használata az entitás típus alapján.
  • API réteg: REST API Gateway.
  • Üzleti logika: Három AWS Lambda funkció:
    • OrderCRUDHandler
    • InventoryCRUDHandler
    • ProductCRUDHandler
  • Értesítések: SNS értesítés admin email címre, amikor új rendelés érkezik.

II. A minta monolitikus app felépítése

Ez a példa egy monolitikus architektúra, amely ugyanazt a funkciót látja el, mint a minta serverless app, viszont ez monolitikus megoldásokat alkalmaz:

  • Frontend: Dinamikus frontend, amely egy hagyományos webszerveren (például EC2 vagy helyi szerver) van hosztolva.
  • Felhasználókezelés: Egyedi felhasználói hitelesítés és session kezelés.
  • Adatbázis: Relációs adatbázis (például RDS, MySQL vagy más), külön táblákkal a Termék, Rendelés, és Készlet számára.
  • API réteg: Hagyományos szerveroldali API, például Express.js, Django vagy egyéb segítségével.
  • Üzleti logika: A monolitikus alkalmazás belső logikáját közvetlenül kezeli a szerver (például controller függvényekben).
  • Értesítések: E-mail értesítések, amelyek az SMTP protokoll vagy más egyedi rendszerek segítségével kerülnek kiküldésre.

Szempontok ami alapján összehasonlíthatók

SzempontServerlessMonolitikus
StruktúraFunkció-alapú, moduláris komponensekEgységes, összefüggő alkalmazás
FejlesztésKomplexebb tervezést igényel már a kezdetektőlEgyszerűbb indulás, kisebb csapatoknak ideális
SkálázhatóságAutomatikus, finomhangolt skálázás a forgalom alapjánKorlátozott, manuális vagy nehézkes skálázás
HibatűrésEgy komponens hibája nem feltétlen érinti a többitEgyetlen hiba az egész rendszert megbéníthatja
TelepítésKülönálló komponensek önállóan deployálhatókAz egész alkalmazást egyben kell telepíteni
KarbantartásEgyes funkciók külön-külön frissíthetőkEgységes kódbázis, de nehézkes refaktorálás
KöltségekIgény szerinti fizetés, de rejtett költségek előfordulhatnakÁllandó erőforrások, előre kalkulálhatóbb költségek
MonitorozásRészletes és pontos, de komplex és külön eszközöket igényelEgyszerűbb, mivel minden egy helyen történik

1. Költségek összehasonlítása

Forgalmi feltételezések / hó:

  • 50,000 látogatás

  • 10,000 hitelesített felhasználó

  • 5,000 rendelés

  • 100,000 API hívás

  • 10 GB adatforgalom frontendből

  • 5 GB adat a backend és DB között

  • 10 admin értesítés/nap (300/hó)

A minta serverless app - havi költségbecslés:

SzolgáltatásKöltségMegjegyzés
S3 (statikus frontend)$0.5010 GB storage + 10 GB outgoing
CloudFront (opcionális CDN)$2.00Ha használsz CDN-t (Content Delivery Network)
Cognito$8.0010k MAU alatt ingyenes, de SMS/extra feature miatt hozzáadva
DynamoDB$10.00~500K olvasás, 100K írás, 1 GSI
Lambda$3.00100,000 hívás, 512MB memória, 200ms
API Gateway (REST)$3.50100K REST API hívás
SNS (email értesítések)$0.15~300 email/hó (küldés: $0.0001/db)
Összesen (hó)~$27.15Skálázható, fizetés használat után

A minta monolitikus app (EC2-alapú) - havi költségbecslés:

SzolgáltatásKöltségMegjegyzés
EC2 instance (t3.medium)$32.0024/7 futás, 1 gép
EBS (20 GB SSD)$2.00Adattárolás
RDS (MySQL db.t3.micro)$15.00Alap DB kapacitás, 20 GB
Adatforgalom (15 GB)$1.50AWS-nél 1 GB ingyenes, utána ~$0.09/GB
SMTP/email szolgáltatás$0 – $5Ha pl. SES-t használsz
Összesen (hó)~$50 – $55Folyamatos futás, nehezebb skálázás

Összesítés:

TípusBecsült havi költség (nettó)
Minta Serverless app~$27
Minta Monolitikus app (EC2)~$50–55
Havi költségbecslés azonos terhelterhelési számok alapján
Havi költségbecslés azonos terhelési számok alapján

Konkluzió:

A minta Serverless app sokkal alacsonyabb költségeket mutat az alacsony és közepes forgalomnál, míg a minta Monolitikus app jelentősebb fix költségekkel rendelkezik, főként az EC2 és RDS példányok miatt.

Megjegyzés: A korábban számolt AWS költségek nettó árak voltak, vagyis ÁFA nélkül. Ez azért van, mert:

  • Az AWS hivatalos árazása alapértelmezetten nettóban van megadva.

  • Az ÁFA mértéke országonként változik, és csak a számlázáskor kerül rá a végösszegre.

  • Cégeknek (különösen EU-s adószámmal rendelkező vállalkozásoknak) fordított adózás is élhet, tehát nem feltétlenül fizetnek ÁFÁ-t az AWS felé.

2. Teljesítmény összehasonlítása

A teljesítmény értékelés az általam összerakott architektúra csomagokra vonatkozik. Ezek az értékek más architektúra megoldásokkal új, eltérő eredményeket adhatnak!

KritériumMinta Serverless AppMinta Monolitikus App (EC2)
Skálázódás[10] - Automatikus skálázás (Lambda, DynamoDB, API Gateway)[6] - Manuális skálázás (EC2 méretezés, load balancer szükséges)
Hidegindítási idő[7] - Lambda cold start lehet, főleg ritkán hívott függvényeknél[9] - Folyamatosan fut, nincs cold start
Válaszidő[7] - Átlagosan gyors (~50 ms)[9] - Lehet gyors, de terhelés alatt nőhet
Rendelkezésre állás (HA)[9] - Magas: AWS SLA-k (pl. S3, Lambda, DynamoDB 99.99%)[6] - Egyszerű beállításnál single point of failure
Hibatűrés[9] - Különálló komponensek, jól izolálható hibák[6] - Egy hiba az egész rendszert befolyásolhatja
Adatbázis teljesítmény[9] - DynamoDB gyors, de komplex lekérdezések nehezek[9] - RDS: erős relációs lekérdezések
API teljesítmény[9] - API Gateway gyors és skálázható, throttling szabályozható[6] - Egyedi API: függ a szerver teljesítményétől
Karbantarthatóság[9] - Mikroszolgáltatások, jól izolálható[5] - Monolit: nehéz kódfrissítés, telepítés
Fejlesztői élmény[7] - Komplex, több szolgáltatás[8] - Egyszerűbb lokális fejlesztés
Bevezetési idő[5] - Több komponens, komplex infrastruktúra[8] - Gyorsabb kezdeti kiépítés
Biztonság[9] - Beépített IAM, Cognito, jól szabályozható jogosultság[6] - Egyedi megoldások, nagyobb hibalehetőség
Monitoring & Logging[9] - CloudWatch integráció minden komponensre[5] - Külön logkezelés (pl. saját ELK stack)
DevOps / CI/CD[9] - Teljesen automatizálható (pl. SAM, CDK)[5] - Manuálisabb telepítés jellemző
TCO (Total Cost of Ownership)[9] - Alacsonyabb fenntartási költség, kevesebb ops munka[5] - Magasabb TCO, több infra-kezelés
Területek és azok súlyozott arányai
Teljesítmény Radar Ábra

Konkluzió:

Jól látszik, hogy a minta Serverless app megoldás több területen jobban skálázódik és üzemeltethetőbb, míg a minta Monolitikus app a gyorsabb bevezetés és klasszikus adatbázis-teljesítmény terén erősebb.

Rövid értékelés:

SzenárióAjánlott architektúra
Kis-közepes skálázódás, alacsony üzemeltetési költségMinta Serverless app
Nagy relációs adatkezelés, komplex lekérdezésekMinta Monolitikus app / RDS
Gyors prototípus, egyszerű deploymentMinta Monolitikus app
Hosszú távú skálázható fejlesztésMinta Serverless app

Összefoglaló

A választás, hogy a serverless vagy a monolitikus megközelítést alkalmazzuk, számos tényezőtől függ, beleértve a projekthez való illeszkedést, az erőforrásokat, és az üzleti igényeket. A serverless megoldások lehetőséget adnak a gyors fejlődésre és a költségek dinamikus kezelésére, miközben a monolitikus rendszerek továbbra is előnyösek lehetnek kisebb és stabilabb alkalmazások esetén.

Egyik megoldás sem “jobb” a másiknál, csupán más környezetekben és különböző célokhoz alkalmazhatók jobban. A legfontosabb, hogy pontosan mérd fel a projekted jövőbeli növekedési igényeit, a csapatod erőforrásait és a költségvetést, hogy a legjobb döntést hozhasd meg a technológiai alap kiválasztásakor.

Az új technológiák és megoldások folyamatos fejlődésével mindkét architektúra helyet kaphat különböző projektekben, és a jövőben egyre több vállalkozás fog hibrid vagy multicloud megoldásokat alkalmazni a legoptimálisabb eredmények elérésére.

Serverless (AWS):

  • A serverless architektúrák folyamatos fejlődése és az AWS szolgáltatások bővítése újabb lehetőségeket kínál a fejlesztőknek és vállalkozásoknak. Ahogy a technológia fejlődik, az egyes szolgáltatások, mint például a Lambda, DynamoDB, és API Gateway egyre jobb integrációkat kínálnak.
  • A jövőben a multicloud és a hybrid cloud megoldások elterjedésével a serverless architektúrák valószínűleg még nagyobb szerepet kapnak, lehetővé téve a különböző felhőszolgáltatók közötti zökkenőmentes integrációt.
  • A konténerizáció és a FaaS (Function-as-a-Service) növekvő népszerűsége a serverless alkalmazások rugalmasságát és skálázhatóságát tovább javítja, míg a költségek és az erőforrás-használat optimalizálása folyamatosan fejlődik.

Monolitikus alkalmazások:

  • Bár a monolitikus megközelítés előnyei, mint például a nagyobb kontroll és az egyszerűbb hibakezelés továbbra is fontosak, egyre több vállalkozás és fejlesztő hajlik a microservices és vagy a serverless megoldások felé, mivel ezek a modern igényekhez jobban alkalmazkodnak.
  • A monolitikus rendszerek is fejlődnek, különösen azok az alkalmazások, amelyek az on-premise (helyben telepített) megoldásokra építenek, és ahol a skálázás, a komplex infrastruktúra kezelése, és az erőforrás optimalizálás továbbra is kulcsfontosságú. A jövőben az on-premise alkalmazások esetében is egyre nagyobb hangsúlyt kaphatnak a konténerizált megoldások, amelyek a monolitikus rendszerek rugalmasságát és skálázhatóságát növelhetik.
  • Az Edge Computing elterjedése, amely a felhőtől távoli, lokális számítási erőforrásokat használ, lehetőséget ad a monolitikus alkalmazások számára is a hibrid architektúrák kiépítésére, amelyek jobban illeszkednek az új igényekhez.

A jövő: hibrid megoldások

  • A hybrid cloud és multicloud architektúrák integrálása lehetővé teszi a szervezetek számára, hogy kihasználják mind a serverless, mind a hagyományos monolitikus megoldások előnyeit.
  • Az olyan technológiai fejlődések, mint a konténerek és az orchestration tools (például Kubernetes), lehetővé teszik, hogy a vállalatok keverjék és illesszék a különböző architektúrákat a különböző igényekhez és költségvetéshez, ami még nagyobb rugalmasságot és skálázhatóságot biztosít a jövőben.
  • A vállalkozások számára a legfontosabb trend a minimális költségű skálázhatóság, az automatizálás, és a biztonság hatékony kezelése. A fejlesztési folyamatok folyamatos optimalizálásával és a legújabb eszközök és technológiák használatával mind a serverless, mind a hagyományos megoldások hosszú távon fenntarthatók és eredményesek maradhatnak.

Döntés előtt állsz vagy kérdésed van? Foglalj egy ingyenes konzultációt és nézzük meg, hogy a Code Factory csapata miben tud segíteni neked / nektek!

Köszönöm, hogy elolvastad! Reméljük tetszett! Ha kiváncsi vagy miben tudunk segíteni neked nézz körül a szolgáltatásaink között!

Ha részletesebben is érdekel az AWS szolgáltatásaival kapcsolatos téma, töltsd le az ingyenes e-book-unkat.

Vissza a cikkekhez