Datorzinātnē klients-serveris ir programmatūras arhitektūras modelis, kas parasti sastāv no divām galvenajām daļām — klienta sistēmas un servera sistēmas, kuras savstarpēji sazinās pa datortīklā vai pat vienā datorā. Klienta-servera lietojumprogramma ir sadalīta sistēma, kas ietver gan klienta, gan servera programmatūru, un tā ļauj efektīvāk sadalīt darba slodzi starp vairākām iekārtām vai procesiem. Parasti klienta process iniciē savienojumu ar serveri un nosūta pieprasījumu, bet servera process gaida ienākošos pieprasījumus, apstrādā tos un atgriež rezultātu klientam.
Kā tas strādā — vienkāršs pieprasījuma/atbildes scenārijs
Ierasts klients-servera darbības secības piemērs:
- Klients izveido savienojumu ar serveri (piemēram, izmantojot tīkla savienojumu uz noteiktu portu).
- Klients nosūta pieprasījumu (piem., HTTP GET pieprasījumu tīmekļa lapai vai SQL vaicājumu datubāzei).
- Servers saņem pieprasījumu, veic nepieciešamo apstrādi (piem., izgūst datus, aprēķina atbildi, pieslēdz citas pakalpojumu daļas).
- Servers nosūta atbildi atpakaļ klientam.
- Klients saņem atbildi un parāda vai apstrādā datus lietotājam.
Šo mijiedarbību bieži modelē ar secības diagrammām (standartizētā vienotajā modelēšanas valodā), kas attēlo ziņojumu plūsmu starp klientu un serveri.
Komponenti, protokoli un režīmi
Klienta-servera arhitektūrā galvenie komponenti ir klientprogramma, serverprogramma un sakaru protokoli. Izplatītākie protokoli ir:
- HTTP/HTTPS — tīmekļa pārlūkprogrammas un tīmekļa serveri (piem., tīmekļa pārlūkprogramma kā klients).
- SMTP/IMAP/POP3 — e-pasta sūtīšanai un saņemšanai (e-pasta pakalpojumi).
- TCP/UDP — zema līmeņa transporta protokoli, uz kuriem balstās augstāka līmeņa protokoli.
- SQL / datubāzu protokoli — piekļuve datubāzēm, bieži izmantojot speciālas draiveru bibliotēkas.
- WebSocket, RPC, REST, SOAP — API un reāllaika saziņai piemēroti risinājumi.
Arhitektūras darbība var būt sinhrona (klients gaida servera atbildi) vai asinhrona (klients turpina darbu, kamēr atbilde tiek saņemta vēlāk). Tāpat serveris var būt stateless (neuztur sesijas stāvokli starp pieprasījumiem) vai stateful (uztur stāvokli, piemēram, pieslēguma sesiju).
Daudzlīmeņu un vienas vietas konfigurācijas
Pamata klients-servera modelis izmanto tikai divu veidu resursdatorus — klientus un serverus — tāpēc to sauc arī par divlīmeņu arhitektūru. Divlīmeņu arhitektūra nozīmē, ka klients darbojas kā viens līmenis, bet servera process — kā otrs.
Ja gan klienta, gan servera process darbojas vienā datorā, to sauc par vienas vietas konfigurāciju — tas var būt noderīgi testēšanai vai lokālām lietojumprogrammām.
Kompleksākās sistēmās tiek lietotas daudzlīmeņu (n-tier) arhitektūras, kur ir starpstāvs (piem., lietojumprogrammu serveris), datu slānis un priekšējā saskarne. Tā ļauj labāk skaitliēt, nodrošināt drošību un atdalīt atbildības.
Piemēri ikdienā
- Tīmekļa pārlūks un tīmekļa serveris — pārlūkprogramma darbojas kā klients, pieprasa lapas no tīmekļa servera (tīmeklim).
- E-pasts — pasta klients izmanto serverus, lai sūtītu un saņemtu ziņas (e-pasta protokoli).
- Datubāzu piekļuve — lietojumprogramma pieprasa datus no datubāzes servera, izmantojot SQL savienojumu.
- Failu serveri, attālinātā darbvirsma, LDAP autentifikācija u. c.
Mūsdienu tīkla pakalpojumi dažkārt kombinē vairākus klientu-servera elementus vai izmanto mikroservisu pieeju, kur katrs serviss darbojas kā atsevišķs serveris, ko izmanto kā klients augstākā līmeņa lietojumprogramma.
Salīdzinājums ar vienādranga arhitektūru (P2P)
Cits saistītās programmatūras arhitektūras veids ir pazīstams kā vienādranga (peer-to-peer), jo katrs resursdators vai lietojumprogrammas gadījums var vienlaikus darboties gan kā klients, gan kā serveris. Atšķirībā no centralizētiem serveriem klienta-servera modelī, vienādranga tīkliem raksturīga decentralizācija — katram mezglam ir līdzvērtīgas tiesības un pienākumi. Vienādranga arhitektūras bieži saīsināti apzīmē ar akronīmu P2P.
Gan klienta-servera, gan P2P arhitektūras tiek plaši izmantotas atkarībā no vajadzībām — klienta-serveris ir labs centralizētām, kontrolētām sistēmām; P2P piemērots datu izplatīšanai un sadarbībai bez centralizēta servera.
Priekšrocības un trūkumi
- Priekšrocības: centralizēta pārvaldība, vieglāka datu konsistence, skaidri atdalītas atbildības, drošības politiku centralizācija, vieglāka mērogošana ar load balancing.
- Trūkumi: single point of failure (ja serveris nokrīt, pakalpojums var apstāties), nepieciešami resursi servera uzturēšanai, iespējama veiktspējas ierobežošana, ja nav pareizas horizontālās skalēšanas.
Drošība, mērogojamība un uzturēšana
Drošība klienta-servera vidēs ietver autentifikāciju, autorizāciju, datu šifrēšanu (piem., TLS/HTTPS), ugunsmūrus un ievainojamību pārvaldību. Mērogošanai izmanto slodzes sadalītājus (load balancers), kešus (caching), replikāciju un horizontālu servisu palielināšanu. Uzturēšanā svarīgi ir atjauninājumi, monitorings un žurnālu (log) analīze, lai identificētu problēmas un nodrošinātu augstu pieejamību.
Noslēgums
Klienta-servera arhitektūra ir viens no tīkla skaitļošanas pamatmodeļiem, un, pateicoties savām īpašībām, tā ir izmantota daudzos ikdienas pakalpojumos — no piekļuves tīmeklim līdz piekļuvei datubāzēm, e-pastam un citām zināmām sistēmām. Sapratne par klienta-servera darbību, tās priekšrocībām un ierobežojumiem palīdz veidot drošas, mērogojamas un uzticamas tīkla lietojumprogrammas.


