2 0 0

[Miesiąc Programowania:] Jak na przełomie lat zmieniła się technika projektowania aplikacji?

Dodane

10-07-2018

Artykuł sponsorowany
W dzisiejszych czasach nikt nie wyobraża sobie życia bez dobrodziejstw IT. Każdy z nas na co dzień korzysta z komputera, tabletu, smartfona, gdzie ma zainstalowanych mnóstwo aplikacji ułatwiających nam wiele codziennych czynności.

Zaczynając od najprostszych, takich jak latarka, kalkulator, kalendarz, przechodząc przez aplikacje bankowe, a kończąc na skomplikowanych systemach zarządzania przedsiębiorstwami. Najmłodsze pokolenie nie wie, że świat mógł kiedyś wyglądać inaczej, ale tak naprawdę to na przełomie ostatnich parunastu lat byliśmy świadkami szybkiego rozwoju i ogromnych zmian w tym obszarze.

Cofnijmy się do lat 70., a dokładnie do roku 1977, kiedy to firma Apple wypuściła na rynek kompletny komputer osobisty, który był w zasięgu przeciętnego Kowalskiego. Od tamtego czasu pojawiła się potrzeba tworzenia aplikacji dla końcowego użytkownika. Oczywiście lata 80. to czas aplikacji desktopowych z interface’em tekstowym. W tamtych czasach aplikacje były monolitami, instalowanymi na jednym komputerze bez dostępu do Internetu. Należało pamiętać, aby w przypadku pracy nad ważnymi, strategicznymi danymi, wykonać ich kopię zapasową na nośniku zewnętrznym np. dyskietce. W tamtej dekadzie ważnym aspektem był rozwój programowania obiektowego, w szczególności poprzez rosnącą popularność języka C++, który zastępował strukturalny język C. Zmieniło to w znaczący sposób podejście do programowania, pozwalając spojrzeć na problem do rozwiązania w bardziej naturalny sposób, korzystając z podstawowych paradygmatów programowani, które do dnia dzisiejszego są aktualne:

  • Abstrakcja
  • Hermetyzacja
  • Polimorfizm 
  • Dziedziczenie

Lata 90. to już zdecydowana popularyzacja aplikacji desktopowych. Komputery klasy PC są już łatwo dostępne. Pojawiają się pierwsze interface’y graficzne, a co za tym idzie potrzeba projektowania interfejsu przyjaznego da użytkownika.

W międzyczasie ekspansje rozpoczyna WAN (Wide Area Network) potocznie nazywana Internetem. Stworzyło to zupełnie nowe podejście do patrzenia na architekturę, przykładowo strony www. Oznaczało to, że można treść wystawić fizycznym serwerze i za pomocą publicznego adresu IP dać wszystkim do niej dostęp. Oczywiście przydatną opcją, a dzisiaj już nieodzowną, jest posiadanie domeny i wpisu w DNS, co zapewni nam przyjazny sposób tłumaczenia adresu www na jej adres, np. www.antyweb.pl na 104.25.224.37. Otworzyło to bardzo duże możliwości, teraz nie trzeba było już instalować na każdym komputerze aplikacji, ale można było dać setkom, milionom osób dostęp do jednej strony www. Oczywiście początkowe strony internetowe były proste i statyczne, a interakcja ograniczała się tylko do przejść pomiędzy stronami. Pierwszy najpopularniejszy język do tworzenia stron WWW to HTML (HyperText Markup Language), który dorobił się specyfikacji w 1991 r. i systematycznie ewoluuje aż do dnia dzisiejszego. Pozostając przy tematyce stron internetowych, koniecznie trzeba wspomnieć o języku CSS (Cascading Style Sheets), który definiował zbiór reguł wyświetlania elementów graficznych na stronach. Od 2011 roku CSS otrzymało standard od W3C (World Wide Web Consortium). CSS jest również jeżykiem używanym do dnia dzisiejszego, oczywiście jego możliwości wzrosły bardzo znacząco na przestrzeni ostatnich lat oraz pojawiło się wiele generatorów tego języka np. LESS, SASS, SCSS itp. 

Statyczne strony WWW szybko ewoluowały do rozbudowanych aplikacji osadzonych w przeglądarkach, gdzie można było zrobić praktycznie wszystko. Koniec lat 90. i lata 2000. to rozkwit aplikacji, a wręcz złożonych systemów internetowych napisanych w oparciu między innymi o ASP.NET czy PHP. W tym czasie JavaScript wprowadza możliwość dowolnej interakcji na stronie WWW. Do dzisiaj JavaScript jest jednym z najważniejszych języków używanych do budowania stron, powstało mnóstwo frameworków opartych o niego takich jak Angular, React, Konckoout i wiele innych. Wraz ze wzrostem popularności aplikacji internetowych, systematycznie tracą aplikacje desktopowe, które są trudniejsze do aktualizacji, utrzymywania, wdrażania itp.  

Dzisiejszy rozwój idzie zdecydowanie w kierunku aplikacji internetowych, korzystających z takich dobrodziejstwo jak:

  • SPA (Single Page Application) - daje użytkownikowi wrażenie, że cała strona jest załadowana od razu, a interakcja powoduje tylko częściowe zmiany na stronie (nie wymagające przeładowania całości), czyli tak jakbyśmy korzystali z aplikacji desktopowej. Ponadto częściowe doładowywanie strony przyspiesza jej działanie i odciąża serwer.
  • RWD (Responsive Web Design) - technika projektowania strony internetowej, tak aby układ był zależny od urządzenia na którym jest prezentowana, czyli dostosowywał się automatycznie do rozmiaru i rozdzielczości używanej przeglądarki.
  • PWA (Progressive Web App) – aplikacja, która symuluje uruchomienie strony www jak aplikacja natywna. Umożliwia między innymi przypięcie skrótu do aplikacji na pulpicie, a po uruchomieniu, korzystanie z niej trybie pełnoekranowym, bez widoczności uruchomionej w tle przeglądarki internetowej. 

Tym o to prostym sposobem zahaczyliśmy o aplikacje mobilne, które są bardzo istotnym obszarem, który z roku na rok coraz intensywniej się rozwija. Pierwsze smartfony pojawiły się w pierwszej połowie lat 2000., w 2007 roku miała miejsce premiera iPhone’a. Od tamtego czasu rokrocznie jesteśmy świadkami premier dziesiątek smartfonów, co stwarza olbrzymi rynek na tworzenia gier oraz małych i średnich aplikacji. Na dzień dzisiejszy główne systemy operacyjne to Android i iOS, jeszcze parę lat temu w grze był Windows Phone, ale niestety, Microsoft trochę przespał obszar mobilny i później już nie był w stanie nadgonić konkurencji, więc ostatecznie wycofał się z rozwijania systemu na telefony komórkowe. Nie możemy tutaj mylić Windows Phone z systemem mobilnym, gdyż tablety również należy zaliczyć do rynku mobilnego, a na nich Windows (aktualnie 10) jest jak najbardziej jest wykorzystywany.  

Mówiąc teraz o rozwiązaniach na urządzenia mobilne mamy tutaj spore możliwości.

 

W przypadku prostych, małych aplikacji/gier są to niezależne programy uruchamiane na urządzeniu mobilnym. W przypadku większych aplikacji korzystamy z podejścia grubego lub cienkiego klienta z serwerem głównym dostępnym w sieci. 

W przypadku cienkiego klienta zakładamy, że praktycznie cała logika aplikacji odbywa się na serwerze, a aplikacja służy tylko do wyświetlania rezultatów. Takie podejście jednak nie jest zalecane w mobilnych rozwiązaniach, gdyż wymaga stałego i dobrego połączenia internetowego, co w przypadku urządzeń przenośnych jest błędnym założeniem (pomijam specyficzne warunki, takie jak mobilne aplikacje dla firm np. dla magazynów, gastronomii itp.) Alternatywa, czyli gruby klient, zakłada, że aplikacja mobilna sama przetwarza większość operacji, jest w stanie zapisać wyniki lokalnie, a z serwerem komunikuje się w przypadku posiadania połączenia internetowego. Ten właśnie sposób jest obecnie najbardziej popularnym podejściem projektowania.

Drugą decyzją, która musimy podjąć przed rozpoczęciem tworzenia aplikacji na urządzenia mobilne, jest wybór technologii. Najbardziej oczywistym jest napisanie aplikacji natywnej, czyli dedykowanej na urządzenia z systemem iOS, Android, lub Windows. W tym wypadku stoimy przed koniecznością posiadania kompetencji programistycznych w różnych językach. Alternatywą może być skorzystanie z narzędzia umożliwiającego tworzenia aplikacji międzyplatformowych, tutaj przykładowo może to być Xamarin, który bazuje na platformie .NET, a umożliwia tworzenia aplikacji na wszystkie platformy, Flutter lub też wiele innych. Należy pamiętać jednak, że taka decyzja wiąże się z różnymi ograniczeniami, z którymi zachęcam się do zapoznania (to temat na inny artykuł). Dla aplikacji mobilnych należy pamiętać jeszcze o kanale dystrybucji, czyli App Store dla produktów Apple lub Google Play dla Androida. Każda aplikacja musi zostać zweryfikowana przez sklep, aby ostatecznie mogła się tam znaleźć. 

W ciągu ostatnich kilku lat (początki to rok 2008) znaczenie nabierają także wszelkie usługi oparte o chmurę, która bardzo dynamicznie się rozwija. Początkowo z chmurą kojarzone były po prostu wirtualne serwery, czyli komputer z zainstalowanym oprogramowaniem gdzieś w sieci, na który możemy się zalogować. Obecnie chmura to dziesiątki usług, które oferuje i w oparciu o które można pracować, budować informatyczne systemy czy też dostarczać dedykowane funkcjonalności. 

Na dzień dzisiejszy istnieje paru dużych graczy w obszarze chmury:

  • Microsoft Azure
  • Amazon AWS
  • Google Cloud Platform
  • Oracle Cloud
  • IBM Cloud 

Chmurę zasadniczo możemy podzielić się na trzy grupy usług:

IAAS (Infrastructure as a Service) - usługi polegające na dostarczaniu infrastruktury informatycznej. Dzięki skorzystaniu z IAAS nie musimy inwestować w kupowanie serwerów, wynajmowanie fizycznej lokalizacji itp. Otrzymujemy maszyny wirtualne parametrami odpowiadające naszym potrzebom, co więcej w dowolnym momencie możemy się przeskalować, gdy się okaże, że aktualna konfiguracja nie jest wystarczająca. Istnieje również możliwość korzystania z IAAS nie w pełnym wymiarze czasu, co pozwala znacząco zredukować koszty (płacimy tylko za czas korzystania).

PAAS (Platform as a Service) - usługa pozwalająca na uruchamianie własnych rozwiązań bezpośrednio w infrastrukturze chmury. Taki model pozwala skupić się tylko na wytwarzaniu warstwy aplikacji, jednocześnie nie przejmując się infrastrukturą sieciową, systemem operacyjnym, aktualizacjami i podobnymi aspektami czysto administracyjnymi.

SAAS (Software as a Service) - usługa polegająca na dostarczaniu klientowi gotowych usług za pośrednictwem Internetu (przykładowo Office 365).

Korzystanie z chmury daje obecnie bardzo dużą elastyczność i oszczędność. Nie musimy estymować zapotrzebowania na wydajność serwera w przestrzeni długoterminowej, a jedynie na podstawie aktualnego obciążenia dobierać parametry i płacić tylko za to, co jest nam niezbędne. Ponadto możemy tak aplikacje skonfigurować, alby skalowała się automatycznie, w zależności od wielu czynników. Kolejnym atutem jest niezawodność, wysoka dostępność oraz prostota automatycznych backupów.

Dzięki chmurze bardzo popularną obecnie architekturą jest serverless, FaaS (Function as a Service) która umożliwia tworzenie małych, niezależnych funkcji, które deployowane są w pewnej abstrakcji. Oznacza to ze skupiamy się tylko na funkcjonalności, a API zadba o jej uruchomienie, parametry wejściowe, skalowalność itp. 

Serverless jest kontynuacją architektury opartej o mikroserwisy, która zakłada tworzenie wielu, niezależnych serwisów (stanowych lub bezstanowych), które mogą ze sobą się komunikować. Podejście to daje bardzo dużo możliwości, gdyż odchodzi od monolitycznego podejście do projektowania, ale rozprasza logikę, co daje łatwy sposób na skalowanie systemu. W przeszłości jednym sposobem na zwiększenie wydajności był upgrade sprzętowy serwera (skalowanie wertykalne), natomiast architektura serwisowa umożliwia skalowanie horyzontalne, czyli dodawanie równoległe kolejnych serwerów i rozkładanie ruchu bądź odpowiedzialności pomiędzy nimi. 

Nie da się w tym artykule opisać wszystkich możliwości chmury, gdyż jest to materiał na książkę, a nie krótki tekst. Wystarczy zajrzeć do dokumentacji dowolnej chmury, aby się przekonać jak dużo różnych funkcji ona daje. 

Podsumowując, na dzień dzisiejszy wszystko wskazuje na to, że rozwój architektury idzie w kierunku aplikacji/systemów rozproszonych projektowanych w architekturze serverless, hostowanych w chmurze. Jednocześnie patrząc na historię, za parę lat z pewnością będziemy świadkiem kolejnej dużej zmiany, więc należy śledzić na bieżąco wszelkie trendy aby wiedzieć w jakim kierunku iść naprzód.

__

Autor: Bartłomiej Stopa

Komentarze (0)