„Client - server” ( eng. client-server ) - o arhitectură de calcul sau de rețea în care sarcinile sau încărcarea rețelei sunt distribuite între furnizorii de servicii, numiți servere, și clienții de servicii, numiți clienți. De fapt , clientul și serverul sunt software . De obicei, aceste programe sunt situate pe computere diferite și interacționează între ele printr-o rețea de calculatoare folosind protocoale de rețea , dar pot fi, de asemenea, localizate pe aceeași mașină. Programele server așteaptă cereri de la programele client și le oferă resursele lor sub formă de date (de exemplu, transferul de fișiereprin HTTP , FTP , BitTorrent , streaming media sau operațiuni de baze de date ) sau ca funcții de serviciu (de exemplu, e-mail , comunicare prin sisteme de mesagerie instantanee sau navigare web pe World Wide Web ). Întrucât un program server poate executa solicitări de la mai multe programe client, acesta este plasat pe un computer special dedicat configurat într-un mod special, de regulă, împreună cu alte programe server, astfel încât performanța acestei mașini trebuie să fie ridicată. Datorită rolului special al unei astfel de mașini în rețea, a specificului hardware-ului și software-ului său, se mai numește și server , iar mașinile care execută programe client, respectiv, sunt clienți.
Caracteristica client-server descrie relația dintre programele care interacționează într-o aplicație. Componenta server oferă o funcție sau serviciu unuia sau mai multor clienți care inițiază cereri pentru astfel de servicii. Serverele sunt clasificate în funcție de serviciile pe care le oferă. De exemplu, un server web servește pagini web, în timp ce un server de fișiere servește fișiere de computer. O resursă partajată poate fi oricare dintre componentele software și electronice ale unui computer server, de la programe și date la procesoare și dispozitive de stocare. Partajarea resurselor serverului este un serviciu .
Dacă un computer este un client, un server sau ambele este determinat de natura aplicației care necesită serviciile. De exemplu, serverele web și software-ul server de fișiere pot rula simultan pe același computer pentru a servi date diferite pentru clienții care fac diferite tipuri de solicitări. Software-ul client poate interacționa și cu software-ul server de pe același computer. Comunicarea între servere, cum ar fi pentru sincronizarea datelor, este uneori denumită inter- server .
În general, un serviciu este o abstractizare a resurselor computerului, iar clientul nu trebuie să-și facă griji cu privire la modul în care funcționează serverul atunci când face o solicitare și oferă un răspuns. Clientul trebuie să înțeleagă doar răspunsul pe baza protocolului de aplicație cunoscut, adică conținutul și formatarea datelor pentru serviciul solicitat.
Clienții și serverele fac schimb de mesaje într-un model cerere-răspuns. Clientul trimite o cerere și serverul returnează un răspuns. Acest mesaj este un exemplu de comunicare între procese. Pentru a comunica, computerele trebuie să aibă un limbaj comun și trebuie să respecte reguli, astfel încât atât clientul, cât și serverul să știe la ce să se aștepte. Limbajul și regulile de comunicare sunt definite în protocolul de comunicare. Toate protocoalele modelului client-server funcționează la nivelul aplicației. Protocolul stratului de aplicație definește tiparele de conversație de bază. Pentru a oficializa și mai mult schimbul de date, serverul poate implementa o interfață de programare a aplicațiilor ( API ). Un API este un strat de abstractizare pentru accesarea unui serviciu. Limitând linkul la un anumit format de conținut, face analiza mai ușoară. Prin abstracția accesului, facilitează schimbul de date între platforme.
Serverul poate primi cereri de la mai mulți clienți diferiți într-o perioadă scurtă de timp. Un computer poate efectua doar un număr limitat de sarcini la un moment dat și se bazează pe un sistem de planificare pentru a prioritiza cererile primite de la clienți pentru a le satisface. Pentru a preveni abuzul și a maximiza disponibilitatea, software-ul server poate limita disponibilitatea clienților. Atacurile de refuzare a serviciului exploatează responsabilitatea serverului de a procesa cererile, astfel de atacuri funcționează prin supraîncărcarea serverului cu o frecvență excesivă a cererilor. Criptarea ar trebui utilizată dacă informațiile confidențiale vor fi transferate între client și server.
Pe lângă modelul client-server, aplicațiile de calcul distribuite folosesc adesea o arhitectură peer-to-peer .
Client-server este adesea conceput ca un sistem centralizat care deservește mulți clienți. Astfel, cerințele de putere, memorie și stocare ale serverului trebuie să se adapteze la sarcina așteptată. Sistemele de echilibrare a sarcinii și failover sunt adesea folosite pentru a scala un server dincolo de o singură mașină fizică. Într -o rețea peer-to-peer, două sau mai multe computere își reunesc resursele și interacționează într-un sistem descentralizat. Nodurile egale sunt noduri egale sau echipotenţiale într-o reţea non-ierarhică. Spre deosebire de clienții dintr-o arhitectură client-server sau client-coadă-client, colegii comunică direct între ei. Într-o rețea peer-to-peer, algoritmul din protocolul de comunicare peer-to-peer echilibrează sarcina și chiar și colegii cu puține resurse pot ajuta la împărțirea sarcinii. Dacă un nod devine indisponibil, acțiunile sale rămân disponibile atâta timp cât le oferă alți colegi. În mod ideal, un nod nu trebuie să obțină o disponibilitate ridicată, deoarece alte noduri vor compensa orice timp nefuncțional al resurselor. Pe măsură ce disponibilitatea și debitul de peer se schimbă, protocolul redirecționează cererile. Atât client-server, cât și master-slave sunt considerate subcategorii ale sistemelor distribuite peer-to-peer.
O arhitectură client-server cu mai multe niveluri este un tip de arhitectură client-server în care funcția de procesare a datelor este plasată pe mai multe servere separate. Acest lucru vă permite să separați funcțiile de stocare, procesare și prezentare a datelor pentru o utilizare mai eficientă a capabilităților serverelor și clienților.
Cazuri speciale de arhitectură pe mai multe niveluri:
O rețea cu un server dedicat ( ing. client / server network ) este o rețea locală (LAN) în care dispozitivele de rețea sunt centralizate și controlate de unul sau mai multe servere. Stațiile de lucru sau clienții individuale (cum ar fi un computer personal) trebuie să acceseze resursele de rețea prin server(e).