Budowa i działanie serwisów internetowych - jaką rolę pełnią serwery, proxy, cache i load balancery

WebDevOp 

Jak działa strona internetowa, z czego jest zbudowana, jakie elementy potrzebne są do jej działania, na czym polega mechanizm serwowania serwisów internetowych? Oraz jaka jest rola serwerów www, baz danych, co to są proxy cache i load balancery. W końcu jak działa przeglądarka internetowa i do czego potrzebne są sieci CDN.

Budowa i działanie serwisów internetowych - jaką rolę pełnią serwery, proxy, cache i load balancery

Do napisania tego artykułu zainspirowały mnie spotkania z klientami, którzy swój biznes opierają o e-commerce, zlecają prace rozwojowe i utrzymaniowe swoich stron podwykonawcom a sami nie zupełnie rozumieją za co właściwie płacą. Przy okazji takich spotkań często wychodzą na jaw różnego rodzaju nieporozumienia na styku klient-zleceniobiorca, głównie wynikające z braku wspólnego języka. lub co bywa jeszcze gorsze zupełnie inne rozumienie tego samego przekazu przez dwie strony biznesu.

Zdarza się, że podczas rozmów pomiędzy inwestorem a zespołem realizującym zlecenie, strona techniczna - często złożona z młodych ludzi starających się o profesjonalne wrażenie, używa swojego slangu technicznego opowiadając o tym ile na serwerze mamy transakcji na sekundę, symultanicznych threadów, o problemach konkurencyjnego dostępu do zasobów, podatnościach XSS, sql-injection, autoryzacji i interfejsach API, frameworkach MVC, architekturze master-slave, potrzebnym lepszym load-balance’ingu, session stickiness, cacheingu  i wyzwaniach w integracji z CDN. Kto choć raz rozmawiał z sysopsami, web developerami, najpewniej doświadczył podobnego klimatu.

Zacznijmy od początku, od wyłożenia ludzkim językiem jak wyglądaproces dostarczania strony internetowej do przeglądarki.

Jak działają strony inernetowe

Upraszczając, cały Internet działa w oparciu o architekturę serwer - klient. Upraszczając dalej, klientem jest użytkownik internetu, który prosi inny komputer (serwer) o przesłanie mu tego co ten komputer komputer ma do zaoferowania (np. Stronę www, zdjęcie lub np. film).

Bardziej precyzyjnie, klientem jest nie tyle użytkownik co oprogramowanie działające na jego komputerze, które umie “rozmawiać” ze zdalnym serwerem - w przypadku omawiania działania serwisów internetowych, tym oprogramowaniem - klientem, jest przeglądarka www.

Przeglądarka Internetowa

Przeglądarka internetowa jest skomplikowanym (bardzo skomplikowanym) programem komputerowym, który stanowi środowisko do uruchamiania stron internetowych i wszystkiego tego, co na nie się składa:

  • Obrazów
  • Multimediów: filmów i dźwięku
  • tekstów o różnych czcionkach i formatach: tabele, listy, nagłówki, stopki, akapity, definicje itd
  • Różnych obiektów zewnętrznych, takich jak aplety flash czy silverlight - dla wtajemniczonych.

Przeglądarka nie tylko pozwala tym elementom się wyświetlić ale także ożywia je, sprawiając że strona reaguje na nasze kliki a także gesty (np podczas korzystania z ekranów dotykowych).

Przeglądarka jest swego rodzaju interfejsem za pomocą którego człowiek “porozumiewa” się ze stronami internetowymi.

Wszystko co ze stroną internetową możemy zrobić w przeglądarce i wszystko co możemy tam zobaczyć jest zaprogramowane przez programistę web (web developera) w plikach, które są pobierane z serwera przez przeglądarkę i przetwarzane. Przeglądarka po otrzymaniu kodu analizuje go i postępuje zgodnie z instrukcjami, które tam znajdzie tj. wyświetla stronę internetową w określonej postaci, z określonym tekstem, obrazami itd.

Kod, który przeglądarka otrzymuje od serwera zawiera się w plikach tekstowych, spośród których najważniejszym jest plik HTML (Hypertext Markup Language).

Pliki HTML

Plik HTML zawiera zapis struktury strony internetowej oraz jej treść (tekst). Zawiera opis sekcji, nagłówków, paragrafów, tabeli, linki do innych stron oraz odwołania do innych obiektów, które uzupełniają stronę jak zdjęcia lub filmy. To co opisuje plik HTML dotyczy jedynie struktury i treści ale strona musi także jakoś wyglądać i zachowywać się - za te aspekty odpowiedzialne są inne pliki.

Pliki CSS

Wygląd strony opisany jest w plikach CSS (Cascading Style Sheets). Zawartość tych plików mówi przeglądarce w jaki sposób wyświetlić i jak udekorować określony element lub blok na stronie (sam element jest zdefiniowany w pliku html). Określa kolor elementu, tło, użytą czcionkę, pozycję na stronie, marginesy i inne atrybuty związane z wyglądem.

Pliki Javascript

Jeśli strona zawiera elementy dynamiczne, które pojawiają się lub znikają po wykonaniu określonej akcji (np. kliknięcie), zmieniają kolor lub posiada galerię zdjęć, w której zdjęcia rotują się jak na karuzeli - logika takich zachowań zdefiniowana jest w plikach JS (Javascript).

Protokół HTTP

Kolejną rzeczą wymagającą wyjaśnienia jest sposób w jaki składające się na stronę pliki trafiają do przeglądarki. Otóż pliki przesyłane są przez serwer (łączami internetowymi) w odpowiedzi na żądania przeglądarki. Pierwsze żądanie określone jest przez adres jaki uruchamiamy w przeglądarce - wpisując adres www do pola z adresem w przeglądarce lub klikając na odnośnik z innej strony. W odpowiedzi na pierwsze żądanie, przeglądarka otrzymuje plik HTML, w którym znajdzie adresy do innych elementów składających się na wygląd i działanie strony (jak pliki CSS, JS, obrazki, ew. multimedia). Następnie przeglądarka “dociąga” pozostałe potrzebne jej pliki, których adresy znalazła w otrzymanym właśnie pliku HTML.

To że serwer rozumie żądania przeglądarki, a przeglądarka umie poprawnie zinterpretować odpowiedzi serwera wynika z faktu, że obie strony posługują się tym samym językiem - protokołem HTTP - w określonej wersji. Aktualnie dominująca wersją jest HTTP/1.1 ale coraz częściej spotyka się także znacznie efektywniejszy HTTP/2 (temu poświęcimy osobny materiał). 

Web Server

Serwer w kontekście systemów internetowych jest nie jednoznacznym określeniem, może oznaczać zarówno:

  • hardware, urządzenie komputerowe na którym działa system operacyjny (najczęściej linux) i oprogramowanie serwerowe - serwer ten na stałe podłączony jest do szybkiego łącza komputerowego i najczęściej fizycznie znajduje się w tzw centrum danych - firmie hostingowej.
  • oprogramowanie działające na serwerze sprzętowym (komputerze), które w ramach swoich funkcjonalności udostępnia usługi sieciowe klientom (takim jak np. przeglądarka internetowa).

W zależności od rodzaju świadczonych usług, serwery dzielone są na:

  • Web serwery (serwery http jak np. Apache, Nginx, ISS)
  • Serwery baz danych (mysql, postgresql, oracle)
  • Pocztowe (postfix)
  • Zapory ogniowe (firewall)
  • I inne

Serwerami opiekują się administratorzy - dbają oni aby wszystko działało jak powinno, monitorują stan usług, obciążenie serwera, poziom obsługiwanego ruchu, monitorują ewentualne błędy i reagują w razie potrzeb - np. aktualizują oprogramowanie do nowszych, lepszych i bezpieczniejszych wersji.

Oprogramowanie serwerowe (jak np. serwer www) musi być uzupełnione o oprogramowanie realizujące logikę dla naszego serwisu internetowego, przetwarzające dane (np. odczytujące lub zapisujące je w bazie danych, autoryzujące użytkowników, implementujące różne procesy w zależności od spełnienia określonych warunków). 

Po tym jak dane zostaną przetworzone przez serwer (np. treść artykułu zostanie pobrana z bazy danych), serwer musi je “opakować” w struktury języka HTML i odesłać do przeglądarki, tak aby ta je wyświetliła w postaci strony internetowej.

Takie oprogramowanie tworzone jest przez “web developerów” - ludzi, którym zleca się realizację serwisów internetowych.

Bazy danych

Wiadomo, że w świecie komputerów wszelkiego rodzaju dane przechowywane są na dyskach. W przypadku, kiedy te zapisane dane chcielibyśmy przetwarzać - np. łączyć zależnościami, przypisywać im określone atrybuty, jeśli chcielibyśmy te dane wyszukiwać, grupować sortować - w takich przypadkach do zarządzania danymi stosuje się bazy danych.

Baza danych jest specjalnym oprogramowaniem serwerowym, które jest odpowiedzialne za uporządkowany zapis danych, pilnowanie aby dane, które są ze sobą w określonych zależnościach, nie utraciły tych zależności. Bazy danych - co ważne,  zapewniają do swoich danych dostęp- w taki sposób, aby inne systemy mogły te dane wyszukać i pobrać - ale tylko te, którym administracyjnie taki dostęp został przyznany.

Do zarządzania danymi tj, wyszukiwania, filtrowania, zapisywania, tworzenia relacji, grupowania, sortowania itd służy specjalny język zapytań SQL (Structured Query Language).

Popularne systemy bazodanowe to: Mysql, MariaDb, Postrgresql, MS SQL Server. Warto także wspomnieć  Sqlite - popularną bazę danych dla zastosowań innych niż sieciowe tj. np dla aplikacji systemowych lub systemów wbudowanych.

Proxy Cache lub Reverse Proxy

Proxy to nic innego jak element pośredniczący w transmisji pomiędzy klientem a serwerem.

Proxy cache to serwer z oprogramowaniem, które zapamiętuje na określony czas pliki żądane przez klienta (tj. przeglądarkę www). Kiedy przeglądarka chce pobrać z serwera pliki strony www, najpierw łączy się (nawet o tym nie wiedząc) z serwerem proxy - ten sprawdza, czy żądane pliki posiada w swojej pamięci. Jeśli tak, weryfikuje czy te posiadane pliki nie są przestarzałe - jeśli ciągle są aktualne, zwraca je przeglądarce. W ten sposób żądanie po pliki nawet nie dociera do serwera www. W takim wypadku transmisja odbywa się krótszą drogą - przyspieszając cały proces pobierania strony.

Drugą korzyścią z używania reverse proxy, jest odciążenie serwera www - serwer otrzymuje mniejszą ilość żądań, mniej żądań musi przetworzyć przez co ma mniej pracy.

Najpopularniejszymi, darmowymi implementacjami serwerów proxy-cache są:

  • Varnish
  • Nginx
  • Squid
  • Apache Traffic Server

Trzeba być świadomym pewnych ograniczeń związanych z naturą cacheingu (buforowania stron). Otóż strony, które zawierają treści szybko zmieniające się o istotnym znaczeniu ich aktualności tak jak np. aktualne kursy notowań giełdowych, nie nadają się do buforowana, gdyż za każdym żądaniem użytkownik powinien otrzymać aktualne, świeże wartości.W tym wypadku wartości zapamiętane np. 1 minutę wcześniej byłyby już nieaktualne.

To programista lub administrator serwera zdecyduje, które z żądań http i na jak długo mogą zostać zbuforowane.

Load Balancer

Load balancer to taki dystrybutor ruchu pomiędzy serwerami. Jeśli nasza strona jest na tyle popularna, że pojedynczy serwer www nie nadąża z jej serwowaniem i jest przeciążony, potrzebny będzie dodatkowy serwer dla odciążena tego pierwszego. Czasem takich zrównoleglonych serwerów jest kilka, kilkadziesiąt lub kilkaset dla zapewnienia dostatecznej wydajności. W przypadku takiego zrównoleglenia load-balancer pełni funkcję menadżera ruchu, który kieruje żądania na wszystkie dostępne serwery w ilościach dla nich optymalnych.

Fizycznie load-balancer jest oprogramowanem, zainstalowanym na wydzielonym serwerze.

 

 

WebDevOp
autor

WebDevOp