1. Czym są zaawansowane aplikacje internetowe, czyli wstęp lekko historyczny

1.3. Kontekst telekomunikacyjny

Automatyczne generowanie dokumentów HTML pozwalało już budować całkiem skomplikowane serwisy, które z dzisiejszej perspektywy moglibyśmy nazwać pierwszymi aplikacjami internetowymi. Jednakże koncepcja przesyłania z serwera do klienta pełnej treści dokumentu HTML po każdym kliknięciu w aplikacji była problematyczna o tyle, że samo przekazywanie danych poprzez sieć trwało pewien czas – na tyle długi, że często był on przeszkadzający w swobodnym i płynnym korzystaniu z aplikacji. Przesłanie prostej strony trwało ułamki sekundy, ale przy bardziej złożonych dokumentach czas oczekiwania mógł wynosić nawet i kilka-kilkanaście sekund – w zależności od parametrów łącza oraz rozmiaru dokumentu.

Tu należy nadmienić, że wraz z rozwojem technologii telekomunikacyjnych, na przestrzeni lat systematycznie wzrastała średnia przepustowość łącz wykorzystywanych do realizacji dostępu do Internetu. Na początku lat 90-tych XX wieku dostęp do ogólnoświatowej sieci możliwy był w zasadzie wyłącznie za pośrednictwem tzw. połączeń wdzwanianych (ang. dial-up) z prędkościami rzędu 14.4 kbps. Jeszcze na przełomie XX i XXI wieku pojawiły się modemy dial-up 56 kbps w standardzie V.92/V.90. W kolejnej dekadzie (do 1. stycznia 2011) Telekomunikacja Polska S.A. (dominujący operator usług telekomunikacyjnych w Polsce) oferował także usługę o nazwie Stały Dostęp do Internetu (SDI) pozwalającą na dostęp do sieci z prędkością 115.2 kbps - zdecydowaną zaletą była stała opłata, niezależna od czasu trwania połączenia. W międzyczasie wdrożone zostały technologie ADSL, później VDSL, pozwalające na klasycznej parze miedzianej uzyskać do 55 Mbps prędkości pobierania. Od kilku lat jesteśmy świadkami systematycznego przechodzenia z połączeń przewodowych miedzianych na światłowodowe (technologia FTTH - Fiber to the Home) lub na szerokopasmową łączność bezprzewodową za pośrednictwem sieci komórkowej LTE i 5G, a także łączność satelitarną (np. poprzez urządzenia Starlink). Obecnie (w roku 2024) dostępne są dla klientów indywidualnych łącza oferujące komunikację z prędkościami przekraczającymi nawet 1 Gbps.

Więcej o postępie technicznym w dostępie do sieci Internet przeczytasz w poniższych artykułach:
Kontekst telekomunikacyjny jest istotny dla kierunku rozwoju aplikacji internetowych, gdyż parametry łącz dostępowych wykorzystywanych przez użytkowników końcowych stanowiły kiedyś główny czynnik wpływający na czas potrzebny do załadowania strony. Czas ten można wyrazić wzorem:
\( t_{http} = t_{mdt\_request} + t_{http_{pt}} + t_{mdt\_response} \)
gdzie:
- tmdt_request - czas przesłania pełnego żądania od klienta do serwera,
- tps_http - czas przetwarzania żądania HTTP przez serwer,
- tmdt_response - czas przesłania pełnej odpowiedz od serwera do klienta.

Twórca aplikacji internetowej ma bezpośredni wpływ na wartość czasu przetwarzania żądania HTTP. Wartość ta zależna jest bezpośrednio od rozwiązań przyjętych przez twórcę aplikacji sieciowej w zakresie obejmującym m.in. zagadnienia takie jak:
  • złożoności oprogramowania uruchamianego w celu przetworzenia żądania (czyli właściwego kodu aplikacji),
  • rodzaj zastosowanego serwera HTTP (np. Apache, nginx, Node.js),
  • szybkości procesora zainstalowanego w serwerze,
  • liczby żądań przetwarzanych równolegle w tym samym czasie przez serwer,
  • wykorzystania cache po stronie serwera,
  • wykorzystanie tzw. load balancera, rozdzielającego nadchodzące żądania pomiędzy wiele serwerów zajmujących się ich obsługą.
Z kolei czas niezbędny na przesłanie tych danych, tzw. czas dostarczenia komunikatu (ang. message delivery time, tmdt) określić możemy w przybliżeniu za pomocą prostej relacji:
\( t_{mdt} = {{MS * 8} \over {NT }} \)
gdzie:
  • tmdt - czas dostarczenia komunikatu wyrażony w sekundach,
  • MS - rozmiar danych do przesłania (ang. message size) wyrażony w bajtach (np. rozmiar odpowiedzi odsyłanej przez serwer, wraz z nagłówkami protokołu HTTP),
  • NT - wypadkowa prędkość transmisji poprzez sieć (ang. network throughput) wyrażony w bitach na sekundę.
Przyjmując MS = 100 kB w zależności od wypadkowej prędkości transmisji w sieci otrzymamy różne wyniki:
  • dla NT = 1 Mbps uzyskujemy czas transmisji t = 0.8 sekundy,
  • dla NT = 100 Mbps uzyskujemy czas transmisji t = 8 milisekund.
Pierwszy przypadek reprezentuje łącze o kiepskich parametrach (np. sieć komórkową pracującą na skraju zasięgu lub w warunkach silnego przeciążenia), drugi przypadek może zachodzić np. w przypadku wykorzystywania łącza światłowodowego.

Choć twórca aplikacji internetowej nie ma wpływu na rodzaj łącza wykorzystywanego przez użytkownika końcowego, to przy projektowaniu powinien uwzględnić spodziewane jego parametry. Jeśli wiadomo, że aplikacja będzie wykorzystywana głównie na urządzeniach stacjonarnych, z szerokopasmowym dostępem do internetu, to jak widać na powyższym przykładzie przesłanie nawet 100 kB może nie wprowadzić istotnych opóźnień i tym samym można rozważyć pozostawienie sytuacji bez zmian. Jeśli jednak wiadomo, że specyfika aplikacji powoduje jej wykorzystanie głównie na telefonach komórkowych, projektant powinien rozważyć zmniejszenie ilości przesyłanych danych aby zminimalizować efekt zwiększonego czasu odpowiedzi aplikacji, np. poprzez:

  • precyzyjną selekcję przesyłanych informacji (należy wybrać tylko te, które są niezbędne do zapewnienia funkcjonalności),
    • w szczególności: renderować widok po stronie klienta na podstawie przesłanych danych, nie przesyłać pełnego widoku np. w postaci dokumentów HTML,
  • zastosowanie kompresji,
  • w przypadku multimediów: wybór formatu lub nastaw kodeka skutkujących wyższym stopniem kompresji.

W przeszłości, gdy powszechnym było wykorzystywanie łącz o przepustowościach rzędu 50 - 100 kbps, szczególnie dbano o to, aby oszczędnie gospodarować dostępnymi zasobami i tym samym przesyłać poprzez sieć jak najmniej danych. Z pomocą przychodziły tutaj m.in. techniki dynamicznego renderowania zawartości strony po stronie klienta - o tym przeczytasz w kolejnym rozdziale.

Dla dociekliwych: od czego zależy wypadkowa prędkość transmisji?

Na wypadkową prędkość transmisji poprzez sieć wpływa kilka czynników. Dostępna przepustowość wykorzystywanego łącza dostępowego jest tylko jednym ze składników. Przyjrzyjmy się temu bliżej.

Aby wyznaczyć czas dostarczenia wiadomości (ang. message delivery time, tmdt), należy uwzględnić następujące detale:
  • czas transmisji jednego pakietu (ang. packet transmission time, tptt) - to czas od nadania pierwszego bitu komunikatu (pakietu) do nadania ostatniego bitu wiadomości. Czas transmisji pakietu w sekundach można uzyskać z rozmiaru pakietu w bitach (PS) i szybkości transmisji w bitach na sekundę (BR, ang. bit-rate) :
    \( t_{ptt} = { PS \over BR } \)
    Przykładowo, dla sieci Ethernet 100 Mbps maksymalny rozmiar pakietu to 1526 bajtów, więc:
    \( t_{ptt} = {{1526~B ~* ~ 8 ~bit} \over {100~\cdot 10^6 ~bps}} = 122 ~\mu s \)
  • czas propagacji (ang. propagation delay) - czas wynikający bezpośrednio z fizycznych właściwości wykorzystywanego medium transmisyjnego zgodnie z relacją:
    \( t_{pd} = {s \over v} \)
    s - fizyczna odległość pomiędzy nadawcą a odbiorcą,
    v - prędkość propagacji fali elektromagnetycznej w wykorzystywanym medium (np. w parze miedzianej jest to około 2*108 m/s, a dla fal radiowych 3*108 m/s).
    Dla przykładu przyjmijmy, że transmisja odbywa się na odległość 10 km za pośrednictwem pary miedzianej. Czas propagacji wyniesie wtedy:
    \( t_{pd} = { { 10 ~\cdot ~10^3 ~m }\over{ 2~\cdot ~10^8~{m \over s}} } = 50 ~\mu s \)
  • czas dostarczenia pakietu (ang. packet delivery time) - czas pomiędzy wysłaniem pierwszego bajtu przez nadawcę a odebraniem ostatniego bajtu przez odbiorcę stanowi sumę czasu transmisji oraz czasu propagacji i jest wyrażany wzorem:
    \( t_{pdt} = { t_{ptt} + t_{pd} } \)
    W praktyce przy transmisji poprzez sieć pakiety wędrują pomiędzy wieloma urządzeniami (np. routerami), więc każdy z odcinków łącz należy rozpatrywać osobno, a także dodać czas związany z kolejkowaniem i przetwarzaniem pakietów na urządzeniach pośredniczących. W sieciach rozległych czas ten jest rzędu milisekund.
  • czas round-trip (ang. round-trip time, trtt) - czas pomiędzy rozpoczęciem transmisji przez nadawcę do momentu pełnego odebrania przez niego odpowiedzi. Na ten parametr wpływa zarówno czas propagacji tpr (i to dwukrotnie, gdyż temu opóźnieniu podlega zarówno komunikat przesyłany do odbiorcy jak i odsyłana odpowiedź), jak i czas przetwarzania odpowiedzi (tps) - zgodnie ze wzorem:
    \( t_{rtt} = 2 ~\cdot t_{pd} + t_{ps} \)
  • czas przetwarzania żądania (ang. processing delay, tps) - czas niezbędny na przetworzenie pakietu przez odbiorcę (np. odesłanie potwierdzenia ACK). Czas ten zależny jest m.in. od chwilowego obciążenia węzła docelowego.
  • wypadkowa przepustowość (ang. network troughput, NT) - dla wykorzystywanych przez protokół HTTP połączeń transportowych poprzez protokół TCP, z uwagi na zastosowany tam mechanizm kontroli przepływu (ang. flow control), wypadkową przepustowość można wyrazić jako stosunek rozmiaru okna (ang. window size, WS) do czasu round-trip:
    \( NT = { {WS} \over t_{rtt}} \).
Więcej na ten temat przeczytasz m.in. w Wikipedii w artykule Transmission time.