A lecke végére el tudod magyarázni a kliens és a szerver szerepét, le tudod írni a kérés–válasz modellt, és meg tudod indokolni, miért bontjuk rétegekre a nagyobb webes rendszereket.
Miért van szükség erre a modellre?
Amikor egy hallgató rákattint a „Kurzus felvétele” gombra, egyetlen műveletet lát. A rendszer számára ez kérdések sorozata: ki kezdeményezte, jogosult-e, van-e még hely, teljesülnek-e az előfeltételek, és hogyan rögzítsük tartósan az eredményt? A szerepek és a rétegek azt a kérdést válaszolják meg, hogy melyik rész miért felel, így az ellenőrzések nem a böngészőben, hanem egy megbízható helyen történnek.
Kliens és szerver
A kliens olyan program vagy eszköz, amely szolgáltatást kér. A weben ez tipikusan a böngésző. A szerver olyan rendszer, amely a kérést fogadja, feldolgozza, és választ küld. A szerepek mindig egy konkrét kommunikációra vonatkoznak: ugyanaz a gép egyszer kliens, máskor szerver lehet.
Amikor a böngésző egy kurzusoldalt kér le, kliens. A Kurzuspont szervere válaszol. Ha a Kurzuspont-alkalmazás közben egy e-mail szolgáltató API-ját hívja meg, abban a kapcsolatban az alkalmazás a kliens, az e-mail szolgáltató a szerver.
Kérés és válasz
A web alapvető kommunikációs mintája a kérés–válasz (request–response) modell. A kliens kezdeményez, a szerver válaszol. A szerver magától nem szól a kliensnek; ha mégis szükség van erre, külön megoldások léteznek (5. fejezet).
A felhasználó megnyit egy címet.
A böngésző kérést küld a szervernek.
A szerver ellenőrizheti a jogosultságot, adatot kérhet le, vagy műveletet végezhet.
A szerver választ küld, amely tartalmazza, hogy sikerült-e, és az adatot.
A böngésző értelmezi és megjeleníti a választ.
A kérés nem mindig egy teljes weboldalt kér: lehet egy kép, adat, keresési találat, bejelentkezés vagy fájlfeltöltés is.
sequenceDiagram
actor F as Felhasználó
participant K as Böngésző (kliens)
participant S as Webes szolgáltatás (szerver)
F->>K: Művelet indítása
K->>S: Kérés
S-->>K: Válasz vagy hibajelzés
K-->>F: Eredmény megjelenítése
Miért bontjuk rétegekre a rendszert?
Kis rendszerben minden feladat egyetlen alkalmazásban is elfér. Ahogy a rendszer nő, érdemes szétválasztani az eltérő felelősségeket, hogy egy változás ne rengesse meg az egészet. A klasszikus háromrétegű modell:
Réteg
Fő feladat
Példa a Kurzuspontban
Prezentációs réteg
Kapcsolat a felhasználóval, megjelenítés
Böngészős felület, űrlapok, táblázatok
Alkalmazási (üzleti) réteg
Szabályok, folyamatok, jogosultságok
A jelentkezés feltételeinek ellenőrzése
Adatréteg
Adatok tárolása és lekérdezése
Hallgatók, kurzusok, jelentkezések
Előny: például az adatbázis cseréje ideális esetben nem kívánja a felület újratervezését. Hátrány: több az összehangolandó rész.
flowchart LR
P[Prezentációs réteg: felület] --> A[Alkalmazási réteg: szabályok]
A --> D[Adatréteg: tárolás]
Logikai és fizikai elkülönítés
Megoldás
Előny
Korlát
Egy alkalmazás, egy gép
Egyszerű fejlesztés és üzemeltetés
Korlátozott bővíthetőség, egy hiba több funkciót érint
Logikailag rétegzett rendszer
Átlátható felelősségek
Tervezési fegyelmet igényel
Fizikailag is elkülönített rétegek
Jobb skálázhatóság és védelem
Bonyolultabb kommunikáció és üzemeltetés
Nem cél mindig a legtöbb réteg: a jó architektúra a valódi igényekhez igazodik.
Végigvezetett példa: kurzusfelvétel a Kurzuspontban
A böngésző elküldi a hallgató kérését a szervernek: „vegyem fel ezt a kurzust”.
Az alkalmazási réteg ellenőrzi, hogy be van-e jelentkezve a hallgató, teljesítette-e az előfeltételeket, és van-e szabad hely.
Az adatréteg rögzíti a jelentkezést.
Az alkalmazási réteg elkészíti az eredményt.
A böngésző megjeleníti a sikert vagy az indokolt elutasítást.
A böngésző nem közvetlenül „írja át az adatbázist”. Ha így lenne, bárki, aki a böngészőt módosítja, megkerülhetné a szabályokat. Az ellenőrzés ezért a szerveren, megbízható környezetben történik; a 8. fejezet ezt a gondolatot (a kliens nem megbízható) fogja részletezni.
Gyakori tévhitek
Állítás
Pontosítás
„A kliens mindig egy felhasználó számítógépe.”
A kliens lehet egy másik szerveroldali alkalmazás is.
„A szerver egyetlen gép.”
A szerver szerep, amelyet több gép vagy szolgáltatás is betölthet.
„A három rétegnek három gépen kell futnia.”
A rétegek elsősorban logikai felelősségi körök.
„A böngésző közvetlenül az adatbázishoz kapcsolódik.”
Általában az alkalmazási réteg közvetít és érvényesíti a szabályokat.
Röviden
A kliens kér, a szerver válaszol; a szerepek kommunikációnként változhatnak.
A web alapmintája a kérés–válasz.
A rétegezés felelősségi köröket választ szét; lehet logikai és fizikai is.
A szabályokat a szerveren kell érvényesíteni, mert a kliens nem megbízható.
Ellenőrző kérdések
Mikor lehet ugyanaz a program egyszerre kliens és szerver?
Mi a három réteg feladata?
Miért nem elég a böngészőben ellenőrizni a jelentkezés feltételeit?
Mit jelent az, hogy a rétegek logikai elkülönítése nem azonos a fizikai elkülönítéssel?
Kliens–szerver modell és többrétegű rendszerek
Célok
A lecke végére el tudod magyarázni a kliens és a szerver szerepét, le tudod írni a kérés–válasz modellt, és meg tudod indokolni, miért bontjuk rétegekre a nagyobb webes rendszereket.
Miért van szükség erre a modellre?
Amikor egy hallgató rákattint a „Kurzus felvétele” gombra, egyetlen műveletet lát. A rendszer számára ez kérdések sorozata: ki kezdeményezte, jogosult-e, van-e még hely, teljesülnek-e az előfeltételek, és hogyan rögzítsük tartósan az eredményt? A szerepek és a rétegek azt a kérdést válaszolják meg, hogy melyik rész miért felel, így az ellenőrzések nem a böngészőben, hanem egy megbízható helyen történnek.
Kliens és szerver
A kliens olyan program vagy eszköz, amely szolgáltatást kér. A weben ez tipikusan a böngésző. A szerver olyan rendszer, amely a kérést fogadja, feldolgozza, és választ küld. A szerepek mindig egy konkrét kommunikációra vonatkoznak: ugyanaz a gép egyszer kliens, máskor szerver lehet.
Amikor a böngésző egy kurzusoldalt kér le, kliens. A Kurzuspont szervere válaszol. Ha a Kurzuspont-alkalmazás közben egy e-mail szolgáltató API-ját hívja meg, abban a kapcsolatban az alkalmazás a kliens, az e-mail szolgáltató a szerver.
Kérés és válasz
A web alapvető kommunikációs mintája a kérés–válasz (request–response) modell. A kliens kezdeményez, a szerver válaszol. A szerver magától nem szól a kliensnek; ha mégis szükség van erre, külön megoldások léteznek (5. fejezet).
A kérés nem mindig egy teljes weboldalt kér: lehet egy kép, adat, keresési találat, bejelentkezés vagy fájlfeltöltés is.
sequenceDiagram actor F as Felhasználó participant K as Böngésző (kliens) participant S as Webes szolgáltatás (szerver) F->>K: Művelet indítása K->>S: Kérés S-->>K: Válasz vagy hibajelzés K-->>F: Eredmény megjelenítéseMiért bontjuk rétegekre a rendszert?
Kis rendszerben minden feladat egyetlen alkalmazásban is elfér. Ahogy a rendszer nő, érdemes szétválasztani az eltérő felelősségeket, hogy egy változás ne rengesse meg az egészet. A klasszikus háromrétegű modell:
Előny: például az adatbázis cseréje ideális esetben nem kívánja a felület újratervezését. Hátrány: több az összehangolandó rész.
flowchart LR P[Prezentációs réteg: felület] --> A[Alkalmazási réteg: szabályok] A --> D[Adatréteg: tárolás]Logikai és fizikai elkülönítés
Nem cél mindig a legtöbb réteg: a jó architektúra a valódi igényekhez igazodik.
Végigvezetett példa: kurzusfelvétel a Kurzuspontban
A böngésző nem közvetlenül „írja át az adatbázist”. Ha így lenne, bárki, aki a böngészőt módosítja, megkerülhetné a szabályokat. Az ellenőrzés ezért a szerveren, megbízható környezetben történik; a 8. fejezet ezt a gondolatot (a kliens nem megbízható) fogja részletezni.
Gyakori tévhitek
Röviden
Ellenőrző kérdések
Tanulási források