Arvutiteaduses on klient-server tarkvaraarhitektuuri mudel, mis koosneb kahest põhikomponendist: kliendisüsteemidest ja serversüsteemidest. Need osapooled suhtlevad omavahel tavaliselt arvutivõrgu kaudu või võivad töötada ka samas arvutis. Klient-teener rakendus on hajutatud süsteem, mis koosneb kliendi- ja servertarkvarast ning võimaldab jaotada töökoormust efektiivselt. kliendiprotsess algatab tavaliselt ühenduse serveriga, samal ajal kui serveriprotsess ootab kliendi päringuid ja neid töötleb.
Kui nii kliendiprotsess kui ka serveriprotsess töötavad samas arvutis, nimetatakse seda ühe koha seadistuseks. Selline konfiguratsioon on sageli kasutusel arenduskeskkondades ja väikestes süsteemides, kus eraldi füüsilist serverit ei ole vaja.
Teist tüüpi seotud tarkvaraarhitektuuri tuntakse kui peer-to-peer, sest iga host või rakendusinstants võib toimida samaaegselt nii kliendi kui ka serverina. Erinevalt klassikalisest kliendi-server mudelist ei ole P2P-süsteemides tsentraalseid servereid ja osapooled jagavad vastutust üksteisega. Peer-to-peer-arhitektuuride puhul kasutatakse sageli lühendit P2P (lühend).
Kliendi ja serveri suhe ja suhtlus
Kliendi ja serveri suhe kirjeldab, kuidas klient esitab serverile teenuse taotluse ja kuidas server seda taotlust vastu võtab, töötleb ning vastuse kliendile tagastab. Tavapärane mudel on päring-vastus (request-response): klient saadab päringu, server vastab. Kliendi ja serveri vahelist suhtlust modelleeritakse sageli järjestusdiagrammide abil, mis on standardiseeritud Unified Modeling Language (UML) süntaksiga.
Suhtluse tehnilised detailid hõlmavad:
- ühenduse algoritme (nt sünkroonne vs asünkroonne),
- transportprotokolle (tavaliselt TCP/IP perekond, HTTP veebile ja API-dele, SMTP e-kirjadele),
- ühenduse püsivust (ühenduse avamine iga päringu jaoks vs püsiv socket/HTTP/2 ühendus),
- portide ja socket'ide kasutamist serveri eri teenuste eristamiseks.
Arhitektuurimudelid ja kihistatus
Kahetasandiline klient-server arhitektuur kasutab kahte tüüpi hoste: kliente ja servereid. Sellist lahendust nimetatakse sageli kahetasandiliseks, kus klient esindab esitustasandit ning serveriprotsess andmetöötluse ja salvestuse tasandit.
Täiendavaks arenguks ja suurema paindlikkuse saavutamiseks kasutatakse mitmetasandilisi (n-tier) arhitektuure, kus andmebaasiserver, äriloogika (application server) ja kasutajaliides võivad olla eraldi kihid. Selline kihistatus parandab hooldatavust, skaleeritavust ja turvalisust.
Põhimõtted ja disainiküsimused
- Taotlus-vastus mudel: klient algatab alati ühenduse, server vastab.
- Oleku- vs olekuta teenused: mõni server on olekuta (stateless) — iga päring on iseseisev (näiteks REST), teine võib hoida sessiooni (stateful) (näiteks mõned veebi- või mänguserverid).
- Skaleerimine: vertikaalne (võimsamate masinate lisamine) vs horisontaalne (rohkem servereid, koormusejaotus). Load balancer'id ja hajutatud andmebaasid aitavad skaleerida.
- Vahemällu salvestus (caching): serveri ja kliendi vahelise latentsuse vähendamiseks ning jõudluse parandamiseks.
- Turvalisus: autentimine, autoriseerimine, andmete krüpteerimine (TLS/SSL), tulemüürid ja turvapoliitikad on kriitilised.
- Vea taluvus ja kõrge kättesaadavus: replikeerimine, automaatne ülevõtt (failover) ja monitooring.
Levinud näited ja rakendused
Klient-server mudel on aluseks paljudele igapäevastele teenustele. Standardsed võrgufunktsioonid, nagu e-posti vahetus, veebi sirvimine ja andmebaaside juurdepääs, põhinevad kliendi-server-mudelil. Näited:
- Veeb: veebibrauser (klient) saadab HTTP päringu veebiserverile, mis tagastab HTML, CSS ja JS failid.
- E-post: e-posti kliendid suhtlevad SMTP/IMAP/POP3 serveritega kirjade saatmiseks ja vastuvõtmiseks.
- Andmebaasid: rakenduse serverid teevad päringuid andmebaasiserveritele (SQL või NoSQL), et lugeda ja kirjutada andmeid.
- Failiserverid ja jagatud ressursid: kliendid loevad ja kirjutavad faile kesksetelt serveritelt.
- APId ja mikroteenused: kliendid (sh mobiilirakendused) kutsuvad REST- või gRPC-põhiseid teenuseid.
Eelised ja puudused
Eelised:
- Selged rollid ja vastutused (klient vs server).
- Lihtne keskne haldus ja turvapoliitikate rakendamine serveritel.
- Skaleerimise võimalused, eriti serverite replikatsiooni ja koormuse jagamisega.
Puudused:
- Tsentraliseeritud server võib muutuda kitsaskohtaks ja rikete korral olla süsteemi nõrgestav lüli.
- Võrguriistvarast ja latentsusest tulenevad viivitused.
- Õige skaleerimise, turvalisuse ja jõudluse kavandamine võib olla keerukas ja kulukas.
Tehnilised ning praktikalised märkused
Tavapärased protokollid klient-server suhtluseks on HTTP/HTTPS veebile, TCP/IP alampiirkonnad madalama taseme kommunikatsiooniks, SMTP e-posti jaoks ning erinevad protokollid andmebaaside ja failide jaoks. Serverid kuulavad kindlat porti ja ootavad ühendusi, samal ajal kui kliendid teevad päringuid sellele pordile.
Kliendi-server mudelit võidakse kombineerida ka teiste arhitektuurilahendustega (näiteks P2P või mikroteenused) vastavalt süsteemi nõuetele. Tänapäeval on levinud nii traditsioonilised kahetasandilised lahendused kui ka komplekssed mitmetasandilised ja hajutatud süsteemid, mis kasutavad konteineriseerimist, orkestreerimist (nt Kubernetes) ja pilveplatvorme skaleerimiseks ja halduseks.
Kokkuvõttes on klient-server arhitektuur paindlik ja laialdaselt kasutatav mudel, mis võimaldab ehitada erineva skaalaga võrgu- ja internetirakendusi — alates lihtsatest koduvõrgu teenustest kuni globaalselt hajutatud platvormideni.


