Model klijent—server je struktura distribuiranih aplikacija koja deli zadatke između onih koji obezbeđuju resurse ili usluge — servera i onih koji traže usluge — klijenta.[1] Najčešće klijenti i serveri komuniciraju preko kompjuterske mreže na odvojenom hardveru, ali mogu biti smešteni u istom sistemu. Server host pokreće server programe koji dele svoje resurse sa klijentima. Klijent ne deli svoje resurse, ali zahteva serverov sadržaj ili uslugu. Klijenti započinju sesiju komunikacije sa serverima koji čekaju dolazeće zahteve. Primeri kompjuterskih aplikacija koji koriste klijent—server model su imejl, veb.

Dijagram kompjuterske mreže kako klijenti komuniciraju sa serverom preko interneta

Uloga klijenta i servera уреди

Klijent—server opisuje vezu programa u aplikaciji koji sarađuju. Server obezbeđuje funkciju ili uslugu jednom ili više klijenta koji zahtevaju tu uslugu. Serveri se klasifikuju po vrsti usluge koje pružaju. Na primer, veb-server omogućava pregled veb-stranica, a fajl server obezbeđuje kompjuterske fajlove. Deljeni resurs može biti bilo koji deo softvera i elektronskih komponenti server računara, od programa i podataka do procesora i uređaja za čuvanje podataka. Serveri pružaju usluge tako što dele svoje resurse.

Da li je kompjuter klijent, server, ili oba određuje vrsta aplikacije koje zahtevaju uslugu. Na primer, jedan računar može istovremeno pokretati softver i za veb server i za fajl server da bi obezbedio različite podatke klijentima koji imaju različite zahteve. Softver klijenta može komunicirati sa softverom servera unutar istog računara.[2] Komunikacija između servera, na primer sinhronizacija podataka, se naziva inter-server ili server-to-server komunikacija.

Komunikacija između klijenata i servera уреди

Uopšteno, usluga je apstrakcija kompjuterskih resursa i klijent ne mora da brine o tome kako server radi dok ispunjava zahtev i isporučuje odgovor. Klijent samo mora da razume odgovor koji se zasniva na dobro poznatom protokolu za aplikaciju, odnosno sadržaj i format podataka za zahtevanu uslugu.

Klijenti i serveri razmenjuju poruke u vidu zahtev-odgovor komunikacijskog šablona. Klijent pošalje zahtev, a server vrati odgovor. Ova razmena poruka je primer interprocesne komunikacije. Da bi komunicirali, računari moraju da imaju zajednički jezik i da slede pravila da bi i klijent i server znali šta da očekuju. Jezik i pravila komunikacije se definišu protokolom za komunikaciju. Svi klijent- server protokoli funkcionišu u sloju aplikacija. Protokol sloja aplikacija definiše osnovni šablon dijaloga. Da bi se razmena podataka formalizovala još više, server može da implementira aplikacioni programski interfejs (API).[3] API je sloj apstrakcije za pristupanje usluzi. Ograničavajući komunikaciju na tačno određeni format sadržaja olakšava se raščlanjivanje, a time što se apstrahuje pristup olakšava se razmena podataka na različitim platformama. [4]

Server može primiti zahteve od velikog broja različitih klijenata u kratkom vremenskom intervalu. Kompjuter može ispuniti ograničeni broj zadataka u datom trenutku i oslanja se na sistem rasporedjivanja da bi prioritizovao dolazeće zahteve od klijenata i da bi ih ispunio. Da bi se sprečila zloupotreba i povećala dostupnost, softver servera može da ograniči dostupnost klijentima. DoS napadi su dizajnirani da iskoriste obavezu servera da obradi dolazeće zahteve tako što ga preopterete sa previše zahteva u kratkom vremenskom intervalu.

Primer уреди

Kada klijent banke pristupa online bankarskoj usluzi sa svog internet pretraživača (klijent), on pokreće zahtev za pristupanjem internet serveru banke. Klijentova akreditiva za prijavu može biti sačuvana u bazi podataka, a internet server pristupa serveru baze podataka kao klijent. Server za prijavu tumači povratne podatke tako što primenjuje poslovnu logiku banke i snabdeva internet server izlaznim podacima. Naposletku, server prikazuje rezultat na klijentovom internet pretraživaču.

Na svakom koraku ove sekvence razmene poruka između klijenta i servera, računar obrađuje zahtev i snabdeva podacima. Ovo je zahtev-odgovor obrazac razmene poruka. Kada su svi zahtevi ispunjeni, sekvenca je kompletna i internet pretraživač prikazuje podatke klijentu.

Ovaj primer ilustruje obrazac dizajna koji se može primeniti na model klijent-server: razdvajanje pojedinačnih problema.

Počeci уреди

Rani oblik klijent-server arhitekture je link udaljenog unosa, još od OS/360 (najavljenog 1964. godine), kome je zahtev bio da pokrene posao, a odgovor je bio rezultat.

Prilikom formulisanja klijent-server modela tokom šezdesetih i sedamdesetih godina 20. veka, naučnici koji su stvorili ARPANET (na Institutu za Istraživanje na Stenfordu) koristili su izraz server-host (ili domaćin-server) i user-host (ili korisnik-domaćin), a oni se pojavljuju u ranim dokumentima RFC 5[5] i RFC 4.[6] Upotreba ovih termina je nastavljena na Xerox PARC sistemu sredinom sedamdesetih.

Jedan od konteksta u kojem su istraživači koristili ove termine bio je u dizajnu programskog jezika računarske mreže pod nazivom Decode-Encode Language (DEL).[5] Svrha ovog jezika bila je da prihvati komande sa jednog računara (korisničkog hosta), koji bi korisniku vratio statusne podatke dok je kodirao komande u mrežnim paketima. Drugi kompjuter koji podržava DEL, server-host, prima pakete, dekodira ih i vraća formatirane podatke korisničkom hostu. Program DEL na korisničkom hostu dobija rezultate koje prikazuje korisniku. Ovo je transakcija klijent-server. Razvoj DEL-a je tek počeo 1969. godine, kada je Ministarstvo odbrane Sjedinjenih Američkih Država osnovalo ARPANET (prethodnik interneta).

Klijent-host i server-host уреди

Klijent-host i server-host imaju nešto drugačija značenja od klijenta i servera. Host (domaćin) je svaki računar koji je povezan sa mrežom. Dok se reči server i klijent mogu odnositi i na računar ili na računarski program, server-host i user-host uvek se odnose na računare. Domaćin je višenamenski računar, klijenti i serveri su samo programi koji se pokreću na domaćinu. U modelu klijent-server, verovatnije je da se server posveti zadatku služenja.

Jedno od prvih pojavljivanja reči klijent je u dokumentu "Odvajanje podataka od funkcije u distribuiranom sistemu datoteka" iz 1978. godine koji su napisali Xerox PARC računarski naučnici Hauard Sturgis, Džejms Mičel i Džej Izrael. Autori pažljivo definišu pojam za čitaoce i objašnjavaju da ga koriste da bi napravili razliku između korisnika i mrežnog čvora korisnika (klijenta).[7] (Do 1992.godine, izraz server je ušao u opšti govor.)[8][9]

Centralizovano računarstvo уреди

Dodatne informacije: Istorija personalnih računara, Decentralizovano računarstvo, i Klaster računari.

Klijent-server model ne zahteva da server-domaćin mora da ima više resursa nego klijent-domaćin, već omogućava da bilo koji računar opšte namene proširi svoje mogućnosti koristeći deljene resurse drugih domaćina. Centralizovano računarstvo, međutim, konkretno dodeljuje velike količine resursa malom broju računara. Što je više obrade prebačeno od klijenta-domaćina na centralne računare, toliko klijenti-domaćini mogu biti jednostavniji.[10] Najvećim delom se oslanja na mrežne resurse (servere i infrastrukture) za obradu i skladištenje. Čvor bez diska učitava čak i operativni sistem sa mreže, a računarski terminal uopšte nema operativni sistem; već je samo ulazno/izlazni interfejs prema serveru. Suprotno, debeli (zahtevni) klijent, poput personalnog računara, ima mnogo resursa, i ne oslanja se na server u izvršavanju osnovnih funkcija.

Kako se cena mikroračunara smanjivala, a njihova moć rasla od osamdesetih do kasnih devedesetih godina 20. veka, mnoge organizacije su se prešle sa centralizovanih servera, poput mejnfrejm računara i miniračunara, ka debelim klijentima.[11] To je omogućilo veću, individualizovanu dominaciju nad računarskim resursima, ali komplikovano upravljanje informacionim tehnologijama.[10][12][13] Tokom 2000-ih godina, veb aplikacije su se razvile dovoljno da budu konkurentne aplikacionom softveru razvijenom za posebne mikroarhitekture. Ovaj napredak, pristupačnije masovno skladištenje i pojava servisno orijentisanih arhitektura, bio je među faktorima koji su ubrzali računarstvo u oblaku od 2010-ih.[14]

Poređenje sa peer-to-peer arhitekturom (mrežom ravnopravnih korisnika) уреди

Pored modela klijent-server, distribuirane računarske aplikacije često koriste peer-to-peer (P2P) arhitekturu.

U modelu klijent-server, server je često napravljen da radi kao centralizovani sistem koji služi mnogim klijentima. Snaga računara, memorija i potrebe skladištenja servera moraju biti prilagođene očekivanom radnom opterećenju (tj. broju klijenata koji se istovremeno povezuju). Sistemi za balansiranje opterećenja i sistemi za preopterećenje se često koriste za procenu implementacije servera.

U peer-to-peer mreži, dva ili više računara (vršnjaka) udružuju svoje resurse i komuniciraju u decentralizovanom sistemu. Vršnjaci su jednaki, odnosno čvorovi imaju istu moć u nehijerarhijskoj mreži. Za razliku od klijenata u klijent-server mreži ili klijent-red-klijent mreži, vršnjaci u peer-to-peer mreži komuniciraju direktno jedni s drugima.[15] U peer-to-peer umrežavanju, algoritam u peer-to-peer komunikacijskom protokolu balansira opterećenje, a čak i vršnjaci sa skromnim resursima mogu pomoći u deljenju opterećenja.[15] Ako čvor postane nedostupan, njegovi deljeni resursi ostaju dostupni sve dok ga drugi vršnjaci nude. U idealnom slučaju, vršnjak ne mora da dostigne visoku dostupnost jer drugi, redundantni vršnjaci nadoknađuju zastoj bilo kog resursa; kako se promena dostupnosti i opterećenja vršnjaka menja, protokol preusmerava zahteve.

I klijent-server i gospodar-sluga se smatraju potkategorijama distribuiranih peer-to-peer sistema.[16]

Vidi još уреди

Reference уреди

  1. ^ „Distributed Application Architecture” (PDF). Sun Microsystem. Pristupljeno 16. 6. 2009. 
  2. ^ The X Window System is one example.
  3. ^ Benatallah, B.; Casati, F.; Toumani, F. (2004). „Web service conversation modeling: A cornerstone for e-business automation”. IEEE Internet Computing. 8: 46. doi:10.1109/MIC.2004.1260703. 
  4. ^ Dustdar, S.; Schreiner, W. (2005). „A survey on web services composition” (PDF). International Journal of Web and Grid Services. 1: 1. doi:10.1504/IJWGS.2005.007545. 
  5. ^ а б Rulifson, Jeff (јун 1969). DEL. IETF. doi:10.17487/RFC0005 . RFC 5. Приступљено 30. 11. 2013. 
  6. ^ Shapiro, Elmer B. (март 1969). Network Timetable. IETF. doi:10.17487/RFC0004 . RFC 4. Приступљено 30. 11. 2013. 
  7. ^ Sturgis, Howard E.; Mitchell, James George; Israel, Jay E. (1978). „Separating Data from Function in a Distributed File System”. Xerox PARC. 
  8. ^ Harper, Douglas. „server”. Online Etymology Dictionary. Приступљено 30. 11. 2013. 
  9. ^ „Separating data from function in a distributed file system”. GetInfo. German National Library of Science and Technology. Pristupljeno 29. 11. 2013. 
  10. ^ а б Nieh, Jason; Novik, Naomi; Yang, S. Jae. „A Comparison of Thin-Client Computing Architectures” (PDF). Technical Report CUCS-022-00. New York: Network Computing Laboratory, Columbia University. [мртва веза]
  11. ^ d'Amore, M. J.; Oberst, D. J. (1983). „Microcomputers and mainframes”. Proceedings of the 11th annual ACM SIGUCCS conference on User services - SIGUCCS '83. str. 7. ISBN 0897911164. doi:10.1145/800041.801417. 
  12. ^ Tolia, Niraj; Andersen, David G.; Satyanarayanan, M. (mart 2006). „Quantifying Interactive User Experience on Thin Clients” (PDF). Computer. IEEE Computer Society. 39 (3). 
  13. ^ Otey, Michael (22. 3. 2011). „Is the Cloud Really Just the Return of Mainframe Computing?”. SQL Server Pro. Penton Media. Pristupljeno 1. 12. 2013. 
  14. ^ Barros, A. P.; Dumas, M. (2006). „The Rise of Web Service Ecosystems”. IT Professional. 8 (5): 31. doi:10.1109/MITP.2006.123. 
  15. ^ а б Yongsheng, H.; Xiaoyu, T.; Zhongbin, T. (2013). „An Optimization Model for the Interconnection among Peers of the P2P Network”. Journal of Applied Sciences. 13 (5): 700. doi:10.3923/jas.2013.700.707. 
  16. ^ Varma, Vasudeva (2009). „1: Software Architecture Primer”. Software Architecture: A Case Based Approach. Delhi: Pearson Education India. str. 29. ISBN 9788131707494. Pristupljeno 4. 7. 2017. »Distributed Peer-to-Peer Systems [...] This is a generic style of which popular styles are the client-server and master-slave styles.«