Klient-serveri arhitektuur: mõiste, põhimõtted ja näited
Klient-serveri arhitektuur: selged mõisted, põhimõtted ja praktilised näited — kuidas kliendi- ja serverside suhtlus töötab, P2P erinevused ning rakendused veebi- ja andmebaasisüsteemides.
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.


Võrgupõhine võrk.


Ühe serveri põhinev võrk.
Klientide omadused
- Algatab alati päringud serveritele.
- Ootab vastuseid.
- Saab vastuseid.
- Ühendub tavaliselt korraga väikese arvu serveritega.
- Tavaliselt suhtleb otse lõppkasutajatega, kasutades mis tahes kasutajaliidest, näiteks graafilist kasutajaliidest.
Serveri omadused
- Oodake alati ühe kliendi taotlust.
- Teenindab klientide taotlusi ja vastab seejärel klientidele soovitud andmetega.
- Server võib suhelda teiste serveritega, et teenindada kliendi taotlust.
- Kui päringu töötlemiseks on vaja lisateavet (või kui rakendatakse turvameetmeid), võib server enne päringu töötlemist nõuda kliendilt täiendavaid andmeid (paroole).
- Lõppkasutajad ei suhtle tavaliselt otse serveriga, vaid kasutavad klienti.
Eelised
- Enamasti võimaldab klient-server-arhitektuur arvutisüsteemi rollide ja vastutuse halvenemist jaotada mitme sõltumatu arvuti vahel, mis on üksteisele teada ainult võrgu kaudu, seega on selle mudeli üheks eeliseks suurem hoolduslihtsus. Näiteks on võimalik server välja vahetada, parandada, uuendada või isegi ümber paigutada, samas kui selle kliendid jäävad sellest muudatusest teadmatuks ja puutumata. Sellist muutustest sõltumatust nimetatakse ka kapseldamiseks.
- Kõiki andmeid hoitakse serverites, mille turvakontrollid on üldiselt paremad kui enamikul klientidel. Serverid saavad paremini kontrollida juurdepääsu ja ressursse, et tagada, et ainult need kliendid, kellel on asjakohased õigused, saavad andmetele ligi ja neid muuta.
- Kuna andmete säilitamine on tsentraliseeritud, on nende andmete uuendamine haldajatele palju lihtsam kui P2P-arhitektuuri puhul. P2P-arhitektuuri puhul võib olla vajalik andmete ajakohastamine ja selle rakendamine iga "peer'ile" võrgus, mis on nii aeganõudev kui ka veaohtlik, kuna peer'eid võib olla tuhandeid või isegi miljoneid.
- Paljud täiustatud kliendi-server-tehnoloogiad on juba kättesaadavad, mis on loodud turvalisuse, kasutajasõbralike liideste ja kasutusmugavuse tagamiseks.
- See töötab mitme erineva spetsifikatsiooniga kliendiga.
Puudused
- Võrkude liikluse blokeerimine on üks klient-server-mudeliga seotud probleemidest. Kui üheaegsete kliendipäringute arv teatavale serverile suureneb, võib server muutuda ülekoormatuks. Vastupidiselt P2P-võrgule, mille ribalaius tegelikult suureneb, kui lisandub rohkem sõlmi, sest P2P-võrgu üldist ribalaiust saab ligikaudselt arvutada kui iga võrgu sõlme ribalaiuste summat.
- Võrreldes klient-server mudelit ja peer to peer mudelit, siis kui üks server ei tööta, ei saa klientide taotlusi teenindada, kuid P2P-võrkude puhul on serverid tavaliselt jaotatud paljude sõlmede vahel. Isegi kui üks või mitu sõlme ebaõnnestub, näiteks kui üks sõlme ei suuda faili alla laadida, peaks ülejäänud sõlmedel ikkagi olema andmed, mida on vaja allalaadimise lõpuleviimiseks.
Näited
- Konkreetsed klienditüübid on järgmised: veebibrauserid, e-posti kliendid ja veebivestluskliendid.
- Konkreetsed serveritüübid on järgmised: veebiserverid, FTP-serverid, andmebaasiserverid, e-posti serverid, failiserverid, printimisserverid. Enamik veebiteenuseid on samuti serveritüübid.
Küsimused ja vastused
K: Mis on klient-server tarkvaraarhitektuur?
V: Klient-server tarkvaraarhitektuur on mudel, mis koosneb kahest osast, kliendisüsteemidest ja serversüsteemidest, mis mõlemad suhtlevad arvutivõrgu kaudu või samas arvutis.
K: Kuidas töötab klient-server rakendus?
V: Klient-teener rakendus on hajutatud süsteem, mis koosneb nii kliendi- kui ka servertarkvarast. Kliendiprotsess algatab alati ühenduse serveriga, samal ajal kui serveriprotsess ootab alati mis tahes kliendi päringuid.
K: Mis juhtub, kui nii kliendiprotsess kui ka serveriprotsess töötavad samas arvutis?
V: Kui nii kliendiprotsess kui ka serveriprotsess töötavad samas arvutis, nimetatakse seda ühe koha seadistuseks.
K: Milliseid eeliseid pakub kliendiserverrakenduse kasutamine?
V: Kliendiserverirakenduse kasutamine võimaldab paremini jagada töökoormust mitme arvuti või kasutaja vahel.
K: Kes algatab ühendused kliendiserverirakendustes?
V: Klientide serverirakendustes algatab ühendused alati kliendiprotsess.
K: Kes ootab kliendiserverrakendustes taotlusi?
V: Kliendiserverrakendustes ootab taotlusi alati serveriprotsess.
K: Kuidas saavad mitu arvutit või kasutajat jagada töökoormust omavahel?
V: Mitu arvutit või kasutajat saavad töökoormust jagada, kasutades jaotatud süsteemi, näiteks Kliendiserverrakendust.