A számítástechnikában a kliens–szerver egy olyan szoftverarchitektúra-modell, amely két jól elkülöníthető szereplőből áll: kliensrendszerekből és szerverrendszerekből. Ezek a komponensek vagy egy számítógépes hálózaton, vagy ugyanazon a számítógépen kommunikálnak egymással. A kliens–kiszolgáló alkalmazás jellemzően egy kliensprogramból és egy kiszolgálószoftverből álló elosztott rendszer, amely hatékony munkamegosztást tesz lehetővé: a kliens folyamat általában kapcsolatot kezdeményez a kiszolgáló felé, míg a kiszolgáló folyamat folyamatosan várja a beérkező klienskéréseket.
Ha az ügyfélfolyamat és a kiszolgálófolyamat ugyanazon a számítógépen fut, ezt nevezzük egyhelyes telepítésnek. Ebben az esetben a kommunikáció helyi erőforrás-megosztással és operációs rendszer által biztosított IPC (inter-process communication) csatornákkal történik, de logikailag ugyanazok a kliens–szerver elvek érvényesülnek.
A kapcsolódó szoftverarchitektúra másik fő típusa a peer-to-peer, ahol minden egyes állomás vagy alkalmazáspéldány egyszerre viselkedhet ügyfélként és kiszolgálóként. A P2P rendszerekben nincs központi szerver; az egyes csomópontok egyenlő felelősséggel és státusszal működnek. A peer-to-peer architektúrákat gyakran rövidítik a P2P rövidítéssel.
Működési alapok
Az ügyfél–kiszolgáló kapcsolat azt írja le, hogyan nyújt be az ügyfél szolgáltatási kérelmet a kiszolgálóhoz, és hogyan fogadja, dolgozza fel és válaszolja meg ezeket a kéréseket a kiszolgáló. A kliens tipikusan felhasználói interakciót vagy automatikus folyamatot indít, amely helyi igényt generál (például oldalbetöltés vagy adatlekérdezés), majd protokollok (pl. HTTP, SMTP, FTP, TCP) segítségével eljuttatja a kérést a szerverhez. A szerver validálja, feldolgozza a kérést, hozzáférhet helyi vagy távoli erőforrásokhoz (adatbázisok, fájlok, szolgáltatások), majd választ küld vissza a kliensnek.
Az ügyfél és a kiszolgáló közötti kölcsönhatás modellezésére gyakran használnak szekvencia-diagramokat; ezek szabványos leírását az Unified Modeling Language (UML) tartalmazza, és jól szemléltetik a hívások sorrendjét, üzeneteit és időzítését.
Típusok és rétegezés
A legegyszerűbb kliens–kiszolgáló architektúra kétféle hosztot használ: klienseket és kiszolgálókat. Ezt gyakran kétszintű architektúrának nevezik; itt az egyik szint az ügyfél, a másik a szerverfolyamat. A modern rendszerek azonban gyakran többszintűek (n-tier): megjelenik például egy prezentációs réteg (felhasználói felület), egy üzleti logikai réteg (alkalmazásszerver) és egy adatkezelési réteg (adatbázis-szerver).
- Kétszintű (two-tier): közvetlen kommunikáció a kliens és az adatbázis-/alkalmazásszerver között.
- Többszintű (multi-tier): a kliens kérése először egy web- vagy alkalmazásszerverhez érkezik, amely továbbítja és feldolgozza azt, majd szükség esetén lekérdez adatbázist vagy külső szolgáltatást.
- Elosztott rendszerek: a komponensek földrajzilag és hálózatilag távol lehetnek egymástól, gyakran replikációval, cache-eléssel és terheléselosztással (load balancing) növelik a rendelkezésre állást és teljesítményt.
Előnyök és hátrányok
- Előnyök:
- Jól definiált szerepek és felelősségek (kliens vs. szerver).
- Központi erőforrás-kezelés: egyszerűbb frissítés, biztonság és adminisztráció a szerveren.
- Skálázhatóság különféle módszerekkel (cache, replikáció, terheléselosztás).
- Széles körben támogatott szabványok és protokollok (pl. HTTP/REST, gRPC, SMTP).
- Hátrányok:
- Központi szerver(ek) meghibásodása esetén az egész rendszer sérülékeny lehet (single point of failure), kivéve ha redundanciát alkalmaznak.
- Skálázás költségesebb lehet állapotkezelés és tranzakciós konzisztencia esetén.
- Hálózati késleltetés és sávszélesség korlátok befolyásolhatják a teljesítményt.
Gyakori protokollok és megvalósítások
A kliens–szerver rendszerek különböző protokollokon és technológiákon alapulhatnak. Példák:
- HTTP/HTTPS: webes alkalmazások, REST API-k.
- SMTP/IMAP/POP3: e-mail küldés és fogadás.
- TCP/UDP szupertartos kommunikáció: valós idejű alkalmazások, játékok, egyedi protokollok.
- RPC, gRPC, SOAP: távoli eljáráshívások és szolgáltatásalapú integrációk.
Gyakori példák és alkalmazások
A kliens–kiszolgáló modell a hálózati számítástechnika egyik alapmodelljévé vált. Számos tipikus alkalmazás erre épül:
- E-mail-csere és levelezőszerverek.
- Webes hozzáférés és webböngészők–webkiszolgálók kapcsolata; a webböngésző például kliensprogram, amely a világ bármely webkiszolgálóján lévő információkhoz fér hozzá.
- Adatbázis-hozzáférés: alkalmazásszerverek kliensként lekérdeznek és módosítanak adatokat az adatbázis-szervereken.
- Fájl- és nyomtatószolgáltatások, hitelesítési és jogosultságkezelő rendszerek.
Biztonság és skálázhatóság
A kliens–szerver rendszerek tervezésénél különös figyelmet kell fordítani a biztonságra és a skálázásra:
- Hitelesítés és autorizáció: felhasználói azonosítás, jogosultságkezelés és szerepalapú hozzáférés-szabályozás.
- Adatvédelem: titkosítás (pl. TLS), biztonságos kulcskezelés és adatmaszkolás.
- Elérhetőség: terheléselosztók, replikáció, redundáns szerverek és failover megoldások csökkentik a szolgáltatáskimaradás kockázatát.
- Teljesítmény: cache-elés, aszinkron feldolgozás, üzenetsorok (message queues) és CDN-ek a válaszidők csökkentésére.
Összefoglalás
A kliens–szerver modell egyszerű, jól értelmezhető alapot ad szolgáltatások nyújtására és fogyasztására. Bár a P2P architektúrák és egyéb elosztott megoldások alternatívát jelentenek bizonyos helyzetekben, a kliens–szerver megközelítés továbbra is széles körben alkalmazott és fejlesztett architektúra a web, e-mail, adatbázisok és sok egyéb hálózati szolgáltatás területén.


