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.